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?

Foi útil?

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.

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