Het geneste set-model wordt tegenwoordig niet vaak gebruikt in databases, omdat het complexer is dan het adiacency-lijstmodel, gezien het feit dat er twee "pointers" moeten worden beheerd in plaats van één. Eigenlijk is het geneste setmodel geïntroduceerd in databases toen het complex of onmogelijk was om recursieve query's uit te voeren die een hiërarchie doorkruisten.
Vanaf 1999 omvat standaard SQL de zogenaamde Recursive Common Table Expressions, of Recursive CTE, die het eenvoudiger (en gestandaardiseerd!) maken om queries te maken die een recursief pad binnen een hiërarchie doorlopen met elke aantal niveaus.
Alle grote DBMS-systemen hebben deze functie nu ingebouwd, met een opvallende uitzondering:MySQL. Maar in MySQL kunt u dit probleem oplossen met behulp van opgeslagen procedures. Zie bijvoorbeeld dit bericht op StackOverflow , of dit bericht op dba.stackexchange .
Samengevat zijn dit mijn adviezen:
- Als je nog steeds kunt beslissen welk DBMS je gebruikt, overweeg dan een aantal alternatieven:als je bijvoorbeeld bij een open source-database wilt blijven, gebruik dan PostgreSQL , gebruik het Adiacency List-model en gebruik recursieve CTE's voor uw vragen.
- Als u het DBMS niet kunt wijzigen, moet u toch voor het Adiacency List-model gaan en opgeslagen procedures gebruiken zoals die in de referenties worden genoemd.
UPDATE
Deze situatie verandert met MySQL 8, dat momenteel in ontwikkeling is en dat zal recursieve CTE's integreren , zodat vanaf die versie het Adiacency List-model eenvoudiger te gebruiken is.