sql >> Database teknologi >  >> RDS >> Mysql

Adjacency List Model vs Nested Set Model for MySQL hierarkiske data?

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:

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




  1. Xampp MySQL starter ikke - Forsøger at starte MySQL-tjenesten...

  2. Tilføj en genereret kolonne til en tabel i SQLite

  3. Hvis betinget i SQL Script til Mysql

  4. Hvordan laver jeg databaseafstemning i realtid i MySQL/PHP?