Допустим, у меня есть 3 таблицы в иерархии:
TableA -> TableB -> TableC
TableC
имеет связь внешнего ключа с TableB
, а TableB
имеет связь внешнего ключа с TableA
.
Если я удаляю запись в TableA
, она должна удаляться каскадом вниз по иерархии. Использование ON DELETE CASCADE
будет работать нормально.
Однако допустим, мне нужно установить триггер INSTEAD OF
на TableC
. Я так понимаю, что триггер INSTEAD OF
не может быть помещен в таблицу, на которую идет каскад удаления. Взято из MSDN:
For INSTEAD OF triggers, the DELETE option is not allowed on tables that have a referential relationship specifying a cascade action ON DELETE.
Если мне нужно отключить каскадное удаление TableB->TableC
, мне нужно будет использовать триггер INSTEAD OF
для обеспечения ссылочной целостности, и тогда у меня будет та же проблема с TableB->TableA
. Это простой пример, но представьте, что путь каскада намного больше. Кажется, что он может легко снежным комом пройти длинный каскадный путь.
Итак, каковы наилучшие методы работы с этим сценарием?