Рассмотрите использование ограничения FOREIGN KEY когда:
■ Данные в одном или нескольких столбцах может содержать только те значения, которые содержатся в определенном столбце (или столбцах) той же самой или другой таблице.
■ Строки в таблице не должны удаляться, пока существуют строки в другой таблице, которые зависят от них.
Вы можете создать ограничения FOREIGN KEY при использовании раздела CONSTRAINT уровня столбца или уровня таблицы в операторах CREATE TABLE или ALTER TABLE. Следующий код демонстрирует, как используется оператор Transact-SQL для добавления ограничения FOREIGN KEY к таблице Sales.SalesOrderHeaderбазы данных AdventureWorks. В примере создается ограничение внешнего ключа FK_SalesOrderHeader_Customer_CustomerID, которое устанавливает ссылочную связь между столбцом CustomerIDтаблицы Sales.SalesOrderHeaderи столбцом CustomerIDтаблицы Sales.Customer.
ALTER TABLE [Sales].[SalesOrderHeader] WITH CHECK ADD CONSTRAINT
Ограничение FOREIGN KEY включает опцию CASCADE, которая позволяет любое изменение значения столбца, для которого определено ограничение UNIQUE или PRIMARY KEY, чтобы распространить это изменение на любые зависимые значения внешних ключей. Это действие известно как каскадирование ссылочной целостности.
Разделы REFERENCES операторов CREATE TABLE и ALTER TABLE поддерживают разделы ON DELETE и ON UPDATE. Эти разделы позволяют Вам определять поведение каскадирования ссылочной целостности. Возможные значения включают NO ACTION, CASCADE, SET NULL, и SET DEFAULT. NO ACTION является значением по умолчанию.
Раздел ON UPDATE ограничения FOREIGN KEY определяет поведение при попытке оператором UPDATE изменить значение первичного ключа, на которое ссылаются значения внешних ключей других таблиц. В следующей таблице описываются возможные значения раздела ON UPDATE и их действия.
Опция
Действие
NO ACTION
Определяет, что если сделана попытка обновить ключевое значение в строке, на которую ссылаются внешние ключи в существующих строках другой таблицы, то возникает ошибка, и отменяется оператор UPDATE.
CASCADE
Определяет, что если сделана попытка обновить ключевое значение в строке, на которую ссылаются внешние ключи в существующих строках другой таблицы, то все значения столбцов, которые составляют внешний ключ, также обновляются новым значением, определенным для ключа.
SET NULL
Определяет, что если была попытка обновить строку в столбце первичного ключа, на которую ссылаются значения внешних ключей других таблиц, то все значения, которые составляют внешний ключ, устанавливаются в null. Все столбцы внешнего ключа целевой таблицы должны допускать null значения для этого ограничения.
SET DEFAULT
Определяет, что если сделана попытка обновить строку в ключевых столбцах, на которые есть ссылки из других таблиц, то все значения соответствующих внешних ключей устанавливаются в значение по умолчанию. Все столбцы внешнего ключа целевой таблицы должны иметь определение DEFAULT для этого ограничения. Если столбец допускает null значения и нет никакого явного набора значений по умолчанию, то null значение неявно становится значением по умолчанию для этого столбца. Любые определенные (не null) значения, которые установлены из-за ON UPDATE SET DEFAULT, должны иметь соответствующие значения в первичной таблице, чтобы поддержать ограничения внешнего ключа.