Typowa sytuacja z wieloma ścieżkami kaskadowymi będzie wyglądać tak: tabela główna z dwoma szczegółami, powiedzmy „Główna” i „Szczegół1” i „Szczegół2”. Oba szczegóły są usuwane kaskadowo. Jak dotąd żadnych problemów. Ale co, jeśli oba szczegóły mają relację jeden do wielu z inną tabelą (powiedz „SomeOtherTable”). SomeOtherTable ma kolumnę Detail1ID i kolumnę Detail2ID.
Master { ID, masterfields }
Detail1 { ID, MasterID, detail1fields }
Detail2 { ID, MasterID, detail2fields }
SomeOtherTable {ID, Detail1ID, Detail2ID, someothertablefields }
Innymi słowy: niektóre rekordy w SomeOtherTable są połączone z rekordami Detail1, a niektóre rekordy w SomeOtherTable są połączone z rekordami Detail2. Nawet jeśli jest zagwarantowane, że rekordy SomeOtherTable nigdy nie należą do obu Details, niemożliwe jest teraz kaskadowe usuwanie rekordów SomeOhterTable dla obu szczegółów, ponieważ istnieje wiele ścieżek kaskadowych od Master do SomeOtherTable (jedna przez Detail1 i jedna przez Detail2). Być może już to zrozumiałeś. Oto możliwe rozwiązanie:
Master { ID, masterfields }
DetailMain { ID, MasterID }
Detail1 { DetailMainID, detail1fields }
Detail2 { DetailMainID, detail2fields }
SomeOtherTable {ID, DetailMainID, someothertablefields }
Wszystkie pola identyfikatora są polami kluczowymi i automatycznymi przyrostami. Sedno tkwi w polach DetailMainId tabel Detail. Pola te są zarówno kluczowym, jak i referencyjnym ograniczeniem. Teraz można kaskadowo usuwać wszystko, usuwając tylko rekordy główne. Wadą jest to, że dla każdego rekordu detail1 ORAZ dla każdego rekordu detail2 musi istnieć również rekord DetailMain (który w rzeczywistości jest tworzony jako pierwszy, aby uzyskać poprawny i unikalny identyfikator).