|
Программирование >> Sql: полное руководство
Каскадные удаления и обновления * Правило restrict является одно)ровневым - в отношении предок/потомок оно затрагивает только таблицу-предок. Правило cascade, напротив, многоуровневое ; это хорошо видно из рис. 11.3. Таблица OFFICES
CASCADE Таблица SALESREPS
CASCADE Таблица OROERS
Рис ? ? 3 Дво уровня удаления в соответствии с правилом CASCADE Предположим, что отношения между таблицами offices/salesreps и sales-reps/orders, изображенные на данном рисунке, подчиняются правилу cascade. Что произойдет при удалении из таблицы offices строки для лос-анджелесского офиса? В соответствии с правилом cascade для отношения таблиц offices/sales-REPS, СУБД автоматически удалит из тaблицыsalesreps все строки, относящиеся к офису в Лос-Анджелесе (идентификатор офиса 21). Но удаление в таблице salesreps строки для Сью Смит (Sue Smith) приводит в действие правило cascade для отношения таблиц salesreps/orders. Согласно этому правилу СУБД автоматически удалит из таблицы orders все строки, относящиеся к Сью Смит (идентификатор служащего 102). Таким образом, удаление офиса вызывает каскадное удаление соответствующих записей о служащих, что, в свою очередь, вызывает каскадное удаление заказов. Как показывает данный пример, правило cascade следует применять с осторожностью, поскольку некорректное его использование может вызвать широкомасштабное автоматическое удаление данных. Правила каскадзного обновления могут привести к подобным многоуровневым обновлениям, если внешний ключ в таблице-потомке одновременно является и ее первичным ключом На практике такая ситуация встречается не часто, поэтому каскадное обновление обычно не имеет таких далеко идущих последствий, как каскадное удаление. Правила удаления и обновления set nqll и set default являются двухуровневыми ; их влияние заканчивается на таблице-потомке. На рис. 11.4 снова изображены таблицы offices, salesreps и orders, HO На ЭТОТ раз Отношение между таблицами offices/salesreps подчиняется правилу удаления set null. Теперь, в соответствии этим с правилом, при удалении лос-анджелесского офиса СУБД установит в столбце rep 0ffice таблицы salesreps значение null в тех строках, где был идентификатор офиса 21. Однако строки остаются в таблице salesreps, и влияние операции удаления распространяется только на таблицу-потомок Таблица OFFICES
SET NULL
Рис. 1 Комбинация правил удаления Ссылочные циклы * в учебной базе данных таблица salesreps содержит столбец rep office - Внешний ключ для таблицы offices. Таблица offices, в свою очередь, содержит столбец mgr - внешний ключ для таблицы salesreps Как видно из рис 11 5, эти два отношения образуют ссылочный цикл Любая строка таблицы salesreps имеет ссылку на строку таблицы offices, которая имеет ссылку на строку таблицы salesreps, и тд. Этот цикл включает в себя две таблицы, но можно легко создать Циклы из трех и более таблиц. Таблица OFFICES
Первичный ключ Ссылка Ссылка Таблица SALESREPS
Внешний ключ A Первичный ключ Рис. 11.5, Ссылочный цикл Независимо от количества таблиц, принимающих в них участие, ссылочные циклы представляют особую проблему для ссылочной целостности. Предположим, например, что в двух таблицах, изображенных на рис. 11.5, для первичных и внешних ключей не допускаются значения null. (На самом деле в учебной базе данных такая ситуация является допустимой; причины этого сейчас станут вам ясны.) Рассмотрим следующий запрос на добавление и соответствующие ему инструкции insert: Вы только что приняли на работу нового служащего Бена Адамса (идентификатор служащего 115), который назначен руководителем нового офиса в Детройте (идентификатор офиса 14). INSERT INTO SALESREPS (EMPL NUM, NAME, REP OFFICE, HIRE DATE, SALES) VALUES (115, Ben Adams, 14, Ol-APR-90, 0.00) INSERT INTO OFFICES (OFFICE, CITY, REGION, MGR, TARGET, SALES) VALUES (14, Detroit, Eastern, 115, 0.00, 0.00) Ho выполнение первой инструкции (для Бена Адамса) будет безрезультатным. Почему? Потому что в новой строке есть ссылка на идентификатор офиса 14, которого в базе данных еще нет! Очевидно, что изменение порядка инструкции insert ни к чему не приведет; INSERT INTO OFFICES (OFFICE, CITY, REGION, MGR, TARGET, SALES) VALUES (14, Detroit, Eastern, 115, 0.00, 0.00) INSERT INTO SALESREPS (EMPL NUM, NAME, REP OFFICE, HIRE DATE, SALES) VALUES (115, Ben Adams, 14, Ol-APR-90, O.OO)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |