Pergunta

Nós estamos usando NHibernate, e um dos padrões comuns que temos para armazenar enum-like informações é definir tabelas separadas para o enum, e apenas fazer uma referência ao ID na entidade / tabela principal que usa o enum. Um exemplo simples:

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

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

A tabela MessageType contém um pequeno número de valores enum como:. SMS, MMS, PSMS, etc

Vale a pena colocar valores enum em mesas separadas como este? Eu acho que o pro da enumeração é que você pode mais facilmente estendê-lo no futuro e é mais normalizada, mas o con é que você tem que fazer uma junção de cada vez que buscar uma mensagem. Existe um ponto de ruptura onde você iria escolher um sobre o outro?

Foi útil?

Solução

Usando enums implica a não use outra tabela, como você está fazendo agora. É também mais rápido como você disse e muito mais simples.

Em ambos os casos, você pode adicionar mais opções, mas a questão é: se você adicionar outro item na tabela que você está indo a necessidade de recompilar o aplicativo para adicionar esse recurso

Quer dizer, se o design do aplicativo é acoplado e apoiar um novo tipo de mensagem que você precisa para recompilação (talvez porque você precisa incluir a implementação SMS), não vale a pena ter uma tabela separada, e você deve usar enums

Por outro lado, se quer sua entidade carece de lógica (um tal países, ou mesa Unidos), ou seu aplicativo pode conectar um novo tipo de mensagem, sem recompilação você deve usar outra tabela. Para isso, você pode alterar sua tabela para algo como isto:

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

Ou você poderia ter um arquivo de configuração separado, onde você pode personalizar as dependências injetadas.

Outras dicas

Gostaria de criar uma enumeração em seu código com correspondência ID à sua mesa MessageType. Então, em suas aulas é só usar isso e nHibernate deve ser capaz de mapear corretamente.

Eu fui desviando mesas de enumeração, especialmente quando esses dados não precisam ser gerenciados de dados. Você vai estar adicionando mais e mais de que você vá MessageType?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top