sql >> Database >  >> RDS >> Mysql

complexe SQL-boomrijen

Er zijn verschillende alternatieven om hiërarchische informatie gemakkelijker te maken om mee te werken in SQL:

  • Algemene tabeluitdrukkingen (volgens de SQL-2003-standaard) ondersteuning voor recursieve SQL-query's tegen het bovenliggende id-type gegevens dat u gebruikt. Tot nu toe ondersteunt MySQL deze functie niet. PostgreSQL 8.4, Microsoft SQL Server en IBM DB2 zijn voorbeelden van RDBMS-merken die CTE-syntaxis ondersteunen. Oracle heeft ook een eigen extensie voor de SQL-syntaxis die recursieve zoekopdrachten ondersteunt.

  • Geneste sets (de links/rechts-oplossing die @phantombrain noemt) is een oplossing die wordt beschreven in Joe Celko's boek "Trees and Hierarchies in SQL for Smarties" en ook in talloze artikelen en blogposts op internet.

  • Padtelling (ook bekend als Materialized Path) slaat een tekenreeks op in elke rij in de hiërarchie om het pad van de voorouders van die rij te noteren. Combineer dit met LIKE query's om de padtekenreeks te vergelijken met de paden van de voorouders en de paden van afstammelingen.

  • Sluitingstabel (ook bekend als Transitive Closure Relation) gebruikt een tweede tabel om alle voorouder-afstammelingsrelaties op te slaan, niet alleen de directe ouder zoals in het ontwerp dat u gebruikt. Veel soorten zoekopdrachten worden eenvoudiger zodra u alle paden hebt opgeslagen.

  • Hybride oplossingen bestaan ​​ook. Sla bijvoorbeeld de directe bovenliggende id op terwijl u aan het doen bent, maar ook de hoofdmap van de boom. Nu kunt u alle andere rijen in dezelfde hiërarchie krijgen, ze in de toepassingscode ophalen en de boom sorteren met conventionele gegevensstructuren.



  1. Berekeningen doen in MySQL versus PHP

  2. Wat doet DELIMITER // in een trigger?

  3. sql-query om unieke records te extraheren

  4. mysql-tabel vergrendeld nadat php crasht