Fachkonzept - Selbstreferenz

Ein "Baum" von Flüssen

Rheinausschnitt

Der Verlauf von Flüssen lässt sich sehr gut in der Form eines "Baumes" aufzeichnen:

Struktur der Flüsse als Baum

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 Fluss) auf ein anderes Objekt der gleichen Art (einen anderen Fluss).

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 fluss-Tabelle erreicht werden:

Fluss-Tabelle mit Selbstreferenz

ZielFNR ist dabei ein Fremdschlüssel, der sich auf das Attribut FNR 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 Geo-Datenbank kann als Beispiel dienen:

Ein Land hat in der Regel mehrere Nachbarländer. Soll diese Tatsache in der Datenbank gespeichert werden, reicht eine "einfache" Selbstreferenz nicht mehr aus (zur Erinnerung: Listen sind in atomaren Attributen nicht erlaubt):

Nicht erlaubte Abbildung des Nachbarlandes 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 verweisen - also quasi eine Beziehungstabelle für die Selbstreferenz:

Struktur     Beziehungstabelle für Selbstreferenz

Da die beiden Fremdschlüssel nicht gleich lauten können, wurden die Bezeichnungen LNR1 und LNR2 gewählt, die sich beide auf das Attribut land.LNR beziehen.

Quellen

Kartenausschnitt: http://www.openstreetmap.org/ - Lizenz: CreativeCommons

X

Fehler melden

X

Suche