Ограничение внешнего ключа FOREIGN KEY.
Определяется в дочерней таблице и задает ее связь с родительской таблицей и имеет следующий синтаксис:
[CONSTRAINT <имя ограничения>]
FOREIGN KEY (<внешний ключ дочерней таблицы>)
REFERENCES <родительская таблица> [(<родительский ключ>)]
Пример. Создать таблицу PD (Поставки). Задать соответствующие ограничения.
CREATE TABLE PD
(pnum int,
dnum int,
volume int NOT NULL,
CONSTRAINT PK_PD
RRIMARY KEY (pnum, dnum),
CONSTRAINT FK_PD_P
FOREIGN KEY (pnum) REFERENCES P(pnum),
CONSTRAINT FK_PD_D
FOREIGN KEY (dnum) REFERENCES D(dnum));
Стратегии поддержания ссылочной целостности
Существует две основных стратегии:
- Стратегия ограничения. Не разрешается выполнение операции, приводящей к нарушению ссылочной целостности. Стратегия требует только одной проверки: имеются ли в подчиненном отношении кортежи, связанные с некоторым кортежем главного отношения.
- Стратегия каскадирования. Разрешается выполнение операции, приводящей к нарушению ссылочной целостности, но при этом вносятся поправки в другие отношения. Изменение начинается в главном отношении и каскадно продолжается в подчиненном. В реализации этой стратегии есть одна тонкость: подчиненное отношение само может быть главным для какого-то третьего отношения, тогда требуется выполнение какой-либо стратегии еще раз. Если каскадная операция любого уровня не может быть выполнена, то реализуется откат БД в исходное состояние.
Это самая сложная стратегия, но ее преимущество состоит в том, что не теряется связь между главным и подчиненным отношением.
- Установка в NULL. Разрешается выполнение операции, приводящей к нарушению ссылочной целостности, но при этом все возникающие некорректные значения внешних ключей заменяются на NULL-значения. Недостаток -- кортежи главного и подчиненного отношения теряют всякую связь.
- Установка по умолчанию. Разрешается выполнение операции, приводящей к нарушению ссылочной целостности, но при этом все возникающие некорректные значения внешних ключей заменяются на значения по умолчанию. Недостатки: как и в предыдущем случае, кортежи главного и подчиненного отношения теряют вяскую связь, кроме того, для выполнения такой стратегии в отношении должен быть кортеж, который принят, как кортеж по умолчанию. Обычно это кортеж, заполненный нулями. Этот кортеж нельзя удалять, нельзя изменять значение его первичного ключа, таким образом, не все кортежи в отношении становятся равнозначными, а это приходится дополнительно отслеживать.
- Стратегия игнорирования. Разрешается выполнение всех операций, не обращая внимание на нарушение ссылочной целостности. Фактически, это отказ от поддержания ссылочной целостности. В данном случае вся ответственность за целостность данных, ложится на разработчика.