Внешние ключи обладают еще одной функцией, которую нельзя имитировать с помощью программного кода, — каскадные обновления.
Файл npuHepa:_Keyless-Entry/soln/cascade.sgl
CREATE TABLE Bugs (eported_by BIGINT UNSIGNED NOT NULL,
Status VARCHAR(20) NOT NULL DEFAULT 'NEW,
FOREIGN KEY (reported_by) REFERENCES Accounts(account_id)
ON UPDATE CASCADE
ON DELETE RESTRICT, FOREIGN KEY (status) REFERENCES BugStatus (status)
ON UPDATE CASCADE
ON DELETE SET DEFAULT) ;
Данное решение предоставляет возможность обновления или удаления родительской строки, а также позволяет базе данных обрабатывать дочерние строки, которые ссылаются на нее. Обновления родительских таблиц BugStatus и Accounts распространяются автоматически на дочерние строки в Bugs. Проблемы Уловки-22 больше не существует.
Способ декларирования ON UPDATE И ON DELETE В ограничении внешнего ключа позволяет контролировать результат каскадной операции. Например, ключевое слово RESTRICT ДЛЯ внешнего ключа по столбцу reportedby означает, что учетную запись нельзя удалить, если на нее ссылаются какие-либо строки в Bugs. Ограничением блокируется удаление и генерируется ошибка. Если удалить значение status, все ошибки, связанные с этим статусом, автоматически сбрасываются в значение статуса по умолчанию.
В любом случае обе таблицы изменяются базой данных атомарно. Ссылки внешнего ключа соблюдаются как до, так и после изменений.
Если добавить в базу данных новую дочернюю таблицу, внешними ключами в дочерней таблице будет диктоваться каскадное поведение. Изменять программный код приложения не требуется. Не требуется также ничего изменять в отношении родительской таблицы независимо от того, сколько дочерних таблиц ссылается на нее.
Опубликовал vovan666
June 18 2013 12:26:11 ·
0 Комментариев ·
3518 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.