i

Exkurs - Hierarchien speichern

Hierarchie von Benutzern, die geworben wurden. Baumartige Struktur, da ein Benutzer immer neue andere Benutzer wirbt.[1]

Es ist recht schwierig SQL-Anfragen zu schreiben, die die Hierarchie in mehreren Stufen durchlaufen sollen.

Beispiel

SQL Fenster öffnen Herr Winkelmann will wissen, welche Benutzer von seinen angeworbenen Benutzern eingeladen wurden (sozusagen die "Enkel" in der Werber-Hierarchie). Dies leistet der folgende SQL-Befehl (das Ergebnis siehst du rechts):

Ergebnis des SQL-Befehls mit den Datensätzen der Enkel

SELECT enkel.Name, enkel.Vorname
  FROM benutzer AS opa, benutzer AS kind, benutzer AS enkel
 WHERE opa.Name = 'Winkelmann' AND opa.Vorname = 'Paul'
   AND opa.PNR = kind.WerberPNR
   AND kind.PNR = enkel.WerberPNR

Wie kann man aber jetzt alle indirekt geworbenen Benutzer von Herrn Winkelmann finden? In einem SQL-Befehl ist dies nicht möglich (zumindest mit "Standard"-SQL). Eine neue Tabelle kann hier Abhilfe schaffen:

Schema einer Hierarchie-Tabelle mit den Attributen ElternPNR, KindPNR und Stufe Die hierarchie-Tabelle speichert alle Beziehungen eines Knotens (auch die indirekten) ab. Als zusätzliche Information wird die "Entfernung" vom Elternknoten abgelegt.

Hierarchietabelle - Veranschaulichung der einzelnen Stufen
  • Ausgangssituation.
  • Erste Stufe.
  • Zweite Stufe.
  • Dritte Stufe.

KlickenKlicke auf die einzelnen Schritte zur Veranschaulichung.

Vorteil der Struktur ist die Vereinfachung der Abfragen - Nachteil sind die redundant hinterlegten Informationen, was leicht zu Fehlern führen kann. Dieses Dilemma findest du häufig in Datenbanken:

Redundante (mehrfache) Speicherung der gleichen Informationen kann Anfragen erleichtern - dafür ist es möglich, unter Umständen inkonsistente (nicht passende) Daten zu speichern.

Ein Ausweg daraus stellt die automatische Änderung der Hierarchietabelle durch das Datenbanksystem dar, was mit dem Konzept der sog. Trigger möglich ist. Dies wird hier aber nicht weiter verfolgt.

Für Experten...

Vielleicht interessiert dich ja, wie die Hierarchietabelle erzeugt wurde. Die SQL-Befehle kannst du hier nachlesen: SQL-Befehle zum Erzeugen der Hierarchie-Tabelle

Quellen

Suche

v
3.2.6.4
inf-schule.de/datenbanksysteme/gbuch/selbstreferenz/exkurs_hierarchie
inf-schule.de/3.2.6.4
inf-schule.de/@/page/D0LJbf1SAz0rmtNJ

Rückmeldung geben