Warum können wir nicht mehrere Kaskadenpfade haben?


8

Sie können sehen, dass viele Fragen zu mehreren Kaskadenpfaden gestellt wurden . Zum Beispiel:

/programming/851625/foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths

/programming/6065501/multiple-cascade-delete-path-in-many-many-relationship-ef-4-1

/programming/27613117/introducing-foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths-s

Nach meinem Verständnis ist es jedoch völlig in Ordnung, dass Sie einen untergeordneten Datensatz für viele und nicht nur für eine Bedingung für das Löschen der zugehörigen Stammsätze löschen möchten .

Während in einer Frage gesagt wird, dass SQL Server versucht, sicher zu sein, indem dies verhindert wird, verstehe ich wirklich nicht, was schief gehen könnte, wenn wir mehrere Kaskadenpfade haben, und welche Probleme es verhindert, um es sicher zu machen ?

Ich hoffe, jemand kann mir das in einfachen Worten erklären, vorzugsweise anhand von Beispielen, was bei mehreren Kaskadenpfaden schief gehen könnte.

Antworten:


6

Diese Frage "Was kann schief gehen?" Kann nur von den Entwicklern von Microsoft oder Sybase beantwortet werden. Wenn es mehrere Kaskadenpfade zu demselben Datensatz gibt, versucht der Code möglicherweise mehrmals, ihn zu löschen. Wenn es nicht so konstruiert ist, dass es die Möglichkeit berücksichtigt, dass der zu löschende Datensatz bereits gelöscht wurde, wird möglicherweise ein Fehler ausgegeben. Anscheinend existiert dieses Problem tatsächlich (oder es wird angenommen, dass es existiert!). Anstatt es zu beheben, vermeidet die Implementierung es, indem sie die Definition doppelter Kaskadenpfade verhindert. Es ist eindeutig eine Abkürzung, da andere DBMS mit dieser Situation kein Problem haben.


2
Sie würden denken, dass sie nach 20 Jahren SQL Server dieses Problem beheben würden ...
Jeremy Holovacs
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.