Ссылочная целостность: внешний ключ (FOREIGN KEY) стр. 2 |
||
Теперь пора разобраться с тем, как работает ограничение внешнего ключа. Поскольку это ограничение поддерживает согласованность данных в двух таблицах, оно препятствует возникновению таких строк в подчиненной таблице, для которых нет соответствующих строк в главной таблице. Рассогласование могло бы возникнуть в результате выполнения следующих действий. 1. Добавление в подчиненную таблицу строки, для которой нет соответствия в главной таблице. В нашем случае внешние ключи не позволят добавить ни в одну из продукционных таблиц (PC, Laptop или Printer) изделия, модели которого нет в таблице Product. Например, мы получим ошибку при попытке выполнить такой оператор:
The INSERT statement conflicted with the FOREIGN KEY constraint "fk_pc_product". The conflict occurred in database "learn", table "dbo.product", column 'model'. The statement has been terminated. (Конфликт инструкции INSERT с ограничением FOREIGN KEY " fk_pc_product ". Конфликт произошел в базе данных "learn", таблица "dbo.product", столбец 'model'. Выполнение данной инструкции было прервано.) 2. Изменение существующего значения внешнего ключа на значение, которого нет в соответствующем столбце главной таблицы. В нашем примере ограничение не позволит выполнить такой оператор UPDATE
3. Удаление строки из главной таблицы, для которой есть связанные строки в подчиненной таблице. Согласованность данных здесь может поддерживаться разными способами, в соответствии со значением опции в необязательном предложении
Возможны следующие значения опции:
Поскольку
при создании внешнего ключа для таблицы PC мы не указали никакой опции,
то будет использоваться NO ACTION – опция, принимаемая по умолчанию.
Чтобы изменить поведение, скажем, на каскадное удаление, мы должны
переписать ограничение внешнего ключа. Сделать это можно следующим
образом: |