sql >> Database >  >> RDS >> Mysql

Aangrenzend lijstmodel versus genest setmodel voor hiërarchische MySQL-gegevens?

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:

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




  1. Een kolom hernoemen in SQL

  2. Stap voor stap upgradeproces naar R12.2 Upgrade deel -3

  3. convert_tz retourneert null

  4. Kan ik een stream gebruiken om een ​​rij in SQL Server (C#) IN te VOEREN of BIJWERKEN?