65 Stimmen

Best Practices für Nachschlagetabellen: DB-Tabellen... oder Aufzählungen

Wenn wir die verfügbaren Stellen in einem Unternehmen speichern müssen (z. B. Manager, Teamleiter, ... usw.). Was sind die besten Praktiken für die Speicherung dieser Daten? Ich habe zwei Meinungen mit Kommentaren... "Sicher, ich heiße Sie willkommen"

**

  1. Speichern Sie sie als DB-Tabelle mit den Spalten ID und Name, und bearbeiten Sie sie mit Abfragen und Joins.
  2. Speichern Sie es als Enum und vergessen Sie die DB-Tabelle.

**

Meiner Meinung nach würde ich mich für die erste Lösung entscheiden, wenn ich wechselnde Gegenstände habe. Damit ich diese Optionen nicht hart als Enum kodieren muss.
Ich kann mich für die Enum-Lösung entscheiden, wenn ich keinen Zweifel daran habe, dass sich die Daten nicht ändern werden (z. B. Geschlecht: männlich, weiblich).

HINWEIS: Ich programmiere auf Englisch, und die UI-Kultur ist vielleicht Arabisch. Wenn ich mit der Enum-Lösung arbeiten werde, werde ich die kulturbasierten Zeichenfolgen in der Präsentationsschicht hart codieren, ist es aus der Perspektive der Best Practices in Ordnung!!!!

Ich würde gerne Ihre Meinung erfahren und wissen, ob meine Gedanken mit den empfohlenen "Best Practices" übereinstimmen?

50voto

Cruachan Punkte 15597

Im Allgemeinen sollten Sie Aufzählungen nur dann verwenden, wenn es eine eindeutige Reihe von Elementen gibt, die sich nicht ändern werden, z. B. Grundfarben oder Kontinentnamen. Ansonsten sind Nachschlagetabellen mit entsprechend implementierten Fremdschlüsseln so gut wie immer die beste Option.

Es gibt eine mögliche Variante der Nachschlagetabellen-Option, bei der Sie möglicherweise eine große Anzahl von Nachschlagetabellen für einfache Id/Wert-Beziehungen haben. Ein Paar aus Domänen- und Nachschlagetabelle kann die Anzahl der erforderlichen Tabellen drastisch reduzieren, wenn auch mit einem gewissen zusätzlichen Codierungsaufwand. In diesem Fall würden Sie eine Domänen-Tabelle haben

DomainID int identity
Domain   varchar(255)

und eine Schlüssel/Wert-Tabelle

DomainID int
ID       int identity
Value    varchar(255)

Daher wird der Tabelle "Bereich" eine Zeile hinzugefügt, die jeder Nachschlagetabelle entspricht, die Sie sonst verwenden würden, und alle (Schlüssel-Domäne)/Wert-Paare werden der Tabelle "Wert" hinzugefügt. Neben der Vereinfachung der Datenbankstruktur hat dieser Ansatz auch den Vorteil, dass "Nachschlagetabellen" im Anwendungscode dynamisch erstellt werden können, was in einigen Anwendungen äußerst nützlich sein kann.

13voto

Kevin Lee Garner Punkte 807

Option 1: Speicherung als DB-Tabelle mit den Spalten ID und Name und Bearbeitung mit Abfragen und Joins ist das Minimum, das Sie tun sollten.

Von " Fünf einfache Datenbank-Design-Fehler, die Sie vermeiden sollten ":

Auch wenn die von der Anwendung erzwungene Integrität manchmal von den Entwicklern bevorzugt wird, bleibt es wahr, dass das DBMS immer noch der zentrale Erzwinger der gesamten Integrität sein muss.

Am besten ist es, die Datenbank so zu implementieren, als wüsste sie nichts über die Benutzeroberfläche. Das heißt, die Datenbank sollte alle Regeln, die sich auf die Daten beziehen, durchsetzen; in diesem Fall sollte die Datenbank durchsetzen, welche Werte angemessen sind. Um aufzuzählen, welche Werte angemessen sind, sollte eine Nachschlagetabelle für jede Art von Nachschlagewert ist normalerweise der richtige Weg. Oftmals kommen und gehen Anwendungen, aber die Datenbank bleibt bestehen und wird wiederverwendet.

Wenn Sie Aufzählungen in der Anwendung erzwingen wollen, können Sie das natürlich tun, aber was auch immer Sie tun, stellen Sie sicher, dass die Datenbank ihre Aufgabe als Datenbank erfüllt und die Integrität der Daten bewahrt. Wenn es mühsam ist, machen Sie sich die Mühe; Sie legen die Grundlagen dafür. In " Datenbankdesign und der schiefe Turm von Pisa Der Autor betont, warum es so wichtig ist, in einer Datenbank die richtigen Grundlagen zu schaffen.

Ich hoffe, das hilft.

7voto

James Piggot Punkte 407

Ich entscheide mich immer für die Datenbankoption, da sie mehrere Vorteile hat. Einer der Hauptvorteile ist, dass man die Namen/Beschreibungen der Elemente in den Nachschlagelisten ändern kann, ohne den Code ändern zu müssen. Ich bin auch der Meinung, dass eine einzige Tabelle besser ist als viele kleine Tabellen. Auf diese Weise kann man eine einzige Routine programmieren, um die Werte aus der Datenbank abzurufen, was die Wartungskosten senkt. Eine einzige Routine zu haben bedeutet, dass man mehr Aufwand betreiben kann, damit sie gut funktioniert.

Zu Cruachans obiger Antwort ist zu sagen, dass Sie mit einer Tabelle auskommen können, wenn Sie eine Eltern-Kind-Beziehung haben, bei der die Zeilen ohne Elternteil den Bereich beschreiben. Alle Datensätze, die zu einer Domäne gehören, haben die Domänenzeile als übergeordnete Zeile.

ID           int autonumber -- integer primary key for performance
DomainID     int            -- null for domains
Name         varchar(100)   -- Name of the item
Description  varchar(255)

So könnte zum Beispiel eine Liste von Währungen enthalten:

 ID    DomainID   Name              Description

 100   NULL       ISO Currencies    List of ISO Currency codes
 101   100        BHD               Bahrain Dinar
 102   100        GBP               British Pound
 103   100        EUR               Euro  
 104   100        USD               US Dollar

5voto

Simon Punkte 5896

Ich neige dazu, mich für die Datenbankoption zu entscheiden, da dies eine einfache Abfrage mit aussagekräftigen Daten (d. h. Namen statt IDs) ermöglicht.

Wenn ich mir sicher bin, dass sich die Werte nicht ändern, werde ich sie auch in der Anwendung aufzählen, denn es macht die Entwicklung viel einfacher, wenn man sich die ID eines Elements nicht merken muss, und macht den Code auch viel lesbarer.

Bei diesem Ansatz kann ich wählen, ob ich die Nachschlagetabelle in Abfragen einbeziehen möchte oder nicht. Ich würde sie beispielsweise in eine Berichtsabfrage einbeziehen, in der ich den Nachschlagewert anzeigen möchte, sie aber möglicherweise nicht einbeziehen, wenn ich Daten in meine Anwendung lade, wenn ich sie stattdessen aus der Aufzählung ableiten kann.

Wenn sich die Werte ändern oder modifiziert werden können, ist eine Aufzählung natürlich nicht möglich.

Nur Sie können die Auswirkungen der UI-Kultur beurteilen, ich bin mir der Kultur meiner Benutzer zu 100 % sicher, so dass ich mir darüber nicht allzu viele Gedanken machen muss :).

4voto

SquareCog Punkte 19031

Ist das Einzige, was Sie in eine db einfügen wollen, die Liste der Arbeitgeber?

Wenn ja, legen Sie sie in einer Datei ab, und das war's dann.

DBs sind großartig, aber wenn Sie einen einfachen Schlüsselwert benötigen, sind sie überflüssig. Sie bieten eine Menge an Möglichkeiten. Aber sie tun auch eine Menge Dinge hinter den Kulissen, sie sind eine weitere Sache, die Sie unterstützen müssen... wenn Sie mit einer einzigen Datei mit 20 Tabulator-getrennten Zeilen auskommen können, gehen Sie mit Einfachheit.

Wenn Sie viele Dinge haben, die diese Art von Nachschlagen erfordern, oder wenn Sie denken, dass Sie sie aktualisieren müssen, während ein Kunde versucht, sie zu lesen, oder wenn Sie später Querverweise herstellen wollen - dann entscheiden Sie sich für die DB.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X