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

Bom design de banco de dados, número variável de atributos


As opções 1, 2 e 3 compartilham uma falha muito séria:você precisa modificar o esquema de tabela subjacente quando alguém sonha com um novo atributo. No caso da Opção 1, o problema é agravado pela possibilidade de introdução de um novo tipo de equipamento. Você tem certeza de que o conjunto de atributos é fixo para sempre? Quão feliz você ficará em fazer interrupções ou dizer ao cliente que não, você não pode ter um novo atributo?

Se é muito provável que você faça consultas em atributos comuns, tente um híbrido de 3 e 4, com um traço de 2 lançado na divisão do tipo de atributo em vez do tipo de equipamento, que parece muito mais volátil. A opção 4, se bem entendi, é uma versão de forma normal da opção 1 que resolve todos os seus problemas inerentes (escassez e fragilidade).
INVENTORY( id*, model, manufacturer, serial )
ATTRIBUTE( id*, name, type, description )
INVENTORY_FACT_STRING( inv_id*, attr_id*, value )
INVENTORY_FACT_NUMBER( inv_id*, attr_id*, value )
INVENTORY_FACT_LIST_STRING( inv_id*, attr_id*, ordinal*, value )

etc.