Ich arbeite an der Entwicklung einer relationalen Datenbank, die Transaktionen auf einem Gerät protokolliert, an dem ich für mein Unternehmen arbeite. Es gibt verschiedene Arten von Transaktionen, die auf dem Gerät ausgeführt werden können. Daher haben wir ein "trans_type" -Feld in einer unserer Hauptdatensatztabellen. Meine Gruppe hat beschlossen, den Typ dieses Feldes als Ganzzahl zu definieren und ihn als Aufzählungstyp zu behandeln. Meine Intuition sagt mir, dass es eine bessere Idee wäre, dieses Feld zu einer Zeichenfolge zu machen, damit unsere Datenbankdaten besser lesbar und benutzerfreundlicher sind. Meine Mitarbeiter scheinen besorgt zu sein, dass dies mehr Ärger verursachen würde, als es wert ist. Dass Zeichenkettenvergleiche zu kostspielig sind und die Möglichkeit von Tippfehlern zu groß ist, ist ein Hindernis.
Wenn Sie sich also mit einem Feld in einer relationalen Datenbank befassen, bei dem es sich im Wesentlichen um einen Aufzählungswert handelt, ist es Ihrer Meinung nach eine bessere Entwurfsentscheidung, dieses Feld als Ganzzahl oder als Zeichenfolge zu definieren? Oder gibt es eine andere Alternative, die ich übersehen habe?
Hinweis: Explizite Aufzählungstypen werden von der von uns verwendeten Datenbank nicht unterstützt. Und die Software, die wir entwickeln, um mit dieser Datenbank zu kommunizieren, ist in C ++ geschrieben.
quelle
Antworten:
Aufzählungstypen sollten eine separate Tabelle in Ihrer Datenbank sein, die eine ID-Nummer, einen Zeichenfolgennamen und andere Spalten enthält, die Sie möglicherweise nützlich finden. Dann existiert jeder Typ als Zeile in dieser Tabelle. Anschließend zeichnen Sie in Ihrer Tabelle die Transaktionen auf. Das Feld "trans_Type" sollte ein Fremdschlüssel für den Schlüssel dieser Referenztabelle sein. Dies ist eine Standardpraxis bei der Datenbanknormalisierung.
Auf diese Weise haben Sie die eine offizielle Namenszeichenfolge gespeichert, können Zahlenvergleiche für die Leistung verwenden und haben die referenzielle Integrität, dass jede Transaktion einen gültigen Typ hat.
quelle
Es ist üblich, eine
trans_types
Tabelle zu erstellen und sie dann von Ihrer Haupttabelle mit einem Fremdschlüssel referenzieren zu lassentrans_type_id
. Dadurch wird sichergestellt, dass Ihre Datensätze nur auf gültige Aufzählungstypen verweisen.Beispiel:
Beispieldaten:
quelle
Wenn die Werte als Ganzzahlen in die Datenbank eingehen, speichern Sie sie auf diese Weise. Das Konvertieren in Zeichenfolgen ist beim Schreiben in die Datenbank nicht erforderlich. Sie können sich immer auf eine Nachschlagetabelle mit den Zeichenfolgen- / Textwerten beziehen (normalisierter).
Dies hat den zusätzlichen Vorteil, dass der Zeichenfolgewert an einem einzelnen Speicherort aktualisiert wird, anstatt eine Art Aktualisierungsroutine auszuführen. Anstelle von 1 = 'Rot' könnte es auch 'Wirklich Rot' sein
Dies ist nicht ideal für die Berichterstellung, da nur eine Tabelle mit Zeichenfolgenwerten (denormalisiert) benötigt wird. Ein Index für dieses Feld würde die Leistung gut genug machen.
Die meisten RDBMS bieten ausreichend Leistung. Obwohl Ihre Idee, die Tabelle in ihrer einfachen Datenform "lesen" zu können, ist der Beitritt zu einer Tabelle keine große Sache. Gewöhnen Sie sich einfach an, eine Ansicht oder ein ähnliches Objekt zu verwenden.
quelle
Ich muss mit den anderen Antworten auf diese Frage, die den Ansatz der getrennten Aufzählungstabelle befürworten, nicht einverstanden sein.
Ich bin jedoch auf jeden Fall dafür, das Gesagte nicht zu wiederholen, und beziehe mich einfach auf die akzeptierte Antwort auf (mehr oder weniger) dieselbe Frage zum Stapelüberlauf: /programming//a/229919 / 114626
quelle