Ci sono più opzioni oltre alle due che hai menzionato. Ci sono:
- Lista di adiacenza (quella "parent_id" usata quasi da tutti)
- Set nidificati
- Enumerazione dei percorsi
- Tabella di chiusura (aka Relazione di adiacenza)
Vedi la mia risposta a "Qual è il modo più efficiente/elegante per analizzare un tavolo piatto in un albero? "
O un paio di libri:
- "Alberi e gerarchie in SQL per Smarties " di Joe Celko.
- "Modelli di progettazione SQL " di Vadim Tropashko.