Warum bekomme ich "mehrere Kaskadenpfade" mit dieser Tabellenbeziehung?


0

Ich habe die folgende Tabelle Beziehung in meiner Datenbank:

  Parent 
     / \ 
    Child1  Child2 
     \  /
     GrandChild 

Ich versuche, die FK-Beziehungen, so dass die Streichung der Elterntabelle Kaskaden sowohl Kind und dem Enkelkind Tabelle zu erstellen. Für ein bestimmtes Granchild wird es entweder an den einen oder anderen Kind-Tisch weitergegeben, aber nie gleichzeitig an beide.

Wenn ich versuche, ON DELETE CASCADE zu den FK-Beziehungen hinzuzufügen, ist alles in Ordnung, sie zu einer "Seite" der beiden Kinder hinzuzufügen (Parent-Child1-GrandChild ist in Ordnung für Cascade Delete). Sobald ich aber das Cascade Delete auf der Child2-Seite der Beziehung hinzufüge, sagt mir SQL, dass der FK mehrere Kaskadenpfade verursachen würde. Ich hatte den Eindruck, dass mehrere Kaskadenpfade nur dann gelten, wenn mehr als ein FK die SAME-Tabelle angibt. Warum sollte ich in diesem Fall den Fehler mit mehreren Kaskadenpfaden erhalten?

PS Die Tabellenbeziehungen zu diesem Zeitpunkt wäre sehr schwierig zu ändern, so einfach zu sagen, meine Tabellenstruktur zu ändern, wird nicht hilfreich sein, danke.

4

Die Nachricht bedeutet, dass beim Löschen eines übergeordneten Datensatzes zwei Pfade zu allen löschbaren GrandChild-Datensätzen führen.

Fix: Entfernen Sie die ON DELETE CASCADE-Optionen in den FKs und erstellen Sie INSTEAD OF DELETE-Trigger für die ChildX-Tabellen, Löschen aller Enkel Datensätze und dann die ChildX-Datensätze selbst.