Скажем, у меня есть 3 таблицы в иерархии:
TableA -> TableB -> TableC
TableC
имеет отношение внешнего ключа с TableB
, а TableB
имеет отношение внешнего ключа с TableA
.
Если я удалю запись в TableA
, она должна каскадировать удаление вниз по иерархии. Использование ON DELETE CASCADE
будет работать нормально.
Однако скажем, мне нужно поставить триггер INSTEAD OF
на TableC
. Мое понимание заключается в том, что триггер INSTEAD OF
не может быть помещен в таблицу с каскадом удаления, идущим к нему. Взято из MSDN:
Для триггеров INSTEAD OF параметр DELETE не разрешен для таблиц, которые имеют ссылочное отношение, указывающее каскадное действие ON DELETE.
Если мне нужно удалить каскад delete TableB->TableC
, мне нужно использовать триггер INSTEAD OF
для принудительного выполнения ссылочной целостности, а затем у меня такая же проблема с TableB->TableA
. Это простой пример, но представьте, что путь каскада намного больше. Похоже, он мог легко заснуть на протяжении длинного каскадного пути.
Итак, каковы наилучшие методы решения этого сценария?