Múltiplas tabelas de interseção vs múltiplas junções

Aug 22 2020

Tenho uma relação hierárquica entre minhas tabelas, com os filhos com chaves estrangeiras referindo-se a seus IDs pais (assumindo que idseja a chave primária para cada tabela):

Departmenttem muitos Category Groups
Category Grouptem muitos Category(-ies)
Categorytem muitos Sub-Category(-ies)
Sub-Categorytem muitos Attributes.

Agora, todas essas entidades, exceto Attributes, têm significado opcional, se eu não selecionar nada em minha IU baseada em lista suspensa em cascata hierárquica, preciso exibir os Attributes que pertencem a todos os Departments, se eu selecionar apenas um, Departmententão preciso exibir Attributes que pertencem a todos os Category Groups pertencentes a isso Departmente assim por diante.

Obviamente, uma opção para implementá-lo é fazer uma junção interna entre todas as tabelas a serem acessadas Attribute. Por exemplo, se nada for selecionado, será:
Departmentjunção Category Group
interna junção Category
interna junção Sub-Category
interna junção interna Attribute
para mostrar todos os atributos pertencentes a todos os departamentos.

O outro pensamento na minha cabeça é ter mesa de intersecção / relação de mapeamento (s) -
DepartmentAttributeRelationque tem chaves estrangeiras para Departmente Attribute,
CategoryGroupAttributeRelationque tem chaves estrangeiras para CategoryGroupe Attributee assim por diante.
Isso permitirá a pesquisa direta para obter os Attributedados de qualquer entidade.

Minha pergunta é - há alguma desvantagem na segunda abordagem acima ou há abordagens melhores para resolver isso?

Respostas

3 TulainsCórdova Aug 22 2020 at 15:51

Qual é o problema com a junção interna? Crie uma visualização para que você nunca precise ver ou escrever a consulta feia de várias junções novamente.

A primeira e mais importante desvantagem da alternativa é que você pode ter inconsistências, ou seja, você pode ter dados nessas "tabelas de junção" que podem se contradizer, ou seja, são possíveis anomalias de inserção. Você precisaria escrever código para evitar que essas anomalias ocorressem.

Tenha em mente, porém, que às vezes quando alguém acredita que uma hierarquia estará para sempre em, digamos, 4 níveis de profundidade, então um requisito surge quando uma sub-subcategoria é necessária e o design de hierarquia de nível fixo é quebrado. Uma solução preparada para o futuro em que pode haver uma profundidade desconhecida de níveis de hierarquia e apenas os elementos "folha" podem ter atributos é uma questão de outra pergunta e outra resposta.