Tabelle di intersezione multiple vs join multipli

Aug 22 2020

Ho una relazione gerarchica tra le mie tabelle, con i bambini che hanno chiavi esterne che si riferiscono ai loro ID genitore (supponendo che idsia la chiave primaria per ogni tabella):

Departmentha molti Category Groups
Category Groupha molti Category(-ies)
Categoryha molti Sub-Category(-ies)
Sub-Categoryha molti Attributes.

Ora, tutte queste entità eccetto Attributes hanno un significato facoltativo se non seleziono nulla nella mia interfaccia utente basata su menu a discesa gerarchico a cascata, devo visualizzare le Attributes che appartengono a tutte le Departments, se seleziono solo una Departmentallora devo visualizzare le Attributes che appartengono a tutti gli Category Groupappartenenti a quello Departmente così via.

Ovviamente, un'opzione per implementarlo è fare un inner join tra tutte le tabelle a cui arrivare Attribute. Ad esempio, se non è selezionato nulla, sarà:
Departmentinner join Category Group
inner join Category
inner join Sub-Category
inner join Attribute
per mostrare tutti gli attributi appartenenti a tutti i reparti.

L'altro pensiero nella mia testa è di avere intersezione / relazione tabella di mappatura (s) -
DepartmentAttributeRelationche ha le chiavi esterne a Departmente Attribute,
CategoryGroupAttributeRelationche ha le chiavi esterne per CategoryGroupe Attributee così via.
Ciò consentirà alla ricerca diretta di raggiungere Attributei dati di qualsiasi entità.

La mia domanda è: ci sono degli svantaggi nel secondo approccio di cui sopra o ci sono approcci migliori per risolverlo?

Risposte

3 TulainsCórdova Aug 22 2020 at 15:51

Qual è il problema con l'unione interna? Crea una vista in modo da non dover mai più vedere o scrivere di nuovo la brutta query multi-join.

Il primo e più importante svantaggio dell'alternativa è che puoi avere incongruenze, cioè puoi avere dati in quelle "tabelle di join" che potrebbero potenzialmente contraddirsi, cioè sono possibili anomalie di inserimento. Dovresti scrivere del codice per evitare che si verifichino tali anomalie.

Tieni presente, tuttavia, che a volte quando si crede che una gerarchia sarà per sempre a molto, diciamo, 4 livelli di profondità, allora un requisito si presenta quando è necessaria una sottocategoria e il design della gerarchia a livello fisso si interrompe. Una soluzione a prova di futuro in cui può esserci una profondità sconosciuta dei livelli di gerarchia e solo gli elementi "foglia" possono avere attributi è questione di un'altra domanda e di un'altra risposta.