É seguro dizer que o modelo de banco de dados EAV / CR é ruim. Dito isto,
Pergunta: Que modelo, técnica ou padrão de banco de dados deve ser usado para lidar com "classes" de atributos que descrevem produtos de comércio eletrônico que podem ser alterados em tempo de execução?
Em um bom banco de dados de comércio eletrônico, você armazenará classes de opções (como resolução de TV e, em seguida, uma resolução para cada TV, mas o próximo produto pode não ser uma TV e não ter "resolução de TV"). Como você os armazena, pesquisa com eficiência e permite que seus usuários configurem tipos de produtos com campos variáveis que descrevem seus produtos? Se o mecanismo de pesquisa descobrir que os clientes geralmente pesquisam TVs com base na profundidade do console, você pode adicionar a profundidade do console aos seus campos e adicionar uma profundidade única para cada tipo de produto de TV em tempo de execução.
Há um bom recurso comum entre os bons aplicativos de comércio eletrônico, nos quais eles mostram um conjunto de produtos e, em seguida, têm menus laterais "detalhados", nos quais é possível ver "Resolução da TV" como um cabeçalho e as cinco principais resoluções de TV mais comuns para o conjunto encontrado. Você clica em um e ele mostra apenas TVs com essa resolução, permitindo aprofundar a seleção, selecionando outras categorias no menu lateral. Essas opções seriam os atributos dinâmicos do produto adicionados no tempo de execução.
Discussão adicional:
Para encurtar a história, existem links na Internet ou descrições de modelos que possam "academicamente" corrigir a seguinte configuração? Agradeço a Noel Kennedy por sugerir uma tabela de categorias, mas a necessidade pode ser maior que isso. Descrevo-o de uma maneira diferente abaixo, tentando destacar o significado. Talvez eu precise de uma correção de ponto de vista para resolver o problema, ou talvez precise aprofundar o EAV / CR.
Adore a resposta positiva ao modelo EAV / CR. Meus colegas desenvolvedores dizem o que Jeffrey Kemp abordou abaixo: "novas entidades devem ser modeladas e projetadas por um profissional" (fora do contexto, leia sua resposta abaixo). O problema é:
- entidades adicionam e removem atributos semanalmente
(as palavras-chave de pesquisa determinam atributos futuros) - novas entidades chegam semanalmente
(os produtos são montados a partir de peças) - entidades antigas desaparecem semanalmente
(arquivadas, menos populares, sazonais)
O cliente deseja adicionar atributos aos produtos por dois motivos:
- departamento / pesquisa de palavras-chave / gráfico de comparação entre produtos similares
- configuração do produto de consumo antes da finalização da compra
Os atributos devem ter significado, não apenas uma pesquisa por palavra-chave. Se eles quiserem comparar todos os bolos com "glacê de chantilly", eles podem clicar em bolos, clicar no tema do aniversário, clicar em glacê de chantilly e verificar todos os bolos que são interessantes, sabendo que todos têm glacê de chantilly. Isso não é específico para bolos, apenas um exemplo.