Benutzer mit den meisten Antworten
FOREIGN KEYs mit ON DELETE CASCADE bringt Fehler 'Tabelle kann Schleifen oder mehrere Kaskadepfade verursachen'

Frage
-
Hallo
ich habe folgende Tabellen mit Feldern
tbAuftrag id_AU
tbPosition id_PO, id_AU
tbDocument id_DO, id_AU, id_PO
Aufträge und Positionen sollen jeweils mehrere Dokumente haben können. Daher habe ich die die 2 FOREIGN KEYs mit ON DELETE CASCADE gesetzt:
FOREIGN KEY = tbAuftrag.id_AU REFERENCES = tbDocument.id_AU
FOREIGN KEY = tbAuftrag.id_PO REFERENCES = tbDocument.id_PO
Das funzt. Für alle Dokument von AU sind die id_PO=Null und für alle Positionsdokumente ist id_AU=Null.
Jetzt sollen aber natürlich auch die Positionen eines Auftrage gelöscht werden, wenn ein Auftrag geslöscht wird. Also setze ich noch den FK:
FOREIGN KEY = tbAuftrag.id_AU REFERENCES = tbPosition.id_AU
Aber dann kommt der Fehler 'Tabelle kann Schleifen oder mehrere Kaskadepfade verursachen'.
In MSAccess ging das problemlos und logisch gesehen ist das in meinem Augen auch richtig (und notwendig).
Wie kann man das Problem lösen?Vielen Dank
Grüße von Torsten
Antworten
-
Hallo
ich habe folgende Tabellen mit Feldern
tbAuftrag id_AU
tbPosition id_PO, id_AU
tbDocument id_DO, id_AU, id_PO
Aufträge und Positionen sollen jeweils mehrere Dokumente haben können. Daher habe ich die die 2 FOREIGN KEYs mit ON DELETE CASCADE gesetzt:
FOREIGN KEY = tbAuftrag.id_AU REFERENCES = tbDocument.id_AU
FOREIGN KEY = tbAuftrag.id_PO REFERENCES = tbDocument.id_PO
Das funzt. Für alle Dokument von AU sind die id_PO=Null und für alle Positionsdokumente ist id_AU=Null.
Jetzt sollen aber natürlich auch die Positionen eines Auftrage gelöscht werden, wenn ein Auftrag geslöscht wird. Also setze ich noch den FK:
FOREIGN KEY = tbAuftrag.id_AU REFERENCES = tbPosition.id_AU
Aber dann kommt der Fehler 'Tabelle kann Schleifen oder mehrere Kaskadepfade verursachen'.
In MSAccess ging das problemlos und logisch gesehen ist das in meinem Augen auch richtig (und notwendig).
Wie kann man das Problem lösen?Vielen Dank
Grüße von Torsten
Hallo Torsten,
diese Problematik löst man am besten innerhalb seiner "Delete-Prozedur". Dort kann man hinterlegen, was in welcher Reihenfolge alles gelöscht werden soll.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com- Als Antwort vorgeschlagen Ionut DumaModerator Donnerstag, 20. März 2014 16:08
- Als Antwort markiert Ionut DumaModerator Montag, 24. März 2014 10:31
Alle Antworten
-
Hallo
ich habe folgende Tabellen mit Feldern
tbAuftrag id_AU
tbPosition id_PO, id_AU
tbDocument id_DO, id_AU, id_PO
Aufträge und Positionen sollen jeweils mehrere Dokumente haben können. Daher habe ich die die 2 FOREIGN KEYs mit ON DELETE CASCADE gesetzt:
FOREIGN KEY = tbAuftrag.id_AU REFERENCES = tbDocument.id_AU
FOREIGN KEY = tbAuftrag.id_PO REFERENCES = tbDocument.id_PO
Das funzt. Für alle Dokument von AU sind die id_PO=Null und für alle Positionsdokumente ist id_AU=Null.
Jetzt sollen aber natürlich auch die Positionen eines Auftrage gelöscht werden, wenn ein Auftrag geslöscht wird. Also setze ich noch den FK:
FOREIGN KEY = tbAuftrag.id_AU REFERENCES = tbPosition.id_AU
Aber dann kommt der Fehler 'Tabelle kann Schleifen oder mehrere Kaskadepfade verursachen'.
In MSAccess ging das problemlos und logisch gesehen ist das in meinem Augen auch richtig (und notwendig).
Wie kann man das Problem lösen?Vielen Dank
Grüße von Torsten
Hallo Torsten,
diese Problematik löst man am besten innerhalb seiner "Delete-Prozedur". Dort kann man hinterlegen, was in welcher Reihenfolge alles gelöscht werden soll.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com- Als Antwort vorgeschlagen Ionut DumaModerator Donnerstag, 20. März 2014 16:08
- Als Antwort markiert Ionut DumaModerator Montag, 24. März 2014 10:31
-
Hallo Torsten,
Hat Dir die Antwort von Andreas weitergeholfen?
Gruss,
Ionut
Ionut Duma, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.