Скажем, у меня есть 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. Это простой пример, но представьте, что путь каскада намного больше. Похоже, он мог легко заснуть на протяжении длинного каскадного пути.
Итак, каковы наилучшие методы решения этого сценария?