SQL Server ограничения на внешние ключи - PullRequest
0 голосов
/ 20 октября 2011

У меня есть таблица ItemComments, в которой есть один столбец с ограничением внешнего ключа, связывающим запись с элементом во второй таблице.Я рассматриваю это как отношение «один ко многим», так как каждый элемент во второй таблице может иметь много комментариев, но два элемента не могут быть связаны с одной и той же записью комментария в таблице ItemComments, поэтому отношение «многие ко многим» неприменять.

ПРОБЛЕМА:

Я хочу определить ограничение для этого столбца, которое будет препятствовать обновлению значения внешнего ключа, т.е. я хочу предотвратить случайное изменение кем-либо идентификатора элемента, указанного в ItemCommentЗапись связана с.Я не очень знаком с форматированием выражений проверки ограничений и мне было любопытно, какой будет синтаксис для такого действия.Или есть другой, более простой способ сделать это?Спасибо за помощь.

ОБНОВЛЕНИЕ

Лучше ли реализовать таблицу перекрестных ссылок, как в отношениях «многие ко многим», чтобы обеспечить ссылочную целостность таким способом?Или это добавляет больше накладных расходов, чем необходимо?

1 Ответ

1 голос
/ 20 октября 2011

Вы всегда можете использовать триггер. Что-то вроде:

create trigger dml_PreventUpdate
on YourTable
after update
as
    if UPDATE(ItemId)
    rollback

Существует два типа триггеров языка манипулирования данными (DML). Есть INSTEAD OF и триггер AFTER/FOR (функции AFTER и FOR работают одинаково). Триггер INSTEAD OF, как следует из названия, выполняется до совершения транзакции. Триггер AFTER, как и следует из названия, выполняется после инициируемого действия.

По сути, все, что делает этот триггер, - это проверка на предмет обновления столбца ItemId из оператора UPDATE, выполняемого для таблицы, YourTable. Этот триггер срабатывает каждый раз, когда происходит UPDATE против YourTable, но он будет только ROLLBACK транзакцию, если ItemId является обновленным полем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...