O Modelo de Conjuntos Aninhados hoje em dia não é muito utilizado em bancos de dados, pois é mais complexo que o Modelo de Listas de Adiacency, pois requer o gerenciamento de dois “ponteiros” ao invés de um único. Na verdade, o Modelo de Conjunto Aninhado foi introduzido em bancos de dados quando era complexo ou impossível fazer consultas recursivas que percorriam uma hierarquia.
A partir de 1999, o SQL padrão inclui as chamadas Expressões de Tabela Comum Recursiva, ou CTE Recursive, o que torna mais simples (e padronizado!) número de níveis.
Todos os principais sistemas DBMS agora incluem esse recurso, com uma exceção notável:MySQL. Mas no MySQL você pode superar esse problema com o uso de procedimentos armazenados. Veja, por exemplo, esta postagem no StackOverflow , ou este post em dba.stackexchange .
Então, em resumo, estes são os meus conselhos:
- Se você ainda pode decidir qual DBMS usar, considere fortemente algumas alternativas:por exemplo, se você quiser ficar com um banco de dados de código aberto, use PostgreSQL , use o modelo de lista de adiacency e use CTEs recursivos para suas consultas.
- Se não for possível alterar o SGBD, ainda assim deve-se seguir o Modelo de Lista de Adiacency, e usar stored procedures como as citadas nas referências.
ATUALIZAÇÃO
Esta situação está mudando com o MySQL 8, que está atualmente em desenvolvimento e que irá integrar CTEs recursivos , para que a partir dessa versão o Modelo de Lista de Adiacency seja mais simples de usar.