sql >> Databasteknik >  >> RDS >> Mysql

Adjacency List Model vs Nested Set Model för MySQL hierarkisk data?

Den kapslade uppsättningsmodellen används numera inte ofta i databaser, eftersom den är mer komplex än Adiacency List-modellen, med tanke på att den kräver att man hanterar två "pekare" istället för en enda. Egentligen har den kapslade uppsättningsmodellen introducerats i databaser när det var komplext eller omöjligt att göra rekursiva frågor som korsade en hierarki.

Från 1999 inkluderar standard SQL de så kallade Rekursiva Common Table Expressions, eller Rekursiv CTE, vilket gör det enklare (och standardiserat!) att göra frågor som korsar rekursiv väg inom en hierarki med alla antal nivåer.

Alla de stora DBMS-systemen har nu inkluderat denna funktion, med ett särskilt undantag:MySQL. Men i MySQL kan du övervinna detta problem med hjälp av lagrade procedurer. Se till exempel det här inlägget på StackOverflow , eller det här inlägget på dba.stackexchange .

Så sammanfattningsvis är det här mina råd:

  1. Om du fortfarande kan bestämma vilken DBMS som ska användas, överväg starkt några alternativ:om du till exempel vill hålla fast vid en databas med öppen källkod, använd PostgreSQL , använd Adiacency List Model och använd rekursiva CTE för dina frågor.
  2. Om du inte kan ändra DBMS, bör du ändå använda Adiacency List Model och använda lagrade procedurer som de som citeras i referenserna.

UPPDATERA

Denna situation förändras med MySQL 8, som för närvarande är under utveckling och som kommer att integrera rekursiva CTE:er , så att från den versionen blir Adiacency List Model enklare att använda.




  1. hur förhindrar man sql-injektion från denna fråga?

  2. SQL Server:Kolumner till rader

  3. SQL - Välj rader från två olika tabeller

  4. Laravel frågebyggare - återanvänd fråga med ändrad where-sats