Fachkonzept - Selbstreferenz

Das schrittweise Werben von neuen Benutzern lässt sich wie gezeigt als Hierarchie wie ein Baum aufzeichnen. Diese Bäume werden in der Informatik oft "umgedreht" - die Wurzel also oben; dadurch ist das Zeichnen einfacher.

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

Eine solche Baumstruktur kommt recht häufig in der Informatik vor. Denke z.B. an die Struktur der Verzeichnisse auf deinem Computer.

Dabei verweist ein Objekt (ein Benutzer) auf ein anderes Objekt der gleichen Art (einen anderen Benutzer).

Selbstreferenz

Die einfachste Methode, solche Bezüge in der Datenbank zu speichern, ist ein Verweis der Tabelle auf sich selbst.

Gibt es Beziehungen von Objekten gleicher Art untereinander (also innerhalb einer Datenbanktabelle), so kann ein Fremdschlüssel genutzt werden, der sich auf den Primärschlüssel der eigenen Tabelle bezieht. Auf diese Art können alle Arten von Beziehungen gespeichert werden, bei denen ein Objekt auf maximal ein Eltern-Objekt verweist.

Die Struktur von oben kann damit mit folgender Erweiterung der benutzer-Tabelle erreicht werden. WerberPNR ist dabei ein Fremdschlüssel, der sich auf das Attribut PNR in der gleichen Tabelle bezieht.

Benutzer-Tabelle mit Selbstreferenz in Form eines Attributs WerberPNR
  • Ausgangssituation.
  • Erste Stufe.
  • Zweite Stufe links.
  • Zweite Stufe rechts.
  • Alles.

KlickenKlicke auf die einzelnen Schritte zur Veranschaulichung.

Selbstreferenz als Beziehungstabelle

Ähnlich wie bei "normalen" Beziehungen ergeben sich Probleme, wenn einem Objekt nicht nur ein Eltern-Objekt zugeordnet werden kann. Eine Erweiterung aus unserer gbuch-Datenbank kann als Beispiel dienen:

Schemadarstellung von Freundschaftsbeziehungen, bei denen die Benutzer beliebig untereinander Beziehungen aufbauen können. Ein zentrales Element eines sozialen Netzwerks sind die Freundschaftsbeziehungen: Ein Benutzer pflegt (gegenseitige) Freundschaften zu mehreren anderen Benutzern. Soll dies in der Datenbank gespeichert werden, reicht eine "einfache" Selbstreferenz nicht mehr aus (zur Erinnerung: Listen sind in atomaren Attributen nicht erlaubt):

Nicht erlaubte Abbildung der Freundschaftsbeziehung als Liste

Als Lösung bietet sich wieder eine zusätzliche Beziehungstabelle an, die nun zwei Fremdschlüssel besitzt, die beide auf die gleiche Tabelle benutzer verweisen - also quasi eine Beziehungstabelle für die Selbstreferenz:

Struktur     Separate Beziehungstabelle freund für die Speicherung der Selbstreferenz. Attribute PNR1 und PNR2.

Da die beiden Fremdschlüssel nicht gleich lauten können, wurden die Bezeichnungen PNR1 und PNR2 gewählt, die sich beide auf das Attribut benutzer.PNR beziehen.

Beachte, dass es für jede Beziehung nur eine Zeile in der Tabelle gibt - PNR1 und PNR2 sind also "gleichberechtigt".

Quellen

X

Fehler melden

X

Suche