Design De Tabela De Configurações Do Sistema, O Melhor Modelo
-
18-09-2019 - |
Pergunta
Alguém sugeriu mover uma mesa cheia de configurações, onde cada coluna é um nome de configuração(ou tipo) e as linhas são os clientes e suas respectivas definições para cada configuração.
IDENTIFICAÇÃO | IsAdmin | ImagePath
------------------------------
12 | 1 | \caminho\para\images
34 | 0 | \caminho\para\images
A desvantagem é que sempre queremos um novo nome de configuração(ou tipo) podemos alterar a tabela(via sql) e adicionar o novo (coluna)definição de nome/tipo.Em seguida, actualize as linhas(de modo a que cada cliente tem agora um valor para essa configuração).
A nova tabela proposta de design.A proposta é ter uma coluna para o nome da configuração e outra coluna para a definição.
IDENTIFICAÇÃO | Nomeconfiguração | SettingValue
----------------------------
12 | IsAdmin | 1
12 | ImagePath | \caminho\para\images
34 | IsAdmin | 0
34 | ImagePath | \caminho\para\images
O ponto que eles fizeram foi que a adição de uma nova configuração foi tão fácil como uma simples instrução de inserção para a linha, sem adição de coluna.
Mas algo não parece certo sobre o segundo projeto, que parece ruim, mas eu não posso vir com argumentos contra ela.Estou errado?
Solução
Esta é uma variação de um "Valor do atributo da entidade"Esquema (Joel e Random So Question)
Tem alguns prós e mais contras, e praticamente garantida terminar em lágrimas.
Outras dicas
A segunda abordagem, na verdade, assemelha-se a um dicionário.Eu encontrei este para ser uma escolha conveniente de um aplicativo, eu estou trabalhando pelas razões que você mencionou.Existem algumas limitações para esta abordagem, então você precisa ser cuidadoso sobre eles:
- Manter seus principais cadeias de caracteres estática, nunca mude.
- Certifique-se de cada vez que as definições do dicionário é recuperado você atualizar para a versão mais recente (geralmente pela adição de chaves e definição padrão e os valores de avisar o usuário).
- É complicado mistura de seqüência de caracteres e e.decimal de dados, você precisará escolher um ou fornecer vários colunas anuláveis, assim você pode armazenar dados no formato apropriado.Manter metadados em torno de algum lugar.
- O código que lida com o dicionário deve envolvê-la em uma rigidez de moda, nunca expô-la como um verdadeiro dicionário (no sentido de um datastructure), fornecer uma classe em vez disso.
Usar nomes de colunas para distinguir configurações geralmente é uma idéia terrível. A entidade com a qual você está lidando é a configuração e possui o nome e o valor dos atributos. Se você precisar usar o mesmo nome em contextos diferentes, faça a configuração hierárquica, ou seja, cada configuração, exceto que a raiz recebe um pai. Vocês clientes poderiam então ter a raiz como pai e o caminho sob cada cliente seria o mesmo para cada configuração. Você pode usar colunas diferentes para tipos de dados adicionais, se desejar.