Eine typische Situation mit mehreren Kaskadenpfaden ist folgende: Eine Mastertabelle mit zwei Details, beispielsweise "Master" und "Detail1" und "Detail2". Beide Details werden kaskadiert gelöscht. Bisher keine Probleme. Was aber, wenn beide Details eine Eins-zu-Viele-Beziehung zu einer anderen Tabelle haben (sagen Sie "SomeOtherTable")? SomeOtherTable hat eine Detail1ID-Spalte UND eine Detail2ID-Spalte.
Master { ID, masterfields }
Detail1 { ID, MasterID, detail1fields }
Detail2 { ID, MasterID, detail2fields }
SomeOtherTable {ID, Detail1ID, Detail2ID, someothertablefields }
Mit anderen Worten: Einige der Datensätze in SomeOtherTable sind mit Detail1-Datensätzen verknüpft, und einige der Datensätze in SomeOtherTable sind mit Detail2-Datensätzen verknüpft. Selbst wenn garantiert ist, dass SomeOtherTable-Datensätze niemals zu beiden Details gehören, ist es jetzt unmöglich, die Datensätze von SomeOhterTable für beide Details zu kaskadieren, da es mehrere Kaskadenpfade von Master zu SomeOtherTable gibt (einen über Detail1 und einen über Detail2). Jetzt haben Sie das vielleicht schon verstanden. Hier ist eine mögliche Lösung:
Master { ID, masterfields }
DetailMain { ID, MasterID }
Detail1 { DetailMainID, detail1fields }
Detail2 { DetailMainID, detail2fields }
SomeOtherTable {ID, DetailMainID, someothertablefields }
Alle ID-Felder sind Schlüsselfelder und werden automatisch erhöht. Der Kern liegt in den DetailMainId-Feldern der Detailtabellen. Diese Felder sind sowohl Schlüssel- als auch Referenzkontraint. Es ist jetzt möglich, alles kaskadiert zu löschen, indem nur Stammsätze gelöscht werden. Der Nachteil ist, dass für jeden Detail1-Datensatz UND für jeden Detail2-Datensatz auch ein DetailMain-Datensatz vorhanden sein muss (der tatsächlich zuerst erstellt wird, um die richtige und eindeutige ID zu erhalten).