Nested Sets (deutsch: Ineinander geschachtelte Mengen) sind eine geniale Methode, um
Hierarchien und Bäume in einer Datenbank abzubilden und zu verwalten.
Vorteile:
- Es gibt keine Beschränkungen für die Verschachtlungstiefe.
- An jeder Stelle des Baumes können nach Belieben weitere Verschachtlungen vorgenommen werden.
- Unterschiedliche Verschachtlungstiefen sind möglich.
- Die Abfragen, welche Elemente zu einem übergeordneten Element gehören, sind sehr performant, da sie ohne jegliche Rekursion auskommen.
Und das ist der Trick:
- Pro Element des Baumes gibt es zwei zusätzliche, numerische Kennzeichen, den Links-Wert und den Rechts-Wert. Dadurch wird eine Art Mengen-Ausdehnung für jedes Element definiert.
- Alle Unterelemente dieses Elements befinden sich innerhalb dieser Ausdehnungsgrenzen.
Ein Beispiel:
- In Bild 1 ist die Verteilung von Geräten in einem Haus dargestellt. Dabei können die Geräte in der Eingangshalle stehen (Gerät A), in einem Raum (Geräte B bis G) oder in einem bestimmten Schrank (Geräte F und G), der sich wiederum in einem Raum befindet.
- Jedes Element des Baumes hat einen Links-Wert (blau) und einen Rechts-Wert (rot). Alle Unterelemente eines Elementes haben Links-Werte und Rechts-Werte, die innerhalb der Grenzen des übergeordneten Elementes liegen. Schrank X hat die Grenzen (15,20). Die darin enthaltenen Geräte F und G haben die Grenzen (16,17) und (18,19).
- Will man beispielsweise wissen, welche Geräte im Raum 2 stehen, ist die Abfrage also ganz einfach:
SELECT * FROM Tabelle_Geraete_Baum WHERE Links >12 AND Rechts <21 - Beim Einfügen, Löschen oder Verschieben eines Elementes müssen die Links-Werte und die Rechts-Werte im gesamten Baum angepasst werden.
Beispiel:
Füge ich in Raum 2 also ein weiteres Gerät hinzu, dann dehnt sich der Raum 2 aus. Sein Rechts-Wert muss um 2 vergrößert werden und ist jetzt 23. Auch das Haus, in dem sich der Raum befindet, muss sich ausdehnen. Der Rechtswert des Hauses ist nun 24. Das neue Gerät hat die Grenzen (21,22).
Siehe Bild 2
Weitere Infos findet Ihr übrigens hier: https://de.wikipedia.org/wiki/Nested_Sets
Kommentare: 0