Question

Nous utilisons NHibernate, et l’un des modèles courants pour stocker des informations de type énumération consiste à définir des tables séparées pour l’énum, ??et à faire simplement référence à l’ID dans l’entité / table principale qui utilise l’énum. Un exemple simple:

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

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

La table MessageType contient un petit nombre de valeurs énumérées, telles que: SMS, MMS, PSMS, etc.

Est-il utile de placer les valeurs enum dans des tableaux séparés comme celui-ci? J'imagine que le principal avantage de l'énumération est que vous pouvez plus facilement l'étendre dans le futur et qu'il est plus normalisé, mais le problème est que vous devez créer une jointure chaque fois que vous récupérez un message. Y at-il un point de rupture où vous choisiriez l’un sur l’autre?

Était-ce utile?

La solution

L'utilisation d'énums implique de ne pas utiliser une autre table comme vous le faites actuellement. C'est aussi plus rapide que vous l'avez dit et tellement plus simple.

Dans les deux cas, vous pouvez ajouter d'autres options, mais la question est la suivante: si vous ajoutez un autre élément dans le tableau, devrez-vous recompiler l'application pour ajouter cette fonctionnalité?

Je veux dire, si votre conception d’application est couplée et pour prendre en charge un nouveau type de message, vous devez recompiler (peut-être parce que vous devez inclure la mise en oeuvre SMS), cela ne vaut pas la peine d’avoir un tableau séparé et vous devez utiliser des énumérations.

D'un autre côté, si votre entité manque de logique (table des pays ou des états, par exemple) ou si votre application peut insérer un nouveau type de message sans recompiler, vous devez utiliser une autre table. Pour cela, vous pouvez changer votre table en quelque chose comme ceci:

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

Vous pouvez également avoir un fichier de configuration séparé, dans lequel vous pouvez personnaliser les dépendances injectées.

Autres conseils

Je créerais une énumération dans votre code avec l'ID correspondant à votre table MessageType. Ensuite, utilisez simplement cela dans vos classes et nHibernate devrait pouvoir le mapper correctement.

Je me suis écarté des tables enum, en particulier lorsque ces données n'ont pas besoin d'être gérées. Allez-vous ajouter de plus en plus de MessageType au fur et à mesure?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top