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.
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.
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:
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):
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:
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
-
[1]:
Hierarchie von Benutzern
- Urheber: TM
- Lizenz: Inf-Schule.de
unter Verwendung von:
- Verschiedene Icons - Urheber: knollbaco - Lizenz: Public Domain