Sagen, ich habe eine Tabelle mit Immobilien-Inserate. Jede Auflistung kann entweder "Zu verkaufen" oder "Zu vermieten" sein. Daher kann ich "Zu verkaufen" auf 0, "Zu vermieten" auf 1 abbilden und es als INT in der Datenbank speichern. Es wäre jedoch viel aussagekräftiger, wenn ich es in einem Feld vom Typ CHAR als "Verkauf"/"Miete" speichern würde. Oder ich kann 0 und 1 zwei Konstanten FOR_SALE und FOR_RENT in meinem Programm zuordnen. Oder benutze die Zeichen 'S' und 'R'. Was sind die besten Verfahren zum Speichern solcher Eigenschaften in einer Datenbank mit der Bedingung, dass die Gesamtzahl der Optionen für eine solche Eigenschaft sehr klein ist.Integer vs Char für DB Record Eigenschaft
Antwort
Sie einen Char (1) oder ein int (abhängig von der Anzahl der Optionen) und ordnen Sie die Werte zu konstanten Strings, auf diese Weise verwenden, sollten Sie sparen Platz finden und die Saiten leicht konfigurierbar sein in der Zukunft :)
Ich würde immer eine int für jede ID verwenden, einschließlich derjenigen von einfachen Nachschlagetabellen mit nur wenigen Datensätzen. Es ist konsistenter und wenn es nicht viele Aufzeichnungen gibt, verschwenden Sie auch nicht viel Platz. – GolezTrol
PostgreSQL und MySQL Unterstützung enumerated types, das ist, was Sie klingen wie Sie suchen. Das einzige Problem bei Aufzählungstypen ist die Portabilität von Datenbanken. Oracle hat beispielsweise keine Aufzählungstypen, daher müssen Sie stattdessen CHAR verwenden. Wenn Sie beispielsweise PostgreSQL verwenden, gibt es keinen Grund, die Funktionen nicht zu nutzen. Wenn Sie eine Datenbankportabilität benötigen, ist die Verwendung von CHAR (1) oder NUMBER (1) am effizientesten.
Update: Sie können eine Nachschlagetabelle mit einem Fremdschlüssel verwenden, wie andere Antworten erwähnt haben, aber mit booleschen Werten, die sich nicht ändern, würde dies unnötige Komplexität einführen. Vor allem, wenn Sie daran denken, zusätzliche Klassen für sie in Ihrem ORM zu erstellen. Wenn Sie jedoch erwarten, dass sich der Wertebereich für diese Spalte/Variable ändert, ist die Verwendung der Nachschlagetabelle der beste Weg.
Ich würde das Attribut in der Liste als int speichern und es zu einem Fremdschlüssel für eine Nachschlagetabelle machen, wo Sie Ihre Beschreibungen hinzufügen können.
Der Vorteil, sie im Gegensatz zu Enumerationen in einer separaten Nachschlagetabelle zu haben, besteht darin, dass Sie den Suchwert in Abfragen in Ihren Programmen einfacher verwenden können. – GolezTrol
Ich würde einfach eine char(1)
für solch eine einfache Sache verwenden; Ich würde auch eine CHECK
Einschränkung (falls verfügbar), um ein gewisses Maß an Plausibilitätsprüfung zu geben. Das Hinzufügen einer zusätzlichen Tabelle für etwas mit nur zwei Werten ist ein wenig sinnlos, selbst wenn es peripherisch korrekt ist. Auch ein S
oder R
in der Spalte wird Ihnen helfen, wenn Sie in der Datenbank von Hand Debuggen oder Mucking around, 1
oder 6
wird ziemlich bedeutungslos sein.
Natürlich, wenn Sie Werte haben und nicht mit sinnvollen mnemonischen Zeichen kommen können, um sie darzustellen, dann ist der Ansatz "int and a FK" sinnvoller.
Sie können ganz einfach von char(1)
zu "int und ein FK" wechseln, wenn es jemals notwendig wird.
Gibt es nicht die Möglichkeit etwas zu verkaufen und gleichzeitig zu vermieten? – Adam
@adam, das ist oft der Fall nach den Makler, die ich kenne. – HLGEM
Datenbanksystem? – DeaconDesperado