ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.04.2021
Просмотров: 1536
Скачиваний: 4
106
п ерв ич ных
ключ ей
в
ка ч еств е
род ительских
.
4.6.7.
П оддерж ание
ссы л очной
ц ел ост ност и
и
ограничения
з начений
родит ел ь ского
кл ю ча
Под д ер жа ние
ссылоч ной
целостности
требует
в ып ол нения
некоторых
огранич ений
на
з на ч ения
,
которые
могут
быть
з а д а ны
в
п олях
,
объяв ленных
ка к
в нешний
ключ
и
род ительский
ключ
.
Н а бор
з на ч ений
род ительского
ключ а
д олжен
быть
та ким
,
ч тобы
га р а нтиров а ть
,
ч то
ка жд ому
з на ч ению
в нешнего
ключ а
в
род ительской
та бл ице
обяз а тельно
соотв етств ов а ла
од на
и
только
од на
строка
,
ука з а нна я
соотв етств ующ им
род ительским
ключ ом
.
Э то
оз на ч а ет
,
ч то
род ительский
ключ
д олжен
быть
уни ка льны м
и
не
сод ержа ть
п устых
з на ч ений
(
NULL
).
След ов а тельно
,
п ри
объяв лении
в нешнего
ключ а
необход имо
убед иться
,
ч то
в се
п оля
,
которые
исп ользуются
ка к
р од ительские
ключ и
,
имеют
или
огранич ение
PRIMARY
KEY
или
огранич ения
UNIQUE
и
NOT
NULL
.
4.6.8.
И спол ь з ование
первичного
кл ю ча
в
качестве
уникал ь ного
внеш него
кл ю ча
Ссылка
в нешних
ключ ей
только
на
п ерв ич ные
ключ и
сч ита ется
хорошим
стилем
п рогра ммиров а ния
SQL-
з а п росов
.
В
э том
случ а е
исп ользуемые
в нешние
кл юч и
св яз ыв а ются
не
п росто
с
род ительскими
ключ а ми
,
на
которые
они
ссыла ются
,
а
с
од ной
конкретной
строкой
род ительской
та бл ицы
,
в
которой
буд ет
на йд ено
соотв етств ующ ее
з на ч ение
род ительского
ключ а
.
Са м
п о
себе
род ительский
ключ
не
обесп еч ив а ет
ника кой
информа ции
,
которая
бы
не
была
уже
п ред ста в лена
в о
в нешнем
ключ е
.
Внешний
ключ
–
э то
не
п р осто
св яз ь
межд у
д в умя
ид ентич ными
з на ч ениями
столбцов
д в ух
та блиц
,
но
э то
–
св яз ь
м еж д у
д в ум я
ст р о ка м и
д в ух
т а бли ц
.
Та к
ка к
на з на ч ение
п ерв ич ного
ключ а
состоит
именно
в
том
,
ч тобы
од ноз на ч но
ид ентифициров а ть
строку
,
то
исп ользов а ние
ссылки
на
него
в
ка ч еств е
в нешнего
ключ а
яв ляется
более
логич ным
и
более
од ноз на ч ным
в ыбором
д ля
в нешнего
ключ а
.
Внешний
кл юч
,
который
не
имеет
ника кой
д ругой
цели
кроме
св яз ыв а ния
строк
,
на п омина ет
п ерв ич ный
ключ
,
исп ользуемый
исключ ительно
д ля
ид ентифика ции
строк
,
и
яв ляется
107
хорошим
сред ств ом
сохранения
на гляд ности
и
п ростоты
структуры
ба з ы
д а нных
.
4.6.9.
О граничения
з начений
внеш него
кл ю ча
Внешний
ключ
может
сод ержа ть
только
те
з на ч ения
,
которые
фа ктич ески
п ред ста в лены
в
род ительском
ключ е
,
или
яв ляются
п устыми
(
NULL
).
Поп ытка
в в ести
д р угие
з на ч ения
в
э тот
ключ
д олжна
быть
отклонена
,
п оэ тому
объяв ление
в нешнего
ключ а
,
ка к
NOT
NULL
,
не
яв ляется
обяз а тельным
.
4.6.10.
Д ей ст вие
ограничений
внеш него
и
родит ел ь ского
кл ю чей
при
испол ь з овании
ком анд
м одиф икац ии
К а к
уже
гов орилось
,
п ри
исп ользов а нии
кома нд
INSERT
и
UPDATE
д ля
мод ифика ции
з на ч ений
столбца
,
объяв ленного
ка к
в неш ни й
ключ
,
в нов ь
в в од имые
з на ч ения
д олжны
уже
быть
обяз а тельно
п ред ста в лены
в
фа ктич ески
п рисутств ующ их
з на ч ениях
столбца
,
объяв ленного
род ительским
ключ ом
.
Пр и
э том
можно
п омещ а ть
в
э ти
п оля
п устые
(
NULL
)
з на ч ения
,
несмотря
на
то
,
ч то
з на ч ения
NULL
не
д оп устимы
в
род ительских
ключ а х
.
М ожно
та кже
уд а лять
(
DELETE
)
любые
строки
с
в нешними
ключ а ми
из
та блицы
,
в
которой
э ти
ключ и
объяв лены
.
При
необход имости
мод ифика ции
з на ч ений
р о д и т ельско го
ключа
д ело
обстоит
ина ч е
.
Исп ользов а ние
кома нд ы
INSERT
,
котор а я
осущ еств л яет
в в од
нов ой
з а п иси
,
не
в ыз ыв а ет
ника ких
особенностей
,
п р и
которых
в оз можно
на р ушение
ссылоч ной
целостности
.
О д на ко
кома нд а
UPDATE
,
из меняющ а я
з на ч ение
род ительского
ключ а
и
кома нд а
DELETE
,
уд а ляющ а я
строку
,
сод ержа щ ую
та кой
ключ
,
сод ержа т
в оз можность
на р ушения
согла сов а нности
з на ч ений
род ительского
и
ссыла ющ ихся
на
него
в нешних
ключ ей
.
Н а п ример
,
может
в оз никнуть
та к
на з ыв а ема я
“
в и сяча я
”
ссылка
в нешнего
ключ а
на
несущ еств ующ ее
з на ч ение
род ительского
ключ а
,
ч то
сов ершенно
не
д оп устимо
.
Ч тобы
п ри
п рименении
кома нд
UPDATE
и
DELETE
к
п олю
,
яв ляющ емуся
р од ительским
ключ ом
,
не
на р уша ла сь
целостность
ссылки
,
в оз можны
след ующ ие
в а р иа нты
д ейств ий
.
108
•
Л юбые
из менения
з на ч ений
род ительского
ключ а
за пр ещ а ют ся
и
п р и
п оп ытке
их
сов ершения
отв ер га ются
(
огранич ение
NO
ACTION
или
RESTRICT
).
Э та
сп ецифика ция
д ейств ия
п рименяется
п о
умолч а нию
.
•
Из менения
з на ч ений
р од ительского
ключ а
р а зр еш а ют ся
,
но
п р и
э том
а в тома тич ески
осущ еств ляется
ко р р екци я
в сех
з на ч ений
в нешних
ключ ей
,
ссыла ющ ихся
на
мод ифицируемое
з на ч ение
род ительского
ключ а
.
Э то
на з ыв а ется
ка ска д ны м
и зм енени ем
(
огранич ение
CASCADE
).
•
Из менения
з на ч ений
р од ительского
ключ а
р а зр еш а ют ся
,
но
п р и
э том
соотв етств ующ ие
з на ч ения
в нешнего
ключ а
а в тома тич ески
уд а ляют ся
,
то
есть
з а меняются
з на ч ением
NULL
(
огранич ение
SET
NULL
).
•
Из менения
з на ч ений
р од ительского
ключ а
р а зр еш а ют ся
,
но
п р и
э том
соотв етств ующ ие
з на ч ения
в нешнего
ключ а
а в тома тич ески
за м еняют ся
з на ч ением
п о
умолч а нию
(
огранич ение
SET
DEFAULT
).
При
оп иса нии
в нешнего
ключ а
д олжно
ука з ыв а ться
,
ка кой
из
п рив ед енных
в а р иа нтов
д ейств ий
след ует
п рименять
,
п рич ем
в
общ ем
случ а е
э то
д олжно
быть
ука з а но
раз д ельно
д ля
ка жд ой
из
кома нд
UPDATE
и
DELETE
.
В
ка ч еств е
п ример а
исп ользов а ния
огра нич ений
,
на кла д ыв а емых
на
оп ерации
мод ифика ции
род ительских
ключ ей
,
можно
п рив ести
след ующ ий
з а п рос
:
CREATE
TABLE
NEW
_
EXAM
_
MARKS
(
STUDENT
_
ID
INTEGER
NOT
NULL
,
SUBJ
_
ID
INTEGER
NOT
NULL
,
MARK
INTEGER
,
DATA
DATE
,
CONSTRAINT
EXAM
_
PR
_
KEY
PRIMARY
KEY
(
STUDENT
_
ID
,
SUBJ
_
ID
),
CONSTRAINT
SUBJ
_
ID
_
FOR
_
KEY
FOREIGN
KEY
(
SUBJ
_
ID
)
REFERENCES
SUBJECT
,
CONSTRAINT
STUDENT
_
ID
_
FOR
_
KEY
FOREIGN
KEY
(
STUDENT
_
ID
)
REFERENCES
STUDENT
ON
UPDATE
CASCADE
ON
DELETE
NO
ACTION
);
В
э том
п римере
п ри
п оп ытке
из менения
з на ч ения
п оля
STUDENT
_
ID
та блицы
STUDENT
буд ет
а в тома тич ески
обесп еч ив а ться
ка ска д на я
корректиров ка
э тих
з на ч ений
в
та блице
EXAM
_
MARKS
.
То
есть
п ри
109
из менении
ид ентифика тора
студ ента
STUDENT
_
ID
в
та блице
STUDENT
сохра нятся
в се
ссылки
на
его
оценки
.
О д на ко
люба я
п оп ытка
уд а ления
(
DELETE
)
з а п иси
о
студ енте
из
та блицы
STUDENT
буд ет
отв ерга ться
,
есл и
в
та блице
EXAM
_
MARKS
сущ еств уют
з а п иси
об
оценка х
д а нного
студ ента
.
УП Р АЖ НЕ НИ Я
101.
Соз д а йте
та блицу
с
именем
SUBJECT
_
1
,
с
теми
же
п олями
,
ч то
в
та блице
SUBJECT
(
п ред мет
обуч ения
).
Поле
SUBJ
_
ID
яв ляется
п ерв ич ным
ключ ом
.
102.
Соз д а йте
та блицу
с
именем
SUBJ
_
LECT
_
1
(
уч ебные
д исцип лины
п реп од а в а телей
),
с
п олями
LECTURER
_
ID
(
ид ентифика тор
п реп од а в а теля
)
и
SUBJ
_
ID
(
ид ентифика тор
п реп од а в а емой
д исцип лины
).
Пер в ич ным
ключ ом
(
соста в ным
)
та блицы
яв ляется
п а р а
а трибутов
LECTURER
_
ID
и
SUBJ
_
ID
,
кроме
того
,
п оле
LECTURER
_
ID
яв ляется
в нешним
ключ ом
,
ссыла ющ имся
на
та блицу
LECTURER
_
1
,
а на логич ную
та блице
LECTURER
(
п реп од а в а тель
),
а
п оле
SUBJ
_
ID
яв ляется
в нешним
ключ ом
,
ссыла ющ имся
на
та блицу
SUBJECT
_
1
,
а на логич ную
та блице
SUBJECT
.
103.
Соз д а йте
та блицу
с
именем
SUBJ
_
LECT
_
1
ка к
в
п ред ыд ущ ем
з а д а нии
,
но
д оба в ьте
д ля
в сех
ее
в нешних
ключ ей
режим
обесп еч ения
ссылоч ной
целостности
,
з а п рещ а ющ ий
обнов ление
и
уд а ление
соотв етств ующ их
р од ительских
ключ ей
.
104.
Соз д а йте
та блицу
с
именем
LECTURER
_
1
,
с
теми
же
п ол ями
,
ч то
в
та блице
LECTURER
.
Пер в ич ным
ключ ом
та блицы
яв ляется
а трибут
LECTURER
_
ID
,
кроме
того
,
п оле
UNIV
_
ID
яв ляется
в нешним
ключ ом
,
ссыла ющ имся
на
та блицу
UNIVERSITY
_
1
(
а на лог
UNIVERSITY
).
Д ля
э того
п оля
уста нов ите
ка ска д ные
режимы
обесп еч ения
целостности
д ля
кома нд
UPDATE
и
DELETE
.
105.
Соз д а йте
та блицу
с
именем
UNIVERSITY
_
1
,
с
теми
же
п олями
,
ч то
в
та блице
UNIVERSITY
(
унив ерситеты
).
Поле
UNIV
_
ID
яв ляется
п ерв ич ным
ключ ом
.
106.
Соз д а йте
та блицу
с
именем
EXAM
_
MARKS
_
1
.
О на
д олжна
сод ержа ть
та кие
же
п оля
,
ч то
и
та блица
EXAM
_
MARKS
(
э кз а мена ционные
оценки
).
110
К омбина ция
п олей
EXAM_ID
,
STUDENT
_
ID
и
SUBJ
_
ID
яв ляется
п ерв ич ным
ключ ом
.
К роме
того
,
п ол я
STUDENT
_
ID
и
SUBJ
_
ID
яв ляются
в нешним
ключ а ми
,
ссыла ющ имися
соотв етств енно
на
та блицы
STUDENT
_
1
и
SUBJECT
_
1
.
Д ля
э тих
п олей
уста нов ите
режим
ка ска д ного
обесп еч ения
ссылоч ной
целостности
п ри
оп ерации
обнов ления
соотв етств ующ их
п ерв ич ных
ключ ей
,
и
режим
блокиров ки
п ри
п оп ытке
уд а ления
род ительского
ключ а
п ри
на лич ии
ссылки
на
него
.
107.
Соз д а йте
та блицу
с
именем
STUDENT
_
1
.
О на
д олжна
сод ержа ть
та кие
же
п оля
,
ч то
и
та блица
STUDENT
и
нов ое
п оле
SENIOR
_
STUDENT
(
ста р оста
),
з на ч ением
которого
д олжен
быть
ид ентифика тор
студ ента
,
яв ляющ егося
ста р остой
груп п ы
,
в
которой
уч ится
д а нный
студ ент
.
У ка жите
необход имые
д ля
э того
огранич ения
ссылоч ной
целостности
.
108.
Соз д а йте
та блицу
STUDENT
_
2
а на логич ную
та блице
STUDENT
,
в
которой
п оле
UNIV
_
ID
(
ид ентифика тор
унив ерситета
)
яв ляется
в нешним
ключ ом
,
ссыла ющ имся
на
та блицу
UNIVERSITY
_
1
,
и
та ким
образ ом
,
ч тобы
п р и
уд а лении
из
та блицы
UNIVERSITY
_
1
строки
с
информа цией
о
ка ком
-
либо
унив ерситете
в
соотв етств ующ их
з а п исях
та блицы
STUDENT
_
2
п оле
UNIV
_
ID
оч ищ а лось
(
з а мещ а лось
на
NULL
).
109.
С
п омощ ью
кома нд ы
CREATE
TABLE
соз д а йте
з а п росы
д ля
формир ов а ния
та блиц
уч ебной
ба з ы
д а нных
,
п р ед ста в ленной
в
раз д еле
1.7,
с
ука з а нием
п ерв ич ных
ключ ей
,
но
без
ука з а ния
огра нич ений
в нешних
ключ ей
.
За тем
с
п омощ ью
кома нд ы
ALTER
TABLE
ука жите
д ля
сформиров а нных
та блиц
в се
огр а нич ения
,
в
том
ч исле
и
огранич ения
ссылоч ной
целостности
.