Типичная ситуация с несколькими каскадными путями будет такой: мастер-таблица с двумя деталями, скажем, «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 таблиц деталей. Эти поля являются ключевыми и ссылочными противоречиями. Теперь можно каскадно удалять все, удаляя только основные записи. Недостатком является то, что для каждой записи detail1 И для каждой записи detail2 также должна существовать запись DetailMain (которая фактически создается первой, чтобы получить правильный и уникальный идентификатор).