Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Projeto de banco de dados:opções de EAV?


Embora minimalista como mostrado, a tabela de atributos do Model2 introduz o conceito de metadados na mistura, com tudo de bom que vem dela. Existem outras vantagens no Model2, por exemplo, os ganhos de desempenho associado a um tamanho de linha menor (da tabela Valor), mas gostaria de me concentrar no conceito de metadados.

Mesmo como está A tabela de atributos do Model2 constitui um repositório de todos os atributos válidos (com model1, seria necessário executar uma consulta agregada para obter essa lista). Além disso, e como está , o repositório é suficiente para introduzir restrições de chave estrangeira para ajudar a manter a integridade do conjunto de dados (com o Modelo 1 seriam necessárias formas externas de validação dos valores armazenados na coluna de atributos.

Com algumas adições simples, a tabela de atributos pode se tornar um repositório versátil que pode ser usado para vários propósitos. Por exemplo, a tabela pode incluir alguns dos seguintes
  • informações como o nome amigável para exibição de cada atributo
  • algumas bandeiras que indicam o tipo de campo (numérico vs. string vs. data etc.), para tratamento/processamento diferenciado
  • a tabela de valores específica onde o atributo subjacente é armazenado (o modelo mostra apenas uma tabela, mas a otimização/escalonamento às vezes solicita a divisão das tabelas)
  • o fato de que o atributo pode ser armazenado como sua própria coluna na tabela "Value" (novamente uma forma de otimização, essencialmente obtendo o melhor dos dois mundos:a flexibilidade do esquema do modelo EAV, mas o desempenho do tradicional modelo relacional para os atributos mais usados ​​e/ou mais comuns a todas as entidades.
  • a capacidade de renomear atributos, sem perturbar a tabela principal. Alterações apenas no nível de metadados.
  • várias semânticas orientadas a aplicativos. Por exemplo, indicadores de que um atributo específico deve ser oferecido como um dos campos de pesquisa básica versus avançada.

Em poucas palavras, a tabela de atributos se torna um recurso que permite que o aplicativo seja realmente orientado a dados (ou mais precisamente, meta acionado por dados). De fato, você também pode gostar de uma tabela de entidades, ou seja, uma onde os metadados pertencentes aos vários tipos de entidades são coletados:quais são os diferentes tipos de entidade, quais atributos são permitidos para qual tipo de entidade etc.

Agora... preste atenção ao comentário de zerkms , abaixo da própria pergunta. Apesar de todos os seus benefícios, o modelo EAV também vem com sua parcela de desvantagens e desafios, como sugerido que a complexidade das consultas vem à mente e também problemas de desempenho. Essas preocupações, no entanto, não devem desqualificar, a priori, EAV:há muitos casos de uso em que EAV é uma abordagem melhor.
Assumindo que EAV é a escolha, então Model2, ou mesmo algo um pouco mais sofisticado é definitivamente superior ao model1.