Für mich besteht die klassische Weisheit darin, Enum-Werte (OrderStatus, UserTypes usw.) als Lookup-Tabellen in Ihrer Datenbank zu speichern. Dadurch kann ich die Datenintegrität in der Datenbank erzwingen und falsche oder Nullwerte usw. verhindern.
Aber mehr und mehr fühlt sich das für mich unnötig an. Ich muss nicht nur Tabellen für diese Werte erstellen (oder habe eine unhandliche zentrale Nachschlagetabelle), aber wenn ich einen Wert hinzufügen möchte, muss ich daran denken, es zu 2 hinzuzufügen (oder mehr, Produktion, Tests, Live-DBs zählen ) und die Dinge können leicht aus dem Takt geraten.
Es fällt mir immer noch schwer, Nachschlagetabellen loszulassen.
Ich weiß, dass es wahrscheinlich bestimmte Szenarien gibt, in denen man einen Vorteil gegenüber dem anderen hatte, aber was sind deine allgemeinen Gedanken?
Ich habe beides gemacht, aber jetzt bevorzuge ich es, sie in Klassen im Code zu definieren.
Neue Dateien kosten nichts, und die Vorteile, die Sie in der Datenbank haben, sollten als Geschäftsregeln behandelt werden.
Ich habe auch eine Abneigung dagegen, Daten in einer Datenbank zu speichern, die sich wirklich nicht ändert. Und es scheint, ein Enum passt zu dieser Beschreibung. Es macht keinen Sinn für mich, eine States-Lookup-Tabelle zu haben, aber eine States enum-Klasse macht für mich Sinn.
Wenn es gepflegt werden muss, würde ich sie in einer Nachschlagetabelle in der Datenbank belassen. Selbst wenn ich denke, dass sie nicht gepflegt werden müssen, würde ich trotzdem zu einer Nachschlagetabelle gehen, so dass, wenn ich falsch liege, es keine große Sache ist.
BEARBEITEN:
Ich möchte klarstellen, dass, wenn die Enum nicht Teil des DB-Modells ist, ich es in Code belasse.
Ich lege sie in die Datenbank, aber ich kann wirklich nicht warum ich das tun. Es scheint einfach "richtig" zu sein. Ich glaube, ich begründe es damit, dass es immer eine "richtige" Version dessen gibt, was die Enums sein können, indem ich die Datenbank überprüfe.
Schema-Abhängigkeiten sollten in der Datenbank selbst gespeichert werden, um sicherzustellen, dass Änderungen an Ihrer Architektur leicht transparent für die App durchgeführt werden können.
Ich bevorzuge enums, da es die frühe Bindung von Werten im Code erzwingt, so dass Ausnahmen nicht durch fehlende Werte verursacht werden
Es ist auch hilfreich, wenn Sie die Codegenerierung verwenden können, die die Zuordnungen der Ganzzahlspalten zu einem Aufzählungstyp einbringen kann, so dass Sie in der Geschäftslogik nur mit leicht einprägsamen Aufzählungswerten umgehen müssen.
Betrachten Sie es als eine Art Dokumentation.
Wenn Sie die Enum-Konstanten im Code, der den dB verwendet, bereits korrekt dokumentiert haben, benötigen Sie wirklich eine doppelte Dokumentation (zu verwenden und zu pflegen)?
Tags und Links database