Guten Abend,
ich habe hier beispielhaft folgende Tabellen:
Quelltext
1: 2: 3: 4:
| Music ([u]ID[/u], Name, InterpretID, AlbumID) Interpret ([u]ID[/u], Name, CoverID) Album ([u]ID[/u], Name, CoverID) Picture ([u]ID[/u], Name) |
Hier die Beziehungen:
Quelltext
1: 2: 3: 4:
| Music.InterpretID -> Interpret.ID Music.AlbumID -> Album.ID Interpret.CoverID -> Picture.ID Album.CoverID -> Picture.ID |
Die Fremdschlüsseleinschränkung habe ich immer wie folgt gewählt:
Quelltext
1: 2:
| ON UPDATE -> CASCADE ON DELETE -> SET NULL |
Das gibt dann aber immer folgenden Fehler:
Zitat: |
Die referenzielle Beziehung führt zu einem nicht zulässigen zyklischem Verweis. |
Was das heißt, weiß ich, oder ich glaube zu wissen, was das heißt, daher erkläre ich erst einmal, was ich unter der Fremdschlüsseleinschränkung verstehe und warum ich die so gewählt habe, wie es oben steht, denn ich glaube, hier liegt bei mir ein Verständnisproblem vor.
ON DELETE:
Gibt an, was geschehen soll, wenn die Zeile gelöscht wird, deren Primärschlüssel in einer anderen Tabelle als Fremdschlüssel enthalten ist.
Wenn ich hier SET NULL setze, dann wird beispielsweise die Spalte Interpret.CoverID auf NULL gesetzt, wenn die entsprechende Zeile der Tabelle Picture gelöscht wird.
ON UPDATE:
Gibt an, was geschehen soll, wenn die Zeile geändert wird, deren Primärschlüssel in einer anderen Tabelle als Fremdschlüssel enthalten ist.
Wenn ich hier CASCADE setze, dann werden alle Änderungen, die beispielsweise in einer Zeile der Tabelle Interpret vor genommen wurden, auch auf alle Zeilen der Tabelle Music übernommen, welche die ID der geänderten Zeile der Tabelle Interpret als Fremdschlüssel in InterpretID enthalten.
Wenn ich nun also ein z.B. Bild lösche, dann werden alle Fremdschlüsselspalten in Interpret, Album und Music, die auf dieses Bild verweisen auf NULL gesetzt. Wenn die so geänderten Spalten nun wieder mittels 1:n Beziehung in einer weiteren Datenzeile "enthalten" sind (Interpret sowie Album in Music), dann wird das dort ebenfalls übernommen.
Aber wo gib es hier einen nicht zulässigen zyklischen Verweis, oder habe ich die Fremdschlüsseleinschränkungen falsch verstanden?
Ich hoffe auf gute Hilfe, auch wenn das Thema ja noch zu den Grundlagen gehört, aber ich finde irgendwie keine sonderlich gute Erklärung im Internet.
Gruß