Программирование >>  Sql: полное руководство 

1 ... 82 83 84 [ 85 ] 86 87 88 ... 264


Каскадные удаления и обновления *

Правило restrict является одно)ровневым - в отношении предок/потомок оно затрагивает только таблицу-предок. Правило cascade, напротив, многоуровневое ; это хорошо видно из рис. 11.3.

Таблица OFFICES

OFFICE

CITY

REGION

TARGET

SALES

22 11 12 13 21

Denver New York Chicago Atlanta Los Angeles

Western Eastern Eastern Eastern Western

108 106 1D4 105 10B

$300.000 00 $575 ООО 00 $800,000 00 $350,000 00 $725,000 00

$186 042 00 $692 637 00 $735 042 00 $367,911 00 $835,915 00

CASCADE

Таблица SALESREPS

EHPL NUN

NAME

REP OFFICE

TITLE

Mary Jones

Sa1es Rep

Sue Smith

Sales Rep

Sam Clark

VP Sales

CASCADE

Таблица OROERS

OROERNUM

ORDER DATE

CUST

113055

15-FEB-90

2108

113048

10-FEa-90

2120

112993

04-JAN-89

2106

Рис ? ? 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

OFFICE

CITY

REGION

TARGET

SALES

Denver

Western

$300,000 00

$186 042 00

New Vork

Eastern

$575 ООО 00

$692,637 00

Chicago

Eastern

$800,000 00

$735,042 00

Atlanta

Eastern

$350,000 00

$367,911 00

Los Angeles

Western

$725,000 00

$835,915 00

SET NULL


EHPLNUM

NAME

RHP 0FF)CE

TITLE

Mary Jones

Sales Rep

Sue Smith

Sales Rep

Sam Clark

VP Sales


order num

0rder date

cust

113055

15-feb-90

2108

113048

10-feb-90

2120

112993

04-jan-89

2106

Рис. 1 Комбинация правил удаления

Ссылочные циклы *

в учебной базе данных таблица salesreps содержит столбец rep office - Внешний ключ для таблицы offices. Таблица offices, в свою очередь, содержит столбец mgr - внешний ключ для таблицы salesreps Как видно из рис 11 5, эти два отношения образуют ссылочный цикл Любая строка таблицы salesreps имеет ссылку на строку таблицы offices, которая имеет ссылку на строку таблицы salesreps, и тд. Этот цикл включает в себя две таблицы, но можно легко создать Циклы из трех и более таблиц.



Таблица OFFICES

OFFICE

CITV

REGION

TARGET

SALES

Denver

Western

$300,000 00

$186,042 00

New Vork

Eastern

$575,000 00

$692,637 DO

Chicago

Eastern

WOO, ODD 00

$735,042 DO

Atlanta

Eastern

$350,000 00

$367,911 00

Los Angeles

Western

$725,000 00

$835,915 00

Первичный ключ

Ссылка

Ссылка

Таблица SALESREPS

EHPLJUH

NAHE

REP.OFFICE

TITLE

Bi М Adams

Sales Rep

Mary Jones

Sales Rep

Sue Smith

Sales Rep

Sam Clark

VP Sales

Bob Smith

Sales Hgr

Dan Roberts

Sales Rep

Tom Snyder

NULL

Sales Rep

Larry Fitch

Sales Mgr

Paul Cruz

Sales Rep

Nancy Angel 11

Sales Rep

Внешний ключ

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)



1 ... 82 83 84 [ 85 ] 86 87 88 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика