SQL Server 2008 - Несколько каскадных FK - Нужен ли мне триггер?

У меня связь 1 .. * между пользователем и сообщением . (у одного пользователя много сообщений)

Сообщение имеет FK под названием «UserId», который отображается в поле «UserId» в таблице User .

Я попытался установить этот FK как Каскадное ОБНОВЛЕНИЕ / УДАЛЕНИЕ, но я получаю эту ошибку:

'Пользователи' Таблица "Посты" - Невозможно создать связь "FK_Posts_Users".
Введение ограничения FOREIGN KEY 'FK_Posts_Users' в таблице 'Posts' может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY. Не удалось создать ограничение. См. Предыдущие ошибки.

У меня есть таблица с названием PostHelpful. В одном сообщении много Helpful.

Helpful имеет каскадный FK для пользователя (поэтому, когда пользователь удаляется, его Helpful также удаляются).

Но я думаю, что это причина жалоб на «несколько каскадных путей».

Потому что, если я удалю пользователя (в настоящее время), он удалит его полезные сведения. Но я также пытаюсь добавить каскад в Post, он удалит сообщение, а затем попытается удалить Helpful для этого сообщения (поскольку Helpful также имеет каскадный FK для публикации). В этом сценарии, какой каскадный FK выберет SQL?

Вот диаграмма базы данных для трех рассматриваемых таблиц:

enter image description here

Как вы можете видеть, «PostHelpful» является дочерним по отношению к «Post» и «User» ( имеет FK для обоих).

Так что я могу ' не сделать оба ключа каскадными? Нужен ли мне триггер для «Пользователи» (ПОСЛЕ УДАЛЕНИЯ), чтобы вручную удалить полезные файлы (и другие таблицы, ссылающиеся на пользователя).

5
задан RPM1984 24 February 2011 в 22:44
поделиться