Normalmente, recomendo um design chamado Tabela de fechamento .
Veja o exemplo na minha resposta para Qual é a maneira mais eficiente/elegante de analisar uma tabela plana em uma árvore?
Também criei esta apresentação:Modelos para dados hierárquicos com SQL e PHP . Desenvolvi um aplicativo PHP que renderiza uma árvore em 0,3 segundos, a partir de uma coleção de dados hierárquicos com 490k nodes.
Eu escrevi sobre o Closure Table aqui:Rendering Trees with Closure Tabela .
Escrevi um capítulo sobre diferentes estratégias para dados hierárquicos em meu livro, SQL Antipatterns:Avoiding the Armadilhas da programação de banco de dados .