Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Modelo de lista de adjacência vs modelo de conjunto aninhado para dados hierárquicos do MySQL?


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:
  1. 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.
  2. 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.