
77282
14.09.2016
Eine auf sich selbst referenzierte Tabelle
Hallo, ist es üblich auf sich selbst referenzierte Tabellen zu verwenden?
Frage weil ich das jetzt das erste mal gesehen habe und mich frage was den der Sinn davon sein soll.
Vielleicht kann mir ja Diesen einer etwas näher bringen.
Grüße
Frage weil ich das jetzt das erste mal gesehen habe und mich frage was den der Sinn davon sein soll.
Vielleicht kann mir ja Diesen einer etwas näher bringen.
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 315227
Url: https://administrator.de/forum/eine-auf-sich-selbst-referenzierte-tabelle-315227.html
Ausgedruckt am: 12.05.2025 um 13:05 Uhr
7 Kommentare
Neuester Kommentar
Sowas wird zum Beispiel für verkettete Listen verwendet bzw. um Entscheidungsbäume in einer "flachen" SQL Tabelle abzulegen.
Bei Entscheidungsbäumen gibt es eine variable Anzahl von Parent-Child Paaren, und vereinzelt findet man sowas auch in älteren ERP Programmen oder Addreßverwaltungen wo Addreßeinträge entweder quer untereinander referenziert sind oder über eine variable Anzahl von Gruppen und Gattungen sortiert sind.
Sobald so ein Tool es mal auf eine nennenswerte Verbreitung bringt sinken auch die Chancen, daß der Hersteller da nachträglich noch mal was dran ändert... die Abfrage solcher Tabellen ist "teuer", da man in der Regel vom letzten Child zum ersten Parent muß und diese Abfragen dann (meist) programmatisch generiert werden.
Bei Entscheidungsbäumen gibt es eine variable Anzahl von Parent-Child Paaren, und vereinzelt findet man sowas auch in älteren ERP Programmen oder Addreßverwaltungen wo Addreßeinträge entweder quer untereinander referenziert sind oder über eine variable Anzahl von Gruppen und Gattungen sortiert sind.
Sobald so ein Tool es mal auf eine nennenswerte Verbreitung bringt sinken auch die Chancen, daß der Hersteller da nachträglich noch mal was dran ändert... die Abfrage solcher Tabellen ist "teuer", da man in der Regel vom letzten Child zum ersten Parent muß und diese Abfragen dann (meist) programmatisch generiert werden.
Moin blade999,
ich kann nur noch wenig zu den anderen Kommentaren ergänzen.
Im logischen Datenmodell existiert es öfter als tatsächlich als im physikalischen Datenmodell.
Nicht alle Datenbanksystem lassen eine Selbstreferenz als Constraint zu (also Foreignkey auf andere Tabelle ja, aber nicht auf die Tabelle, die dieses Constraint beinhaltet).
Außerdem ist diese Selbstreferenz ja auch (im logischen Modell) schon nicht so ganz eindeutig.
Bei so einem Standard-Fall einer Tabelle mit Selbstreferenz und den Feldern
-> hier ist für jeden Mitarbeiter auch ein Verweis auf die VorgesetztenID vorhanden
-> die VorgesetztenID MUSS wiederum auch eine MitarbeiterID sein oder muss NULL bleiben
( das wäre ja die ganze Selbstreferenz-Regel)
Soweit logisch noch nachvollziehbar, auch die Erzeugung einer Hierarchie mit SQL-Mitteln aus den "flachen" Tabellendaten ist noch machbar.
Aber die üblichen Änderungen in dieser Tabelle, die meinetwegen die übliche Personalfluktuation in einer Firma abbilden soll, werden damit nicht richtig einfacher.
-> da führt dann zum diese Selbstreferenz schnell zu Komplikationen, die sich nur mit Programmieraufwand oder gar mit Nachdenken lösen lassen.
Eine einfache Regel "jeder Mitarbeiter muss genau einen Vorgesetzten haben, der auch Mitarbeiter der Firma ist oder eben keinen Vorgesetzten" ist zwar gut und richtig, aber hilft wenig bei den normalen Prozessen wie "Abteilungsleiter X, bisher Chef von Team 32, übernimmt jetzt einen anderen Bereich, ein Nachfolger für ihn wird gesucht".
Ende der Fahnenstange ist spätestens dann, wenn aus den Hierarchie-Bäumen "Netzpläne" Werden (ein Mitarbeiter hat mehrere Cheffes/arbeitet in mehreren Abteilungen). Ist nicht mehr trivial abzubilden.
Grüße
Biber
[Edit wegen neuem TO-Kommentar]
Wenn mit SQL-Mitteln aus einer flachen Tabelle ein Baum/eine Hierarchie abgeleitet werden soll-> das kostet.
Bau doch mal gedanklich aus einer Exceltabelle mit den Mitarbeitern dieser Firma die komplette Hierarchie auf.
Bei 2 Mitarbeitern lösbar, bei 70000 Mitarbeitern in 9 Hierarchie-Ebenen u.U. aufwändiger aufzudröseln.
Unter Umständen wäre eine Abbildung im der Datenbank mit mehreren Tabellen( eine Mitarbeitertabelle, eine Vorgesetztentabelle) weniger komplex als die selbstreferenzierende Mitarbeitertabelle.
[/Edit]
ich kann nur noch wenig zu den anderen Kommentaren ergänzen.
Zitat von @77282:
Frage weil ich das jetzt das erste mal gesehen habe und mich frage was den der Sinn davon sein soll.
Vielleicht kann mir ja Diesen einer etwas näher bringen.
Die genannten Beispiele passen schon - bei (auch mehrstufigen) Hierarchien wie Mitarbeiter->Chef->Chefcheffe->Obercheffe oder Organisationsstrukturen etc ist es "logisch gesehen" genau diese Selbstreferenz.Frage weil ich das jetzt das erste mal gesehen habe und mich frage was den der Sinn davon sein soll.
Vielleicht kann mir ja Diesen einer etwas näher bringen.
Hallo, ist es üblich auf sich selbst referenzierte Tabellen zu verwenden?
Na ja, bei der Verwendung einer selbstreferenzierenden Tabelle wäre ich zögerlicher.Im logischen Datenmodell existiert es öfter als tatsächlich als im physikalischen Datenmodell.
Nicht alle Datenbanksystem lassen eine Selbstreferenz als Constraint zu (also Foreignkey auf andere Tabelle ja, aber nicht auf die Tabelle, die dieses Constraint beinhaltet).
Außerdem ist diese Selbstreferenz ja auch (im logischen Modell) schon nicht so ganz eindeutig.
Bei so einem Standard-Fall einer Tabelle mit Selbstreferenz und den Feldern
- MitarbeiterID
- (Mitarbeiterdaten)
- VorgesetztenID (muss, wenn angegeben, eine MitarbeiterID in dieser Tabelle sein)
-> hier ist für jeden Mitarbeiter auch ein Verweis auf die VorgesetztenID vorhanden
-> die VorgesetztenID MUSS wiederum auch eine MitarbeiterID sein oder muss NULL bleiben
( das wäre ja die ganze Selbstreferenz-Regel)
Soweit logisch noch nachvollziehbar, auch die Erzeugung einer Hierarchie mit SQL-Mitteln aus den "flachen" Tabellendaten ist noch machbar.
Aber die üblichen Änderungen in dieser Tabelle, die meinetwegen die übliche Personalfluktuation in einer Firma abbilden soll, werden damit nicht richtig einfacher.
-> da führt dann zum diese Selbstreferenz schnell zu Komplikationen, die sich nur mit Programmieraufwand oder gar mit Nachdenken lösen lassen.
Eine einfache Regel "jeder Mitarbeiter muss genau einen Vorgesetzten haben, der auch Mitarbeiter der Firma ist oder eben keinen Vorgesetzten" ist zwar gut und richtig, aber hilft wenig bei den normalen Prozessen wie "Abteilungsleiter X, bisher Chef von Team 32, übernimmt jetzt einen anderen Bereich, ein Nachfolger für ihn wird gesucht".
Ende der Fahnenstange ist spätestens dann, wenn aus den Hierarchie-Bäumen "Netzpläne" Werden (ein Mitarbeiter hat mehrere Cheffes/arbeitet in mehreren Abteilungen). Ist nicht mehr trivial abzubilden.
Grüße
Biber
[Edit wegen neuem TO-Kommentar]
Bedeutet das, dass Abfragen auf solche Tabellen langsamer sind als auf welche die über mehrere Tabellen referenziert sind?
Ja, natürlich. Aufwand steigt exponentiell, auch für die Datenbank-Engine.Wenn mit SQL-Mitteln aus einer flachen Tabelle ein Baum/eine Hierarchie abgeleitet werden soll-> das kostet.
Bau doch mal gedanklich aus einer Exceltabelle mit den Mitarbeitern dieser Firma die komplette Hierarchie auf.
Bei 2 Mitarbeitern lösbar, bei 70000 Mitarbeitern in 9 Hierarchie-Ebenen u.U. aufwändiger aufzudröseln.
Unter Umständen wäre eine Abbildung im der Datenbank mit mehreren Tabellen( eine Mitarbeitertabelle, eine Vorgesetztentabelle) weniger komplex als die selbstreferenzierende Mitarbeitertabelle.
[/Edit]
Unter Umständen wäre eine Abbildung im der Datenbank mit mehreren Tabellen( eine Mitarbeitertabelle, eine Vorgesetztentabelle) weniger komplex als die selbstreferenzierende Mitarbeitertabelle.
Oder einfach eine dritte Tabelle, welche die Verknüpfungen darstelltz.B.
MasterID, SlaveID
oder
ParentID, ChildID
E.