Frage

Wir sind mit NHibernate, und eine der gemeinsamen Muster, die wir für die Speicherung von ENUM-ähnlichen Informationen haben, ist getrennte Tabellen für die Enumeration zu definieren und nur einen Verweis auf die ID in der Haupteinheit / Tabelle vornehmen, die Enum verwendet. Ein einfaches Beispiel:

Message
-------
ID (bigint PK)
MessageTypeID (bigint FK)
Body (varchar)

MessageType
-----------
ID (bigint PK)
Value (varchar)

Die Message Tabelle enthält eine kleine Anzahl von ENUM-Werten wie:. SMS, MMS, PSMS, etc

Lohnt es sich Enum-Werte in separaten Tabellen wie diese setzen? Ich denke, die pro der Enumeration ist, dass Sie leichter in die Zukunft verlängern kann, und es ist mehr normalisiert, aber der Nachteil ist, dass Sie ein jedes Mal, wenn Sie eine Nachricht holen beitreten zu tun haben. Gibt es eine Bruchstelle, wo man einen über die andere wählen würde?

War es hilfreich?

Lösung

Aufzählungen Verwendung impliziert eine andere Tabelle nicht verwenden, wie Sie gerade tun. Es ist auch schneller als Sie gesagt haben und so viel einfacher.

In beiden Fällen können Sie weitere Optionen hinzufügen, aber die Frage ist: wenn Sie ein anderes Element in der Tabelle hinzufügen wollen, müssen Sie die Anwendung neu kompilieren solche Funktion hinzuzufügen

Ich meine, wenn Ihr Anwendungsdesign gekoppelt ist und einen neuen Nachrichtentyp Sie unterstützen müssen neu kompiliert werden (vielleicht, weil Sie die SMS-Implementierung umfassen müssen), ist es nicht wert ist es eine separate Tabelle zu haben, und Sie sollten Aufzählungen verwenden

Auf der anderen Seite, wenn entweder die Einheit der Logik fehlt (eine solche Länder oder Staaten Tabelle), oder Ihre Anwendung in einem neuen Nachrichtentyp ohne recompile stecken können, sollten Sie eine andere Tabelle verwenden. Dazu könnten Sie Ihren Tisch zu so etwas wie dies ändern:

MessageType
-----------
ID (bigint PK)
Value (varchar)
ImplementationType (varchar) (ie: Xyz.SMSSender, Xyz)

Sie können auch eine getrennte Konfigurationsdatei haben, in dem Sie die injizierten Abhängigkeiten anpassen können.

Andere Tipps

würde ich mit passender ID zu Ihrer Message Tabelle eine Enum in Ihrem Code erstellen. Dann auf Ihren Klassen verwendet nur, dass und nHibernate sollte es zur Karte richtig kann.

Ich habe von ENUM-Tabellen wurde verirrt, vor allem, wenn diese Daten nicht verwalteten Daten zu sein brauchen. Werden Sie mehr und mehr Message der Zugabe werden, wie Sie gehen?

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