Типичная ситуация с несколькими каскадинными путями будет такова: мастер-таблица с двумя деталями, скажем, «Мастер» и «Детали1» и «Деталь2». Обе детали являются каскадным удалением. Пока нет проблем. Но что, если обе детали имеют отношение «один ко многим» с какой-либо другой таблицей (например, «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 }
Все поля ID являются ключевыми полями и автоматическим приращением. Суть лежит в полях DetailMainId таблиц Detail. Эти поля являются как ключевыми, так и ссылочными. Теперь можно каскадно удалить все, удалив только основные записи. Недостатком является то, что для каждой detail1-record AND для каждой записи detail2 также должна быть запись DetailMain-запись (которая фактически создается сначала, чтобы получить правильный и уникальный идентификатор).
Надеюсь, это сработает. Удалите URL и сведения о браузере веб-драйвера в модулях
class_name: AcceptanceTester
modules:
enabled:
- WebDriver
- Db
- Filesystem
config:
PhpBrowser:
url: 'http://amazon-ce.localhost.tom/'
WebDriver:
url: 'http://amazon-ce.localhost.tom/'
browser: chrome
Db:
dsn: 'mysql:dbname=myDb;host=127.0.0.1'
user: 'root'
password: ''