Vorteile einer Datenbanktabelle mit, anstatt nur schwer eine einfache Liste von Datencodierung, wenn die Daten von 1 app verbraucht wird [geschlossen]

StackOverflow https://stackoverflow.com/questions/986377

  •  13-09-2019
  •  | 
  •  

Frage

Für eine Weile, ich habe durch eine Reihe von Leuten erzählt, die eine Liste von US-Staaten (und Territorien) sollte, die die Informationen verwenden, in einer Datenbanktabelle und im Cache für Anwendungen gespeichert werden. Die einzigen Gründe, die sie mir geben hierfür ist eine Normalisierung zu fördern und weil „es ist, wie wir haben es immer getan“.

Wenn nun die Liste ändert sich oft, weil der Umfang der Anwendung international wächst (sagen kanadischen Provinzen sind), kann ich verstehen, die Liste auf eine Datentabelle zu abstrahieren, die auch eine Länderkennung auch anzeigen würde. wenn die Liste ist jedoch ziemlich verschlossen und nur auf 1 Bildschirm der Anwendung verwendet wird, ist es lohnt sich, die Abfrage und das Caching zu tun? Ist der Unterschied zwischen einem SMALLINT Fremdschlüssel zu speichern, dass viel besser als ein CHAR (2)? Ist es immer praktisch?

grübelt gerade diesen Trend, dass ich mit den Unternehmen gesehen habe, die ich gearbeitet habe.

War es hilfreich?

Lösung

Ich habe mich in der Datenbank, für ein paar Gründe:

  1. Es ist nur so gut Normalisierung der Praxis.

  2. Warum soll ich alle Daten in meiner Anwendung codieren, wenn ich vermeiden, dass durch sie in der Datenbank setzen?

  3. Persönlich Ich mag den Komfort des garantierten Einzigartigkeit Eigentums. Wenn zwei Tabellen auf den gleichen Fremdschlüssel verweisen, weiß ich, dass sie die gleiche Sache sind referencning. Wenn zwei zufällig den gleichen zwei Zeichencode teilen ... na ja, dann ist es für die Anwendung auf.

  4. Constraint Checks .... viele zwei Zeichencodes sind illegal, aber die Datenbank wird dir nicht helfen mit, dass in der Lage zu. Es ist viel schwieriger, einen illegalen Fremdschlüssel Eintrag zu haben.

  5. Geschwindigkeit. Ich habe nicht gebenchmarkt, so ich kann mich irren, aber ich wette, die die Datenbankeinträge für Sie kombinieren schneller ist, als Sie es selbst zu tun. Wenn Sie den Status-Code für etwas anderes verwenden (zum Beispiel zu bekommen, die nicht abgekürzten Namen des Staates oder eine Liste gültiger zipcodes für diesen Zustand zu halten), ein Join ist wahrscheinlich schneller als das, was würden Sie schreiben.

Andere Tipps

Wenn Sie weitere Informationen befestigen, wie staatlich Bevölkerung oder Wirtschaftsleistung zur Primärinformation wollen, dann macht ein FK diese Erweiterung (und nachfolgende Abfragen) einfacher und erweiterbare

Wenn Sie normalisieren - Warum nicht

Ein paar Gründe, möchten Sie vielleicht die Datenbanklösung über die hartcodiert wählen.

Extensibility Gründe:

  • Programmatically Datensätze hinzugefügt (obwohl neue Staaten sind nicht sehr wahrscheinlich innerhalb der Lebensdauer der Anwendung erscheinen, aber die Benutzer haben manchmal seltsame Bedürfnisse). Dies könnte auch für die Benutzer Ihrer Anwendung über einen dedizierten Bildschirm gelassen werden. Wenn die Werte hartcodiert sind, werden Sie eine neue Version Ihrer Software liefern müssen.
  • Hinzufügen von Informationen zu Datensätzen. Zum Beispiel könnten Sie gebeten, eine benutzerdefinierbare Bevölkerung Feld hinzuzufügen.

Integrität Gründe:

  • Fremdschlüssel werden Sie Integritätsbedingungen geben: Sie sind sicher nie einen Datensatz mit einem falschen Zustand Code hinzufügen, wenn Sie einen Fremdschlüssel haben. Beachten Sie, dass Sie die Codes als Schlüssel verwenden könnten, was würden Sie speichern die Joins Problem.

Noch hängt die Wahl der Größe, Anzahl der Benutzer und die Lebensdauer Ihrer Anwendung. Je größer diese Zahlen, desto mehr sollten Sie die Datenbanklösung in Betracht ziehen.

Gab es wirklich einen Vorteil 4 Ziffern für das Jahr in einem Datum zu benutzen? Es dauerte nicht in dieser siebzigeren App in COBOL wahrscheinlich scheint bis y2k zu überleben.

Was passiert, wenn Bushs Pläne zum North American Free Trade Union (NAFTA) und es ist Währungsunion mit der Amero nicht der letzte Schritt und BC, Ontario etc.become Staaten ist?

Ich bin völlig einverstanden, dass es unwahrscheinlich genug ist, dass die Staaten Liste in unserem Leben verändern wird, dass Sie die Liste hart codieren können.

Aber ein Grund, warum es in einer Datenbank zu setzen wäre, so könnte man den Zustand Abkürzung mit dem vollständigen Zustandsnamen verknüpfen. Dann können Sie den Zustand Abkürzung als eindeutigen Schlüssel verwenden und tun schließt sich darauf. Dies würde sich lohnen Normalisierung.

Ich habe noch nie einen zwingenden Grund, nicht zu verwenden, um die Staatsabkürzung als eindeutigen Schlüssel, auch wenn es geht gegen „richtiges“ Datenbank-Design gehört. Genau wie ich habe noch nie eine Datenbank normalisiert auf die fünfte Ebene gesehen, dass jede Art von Leistung hatte. Obwohl fünfte Normalform ist eine saubere und pädagogische Übung.

Wenn Sie später US-Territorien hinzufügen möchten fügen Sie einfach in die Tabelle und tada!

Auch als Aiden sagte, wenn Sie weitere Informationen zu diesen hinzugefügte Aufzeichnungen wollen, wird es leichter sein, weg von zu bauen, wenn sein in der DB als wenn sie fest einprogrammiert

Ich sage nein. Wenn es eine einzige Anwendung ist, dass Sie werden beibehalten, und Sie sind nicht etwas komplizierter machen als Filtern eine Abfrage nach Zustand können Sie nur so schnell hinzufügen / entfernen Staaten aus einem hartcodierte Array. wenn Sie viel komplexer jedoch tun Joins Staaten als Schlüssel beteiligt, dann würden Sie wahrscheinlich wollen sie in einer Tabelle setzen.

Sie erhalten Fremdschlüssel in der Datenbank verwendet wird.

Wir könnten einen 51st Zustand hinzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top