Ci sono libri molto impegnativi sulla Gerarchia dei dati e su come sia da inquadrare l'ottimizzazione della gestione.
A prescindere dalle 5 Regole Normali, la gestione Gerarchica si infila in mezzo a tutte ma è molto complessa da definire e comprendere...!
In sostanza per gestire Gerarchie di dati o dati conlegame Gerarchico ci sono solo 2 opzioni una delle 2 tuttavia non è in gradi di consentire la gestione nel caso in cui un Elemento possa far parte di più genitori...!
La 1° prevede una costruzione gerarchica progressiva di un Codice... che consenta di sapre sempre chi sia il padre...!
Esempio
1 PrimoElementoPadre
11 PrimoElementoFiglio(di 1)
111 PrimoElementoFiglio(di 11)
12 SecondoElementoFiglio(di 1)
ecc...
Questo fa si che il Len(CampoChiave) definisca il Livello di parentela, questo campo solitamente è Stringa e si assegnano Char di separazione per evitare di definire un MAXCHAR per Gerarchia che ha dei limiti oggettivi.
Ovviamente questo sistema con codice gerarchico parlante impedisce che un'elemento possa essere figlio di Più padri.
Ha ovvi vantaggi di ricerca e gestione, semplice da comprendere e la verifica dei figli si effettua su ricerche di stringhe parziali... della Chiave del Genitore
SELECT * FROM T1 WHERE Chiave LIKE ChiaveGenitore & "*"
Il sistema più flessibile ma nel contempo più complesso si basa su 2 Tabelle.
La prima Tabella di Elementi Semplici, sostanzialmente è una Tabella di Anagrafica nella quale non è inserito NESSUN elemento gerarchico.
Avremo una Chiave(PK spesso COUNTER) ed i campi Desc, Nome Ecc...!
Ci sarà poi una 2° Tabella che conterrà solo 2 Campi, uniti in PK in quanto solo uniti saranno CHIAVE.
Questa Tabella avrà la definizione di GERARCHIA.
I 2 Campi sono Padre(InteroLungo) e Figlio(InteroLungo)
Questa Tabella avrà una Doppia Referenza alla Tabella Anagrafica, in quanto sia PADRE che FIGLIO sono elementi della stessa Tabella Anagrafica.
Quindi se nella Tabella Anagrafica ho
1 Mario
2 Piero
3 Paola
4 Nicola
Nella Tabell [Gerarchie] potrei avere
Padre - Figlio
1 2
1 3
2 4
Otterrò pertanto che Mario è il Padre di Piero e Paola, e che Paola è Padre di Nicola...!
Questa struttura richiede l'uso di Fuunzioni RICORSIVE per l'estrazione dei dati, cosa che con Serve SQL risulta molto più performante, con Access la cosa è insulsa... ma funziona molto bene.
Questa è la TEORIA di come si devono gestire Dati gerarchici, non ci sono altre opzioni.