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

Adjazenzlistenmodell vs. Nested-Set-Modell für hierarchische MySQL-Daten?

Das Nested-Set-Modell wird heutzutage in Datenbanken nicht mehr häufig verwendet, da es komplexer ist als das Adiacency-List-Modell, da es die Verwaltung von zwei „Zeigern“ anstelle von einem einzigen erfordert. Tatsächlich wurde das Nested-Set-Modell in Datenbanken eingeführt, als es komplex oder unmöglich war, rekursive Abfragen durchzuführen, die eine Hierarchie durchlaufen.

Ab 1999 enthält Standard-SQL die sogenannten Recursive Common Table Expressions oder Recursive CTE, die es einfacher (und standardisierter!) machen, Abfragen zu erstellen, die einen rekursiven Pfad innerhalb einer Hierarchie mit beliebig durchlaufen Anzahl der Ebenen.

Alle großen DBMS-Systeme haben diese Funktion jetzt integriert, mit einer bemerkenswerten Ausnahme:MySQL. Aber in MySQL können Sie dieses Problem durch die Verwendung von gespeicherten Prozeduren überwinden. Siehe zum Beispiel dieser Beitrag auf StackOverflow , oder dieser Beitrag auf dba.stackexchange .

Zusammenfassend sind dies also meine Ratschläge:

  1. Wenn Sie sich immer noch für ein DBMS entscheiden können, ziehen Sie einige Alternativen in Betracht:Wenn Sie beispielsweise bei einer Open-Source-Datenbank bleiben möchten, verwenden Sie PostgreSQL , verwenden Sie das Adiacency-Listenmodell und verwenden Sie rekursive CTEs für Ihre Abfragen.
  2. Wenn Sie das DBMS nicht ändern können, sollten Sie sich dennoch für das Adiacency-Listenmodell entscheiden und gespeicherte Prozeduren wie die in den Referenzen genannten verwenden.

AKTUALISIEREN

Diese Situation ändert sich mit MySQL 8, das sich derzeit in der Entwicklung befindet und integriert rekursive CTEs , sodass das Adiacency-Listenmodell ab dieser Version einfacher zu verwenden ist.