Ho un ADT gerarchico che voglio memorizzare in un database.
I nodi hanno esattamente un elemento genitore che è anche un nodo. Più nodi possono avere lo stesso nodo genitore.
Il mio approccio attuale utilizza un elenco di adiacenze con una struttura di tabella simile alla seguente:
+----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------+----------------+
| node_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| node_name | varchar(255) | NO | | NULL | |
| parent_node_id | int(10) unsigned | YES | MUL | NULL | |
+----------------+------------------+------+-----+---------+----------------+
dove parent_node_id memorizza altri valori node_id e cascade su aggiornamento ed eliminazione.
Per visualizzare la gerarchia di un nodo, ho implementato un ciclo nel mio script che richiede il rispettivo parent_node_id, che può comportare da 5 a 10 query di database per un nodo. Questo mi è sembrato incredibilmente inefficiente, ma non riesco a capire come evitarlo. Dalla mia comprensione limitata del funzionamento interno dei database relazionali, ho dedotto che le stored procedure non sono necessariamente la strada da percorrere, dal momento che il problema sembra essere il mio approccio a come sto memorizzando il mio ADT. su come archiviare gli alberi nei database, ma non ho trovato nulla che rispondesse alle mie esigenze specifiche, che sono:
- L'integrità della gerarchia dei nodi è importante, che per me esclude la memorizzazione della gerarchia completa in una colonna (Enumerazione dei percorsi).
- Ogni volta che richiamo un nodo, dovrò anche richiedere la sua gerarchia completa.