Книга: Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil
Расширенные возможности поддержки ссылочной целостности с помощью внешнего ключа
Расширенные возможности поддержки ссылочной целостности с помощью внешнего ключа
Обычно вполне достаточно декларативного варианта ограничения внешнего ключа, при котором сервер только следит за тем, чтобы в таблицу с внешним ключом нельзя было вставить некорректные значения или - при попытке сделать это возникает ошибка. Но InterBase позволяет выполнять ряд автоматических действий при изменении/удалении внешнего ключа. Для этого служит следующий набор опций внешнего ключа:
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
[ON UPDATE {NO ACTIONjCASCADEjSET DEFAULT]SET NULL}]
Эти опции позволяют определить различные действия при изменении или удалении значения внешнего ключа.
Например, мы можем указать, что при удалении первичного ключа в таблице-мастере необходимо удалять все записи с таким же внешним ключом в подчиненной таблице. Для этого следует так определить внешний ключ:
ALTER TABLE INVENTORY
ADD CONSTRAINT fkautodel
FOREIGN KEY (FK_TITLE) REFERENCES TITLE(ID_TITLE)
ON DELETE CASCADE
Фактически для реализации этих действий создается системный триггер, который и выполняет определенные действия. В табл. 1.2 приведено описание происходящих действий при различных опциях (обратите внимание, что опции NO ACTION|CASCADE|SET DEFAULT|SET NULL не могут использоваться совместно в одном предложении ON XXX).
Событие |
Действие |
|||
NO ACTION |
CASCADE |
SET DEFAULT |
SET NULL |
|
ON DELETE |
При удалении внешнего ключа ничего не делать - используется по умолчанию |
При удалении удалить все связанные записи из подчиненной таблицы |
При изменении установить поле внешнего ключа в значение по умолчанию |
При изменении установить поле внешнего ключа в NULL |
ON UPDATE |
При изменении ничего не делать - используется по умолчанию |
При изменении записи изменить во всех связанных записях в подчиненных таблицах |
При удалении установить поле внешнего ключа в значение по умолчанию |
При удалении установить поле внешнего ключа в NULL |
Если мы ничего не указываем или указываем NO ACTION, то необходимо позаботиться об изменении внешнего ключа (в случае изменения первичного) самостоятельно, а при удалении первичного ключа предварительно удалить записи из подчиненной таблицы.
Осторожно надо обращаться с опцией CASCADE: неосторожное ее использование может привести к удалению большого количества связанных записей.
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- Расширенные возможности указания пользовательских планов
- Возможности, планируемые к реализации в следующих версиях
- Как сделать, чтобы компьютер выключался
- Возможности SSH
- Глава 24 Расширенные средства маршрутизации
- 7. Операция левого внешнего соединения.
- 8. Операция правого внешнего соединения.
- 9. Операция полного внешнего соединения.
- 3. Ограничение целостности по состоянию