Я много раз искал ответ на этот вопрос, но у меня возникли проблемы при попытке реализовать условия каскадного удаления между двумя конкретными таблицами в модели базы данных, над которой я работаю.Когда я приступаю к развертыванию, SQL Server продолжает выдавать сообщение об ошибке, в котором говорится, что могут быть циклы или несколько каскадных путей.
Рассмотрим таблицу foo, в которой строка первичного ключа имеет значение автоинкрементного целого числа.
fooid|Column1|Column2...
------------------
1
2
Рассмотрим следующую строку таблицы, в которой (среди прочего) есть два столбца, каждый из которых содержит ссылки на внешний ключ обратно на идентификатор в foo.
barId|fooRef1|Stuff|fooRef2
---------------------------
Я пытаюсь реализовать каскадную операцию удаления между foo и bar, чтобы при удалении строки в foo все строки в строке, содержащие этот идентификатор (в любом столбце), тоже удалялись.Существует ограничение проверки, что значения fooRef не могут быть одинаковыми в данной строке.Когда я пытаюсь реализовать каскадное удаление с помощью «ON DELETE CASCADE» в обеих строках внешнего ключа, я получаю ту же ошибку развертывания для циклов и нескольких каскадных путей.Затем я попытался реализовать триггер для события удаления для foo, где при удалении строки он удалит все строки в другой таблице с внешними ключами, установленными в ноль.Однако при реализации этого, когда я затем удаляю проверочное ограничение и «ON DELETE SET NULL» для обеих строк в строке, sql все равно выдает мне эту ошибку.
Я знаю, что самое простое решение для этого было быИзмените модель так, чтобы у меня была только одна ссылка внешнего ключа на другую таблицу, но это не совсем выполнимо.Что еще я мог сделать, чтобы это исправить?