ВМЕСТО триггеров и путей CASCADE

Допустим, у меня есть 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. Это простой пример, но представьте, что путь каскада намного больше. Кажется, что он может легко снежным комом пройти длинный каскадный путь.

Итак, каковы наилучшие методы работы с этим сценарием?

10
задан mehdi lotfi 2 June 2012 в 14:14
поделиться