Mysql
 sql >> Datenbank >  >> RDS >> Mysql

komplexe sql-baumreihen

Es gibt mehrere Alternativen, um die Arbeit mit hierarchischen Informationen in SQL zu vereinfachen:

  • Häufige Tabellenausdrücke (gemäß dem SQL-2003-Standard) unterstützen rekursive SQL-Abfragen für den von Ihnen verwendeten Datentyp mit der übergeordneten ID. Bisher unterstützt MySQL diese Funktion nicht. PostgreSQL 8.4, Microsoft SQL Server und IBM DB2 sind Beispiele für RDBMS-Marken, die die CTE-Syntax unterstützen. Oracle hat auch eine proprietäre Erweiterung der SQL-Syntax, die rekursive Abfragen unterstützt.

  • Verschachtelte Sätze (die Links/Rechts-Lösung, die @phantombrain erwähnt) ist eine Lösung, die in Joe Celkos Buch „Trees and Hierarchies in SQL for Smarties“ und auch in zahlreichen Artikeln und Blog-Einträgen im Internet beschrieben wird.

  • Pfadaufzählung (auch bekannt als Materialized Path) speichert eine Zeichenfolge in jeder Zeile in der Hierarchie, um den Pfad der Vorfahren dieser Zeile zu notieren. Kombinieren Sie dies mit LIKE Abfragen, um den Pfad-String mit den Pfaden seiner Vorfahren und den Pfaden seiner Nachkommen zu vergleichen.

  • Abschlusstabelle (auch bekannt als Transitive Closure Relation) verwendet eine zweite Tabelle, um alle Vorfahren-Nachkommen-Beziehungen zu speichern, nicht nur die unmittelbaren Eltern, wie in dem von Ihnen verwendeten Design. Viele Arten von Abfragen werden einfacher, wenn Sie alle Pfade gespeichert haben.

  • Hybridlösungen gibt es auch. Speichern Sie beispielsweise die unmittelbar übergeordnete ID, während Sie dies tun, aber auch die Wurzel des Baums. Jetzt können Sie alle anderen Zeilen in derselben Hierarchie abrufen, sie in den Anwendungscode holen und den Baum mit herkömmlichen Datenstrukturen sortieren.