В MSSQL 2005 я просто поразил печально известное сообщение об ошибке:
Представление ограничения FOREIGN KEY XXX в таблице YYY может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
Теперь у StackOverflow есть несколько тем об этом сообщении об ошибке, поэтому у меня уже есть решение (в моем случае мне придется использовать триггеры), но мне любопытно, почему существует такая проблема вообще.
Как я понимаю, в основном есть два сценария, которые они хотят избежать - цикл и несколько путей. Цикл будет состоять в том, что две таблицы имеют каскадные внешние ключи друг к другу. ОК, цикл может также охватывать несколько таблиц, но это основной случай и будет легче анализировать.
Несколько путей будут, когда TableA имеет внешние ключи для TableB и TableC, а TableB также имеет внешний ключ для TableC. Опять же - это минимальный базовый случай.
Я не вижу никаких проблем, которые возникнут, когда запись будет удалена или обновлена в любой из этих таблиц. Конечно, вам может потребоваться несколько раз запросить одну и ту же таблицу, чтобы увидеть, какие записи необходимо обновлять/удалять, но действительно ли это проблема? Это проблема производительности?
В других SO-темах люди доходят до метки с использованием каскадов как "рискованно" и заявляют, что "разрешение каскада пути - сложная проблема". Зачем? Где риск? Где проблема?