Типовою ситуацією з кількома каскадними шляхами буде така: Основна таблиця з двома деталями, скажімо, "Master" і "Detail1" і "Detail2". Обидві деталі каскадно видаляють. Поки проблем немає. Але що робити, якщо обидві деталі мають відношення один до багатьох з якоюсь іншою таблицею (скажімо, "SomeOtherTable"). У SomeOtherTable є стовпець Detail1ID І стовпець Detail2ID.
Master { ID, masterfields }
Detail1 { ID, MasterID, detail1fields }
Detail2 { ID, MasterID, detail2fields }
SomeOtherTable {ID, Detail1ID, Detail2ID, someothertablefields }
Іншими словами: деякі записи в SomeOtherTable пов'язані з Detail1-записами, а деякі записи в SomeOtherTable пов'язані із записами Detail2. Навіть якщо гарантується, що записи SomeOtherTable ніколи не належать до обох деталей, тепер неможливо зробити записи SomeOhterTable каскадом видалення для обох деталей, оскільки є кілька каскадних шляхів від Master до SomeOtherTable (один через Detail1 і один через Detail2). Тепер ви, можливо, це вже зрозуміли. Ось можливе рішення:
Master { ID, masterfields }
DetailMain { ID, MasterID }
Detail1 { DetailMainID, detail1fields }
Detail2 { DetailMainID, detail2fields }
SomeOtherTable {ID, DetailMainID, someothertablefields }
Усі поля ідентифікатора - це ключі та автоматичне збільшення. Суть лежить у полях DetailMainId таблиць Detail. Ці поля є як ключовими, так і референтними контрагентами. Тепер можна каскадно видалити все, лише видаливши головні записи. Мінусом є те, що для кожного деталі1-запису ТА для кожного запису деталі2 також повинен бути запис DetailMain (який фактично створюється спочатку для отримання правильного та унікального ідентифікатора).