Bäume in MySQL
Geschrieben von Harald Lapp in Datenbanken um 01:30
Das Abbilden von Baumstrukturen in Datenbanken stellt oft eine grosse Herausforderung dar. Wenn die Datenbank nicht gerade über eine Funktion zum effizienten Auslesen von hierarchischen Strukturen bietet, wie z.b. Oracles SQL über CONNECT BY, hat man ein Problem: Wie kann man einen Ast inkl. seiner Kinder auslesen?
Es gibt einige suboptimale Ansätze wie das Speichern des Pfades als String in einer Tabellenspalte oder die Referenzierung über eine Parent ID, bei der man gezwungen ist applikationsseitig eine Funktion zu schreiben, die rekursiv alle Kinder eines Astes ausliest und dabei in jeder Ebene eine neue Abfrage an die Datenbank stellt.
Nested Sets sind da schon sehr viel effizienter - beim Auslesen einer Datenbank. Das Einfügen und Löschen bzw. Verschieben von Ästen ist jedoch mit erheblichem Aufwand verbunden, da oft eine Vielzahl an Datensätzen aktualisiert werden müssen.
Jan Kneschke, Entwickler bei MySQL AB, hat nun eine weitere Möglichkeit vorgestellt, die von einem neuen Feature von MySQL 5 gebrauch macht, den 'Stored Procedures'. 'Stored Procedures' in MySQL können rekursiv ausgeführt werden, sodass das Rekursive Auslesen einer Datenbanktabelle über die Referenzierung der Parent ID komplett datenbankseitig erfolgen kann.
Auf seiner Projektseite kann man eine Bibliothek herunterladen, die die wichtigsten Funktionen zum Arbeiten mit Bäumen bereitstellt. Benötigt wird eine aktuelle Version von MySQL 5 z.b. die aktuell als stabil geltende Version 5.0.16. Die Bibliothek steht unter MIT Lizenz und kann unter Einhaltung der Regeln somit auch kommerziell verwendet werden.




