Den Nested Set Model er i dag ikke almindeligt brugt i databaser, da den er mere kompleks end Adiacency List Model, givet det faktum, at den kræver håndtering af to "pointere" i stedet for en enkelt. Faktisk er den indlejrede sætmodel blevet introduceret i databaser, da det var komplekst eller umuligt at lave rekursive forespørgsler, der krydsede et hierarki.
Fra 1999 inkluderer standard-SQL de såkaldte Rekursive Common Table Expressions eller Rekursive CTE, som gør det nemmere (og standardiseret!) at lave forespørgsler, der krydser rekursiv sti i et hierarki med enhver antal niveauer.
Alle de store DBMS-systemer har nu inkluderet denne funktion, med en særlig undtagelse:MySQL. Men i MySQL kan du overvinde dette problem ved at bruge lagrede procedurer. Se for eksempel dette indlæg på StackOverflow , eller dette indlæg på dba.stackexchange .
Så sammenfattende er disse mine råd:
- Hvis du stadig kan bestemme, hvilken DBMS der skal bruges, så overvej kraftigt nogle alternativer:hvis du for eksempel vil holde dig til en open source-database, skal du bruge PostgreSQL , brug Adiacency List Model, og gå med rekursive CTE'er til dine forespørgsler.
- Hvis du ikke kan ændre DBMS'et, bør du stadig bruge Adiacency List Model og bruge lagrede procedurer som dem, der er citeret i referencerne.
OPDATERING
Denne situation ændrer sig med MySQL 8, som i øjeblikket er under udvikling, og som vil integrere rekursive CTE'er , så Adiacency List Model fra den version vil være mere enkel at bruge.