Lei parla il più comunemente implementato, che è adiacenza Lista: https://blogs.msdn.microsoft.com/mvpawardprogram/2012/06/25/hierarchies-convert-adjacency-list-to-nested-sets
Ci sono altri modelli come pure, tra percorso materializzato e set nidificati: http://communities.bmc.com/communities/docs/DOC-9902
Joe Celko ha scritto un libro su questo soggetto, che è un buon riferimento da una prospettiva SQL generale (è citato nel link all'articolo nidificato sopra).
Inoltre, Itzik Ben-Gann ha una buona panoramica delle opzioni più comuni nel suo libro "Inside Microsoft SQL Server 2005: query T-SQL".
Le cose principali da considerare quando si sceglie un modello sono:
1) frequenza di cambiamento della struttura - come spesso fa, la struttura stessa del cambiamento albero. Alcuni modelli forniscono migliori caratteristiche di aggiornamento della struttura. È tuttavia importante separare le modifiche alla struttura da altre modifiche dei dati. Ad esempio, potresti voler modellare l'organigramma aziendale. Alcune persone modelleranno questo come un elenco di adiacenza, utilizzando l'ID dipendente per collegare un dipendente al proprio supervisore. Questo è di solito un approccio non ottimale. Un approccio che spesso funziona meglio è quello di modellare la struttura organizzativa separata dai dipendenti stessi e mantenere il dipendente come un attributo della struttura. In questo modo, quando un dipendente lascia la società, la stessa struttura organizzativa non ha bisogno di essere modificata, solo l'associazione con il dipendente che ha lasciato.
2) L'albero è pesante come la scrittura o pesante, alcune strutture funzionano molto bene durante la lettura della struttura, ma comportano un sovraccarico aggiuntivo durante la scrittura sulla struttura.
3) Quali tipi di informazioni è necessario ottenere dalla struttura: alcune strutture eccellono nel fornire determinati tipi di informazioni sulla struttura. Gli esempi includono trovare un nodo e tutti i suoi figli, trovare un nodo e tutti i suoi genitori, trovare il conteggio dei nodi figli che soddisfano determinate condizioni, ecc.Devi sapere quali informazioni saranno necessarie dalla struttura per determinare la struttura che meglio si adatta alle tue esigenze.
Vedere: [Quali sono le opzioni per l'archiviazione dei dati gerarchici in un database relazionale?] (Http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in -a-relazionale-database) – cbare
SQL Server (dal 2008) offre il [tipo di dati hierarchyid] (https://msdn.microsoft.com/en-us/library/bb677290.aspx) – BornToCode