ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.04.2021
Просмотров: 1528
Скачиваний: 4
101
Х отя
в
п р ив ед енном
п римере
имена
в нешнего
и
р од ительского
ключ ей
сов п а д а ют
,
они
не
о бяза т ельно
д олжны
быть
од ина ков ыми
,
хотя
ч а сто
их
соз на тельно
з а д а ют
од ина ков ыми
,
ч тобы
соед инение
было
более
на гляд ным
.
4.6.2.
С ост авны е
внеш ние
кл ю чи
Н а
п р а ктике
в нешний
ключ
не
обяз а тельно
может
состоять
только
из
од ного
п оля
.
Под обно
п ерв ич ному
ключ у
,
в нешний
ключ
может
состоять
из
любого
ч исла
п олей
.
Внешний
ключ
и
род ительский
ключ
,
на
который
он
ссыла ется
,
конеч но
же
,
д олжны
быть
оп ред елены
на
од ина ков ом
множеств е
п олей
(
п о
колич еств у
п олей
,
тип а м
п олей
и
п оряд ку
след ов а ния
п олей
).
Внешние
ключ и
,
состоящ ие
из
од ного
п оля
–
п рименяемые
в
тип ов ых
та блица х
на стоящ его
из д а ния
,
на иболее
ч а сты
на
п рактике
.
Ч тобы
сохра нить
п ростоту
обсужд ения
,
буд ем
гов орить
о
в нешнем
ключ е
,
ка к
об
од иноч ном
столбце
,
хотя
в се
,
ч то
буд ет
из ла га ться
о
п оле
,
которое
яв ляется
в нешним
ключ ом
,
сп ра в ед лив о
и
д ля
соста в ных
в нешних
кл юч ей
,
оп ред еленных
на
груп п е
п олей
.
4.6.3.
С м ы сл
внеш него
и
родит ел ь ского
кл ю чей
К огд а
п оле
яв ляется
в нешним
ключ ом
,
оно
оп ред еленным
образ ом
св яз а но
с
та блицей
,
на
котор ую
э тот
ключ
ссыла ется
.
К а жд ое
з на ч ение
в
э том
п оле
(
в нешнем
ключ е
)
неп осред ств енно
п рив яз а но
к
конкр етному
з на ч ению
в
д ругом
п оле
(
род ительском
ключ е
).
Зна ч ения
род ительского
ключ а
д олжны
быть
уника льными
,
та к
он
од нов ременно
яв ляется
ключ ом
отношения
.
Зна ч ения
в нешнего
ключ а
не
о бяза т ельно
д олжны
быть
уника льными
,
то
есть
в
отношении
может
быть
любое
ч исло
строк
с
од ина ков ыми
з на ч ениями
а трибутов
,
яв ляющ ихся
в нешним
ключ ом
.
При
этом
строки
,
сод ер жа щ ие
од ина ков ые
з на ч ения
в нешнего
ключ а
д олжны
о бяза т ельно
ссыла ться
на
конкретное
,
п рисутств ующ ее
в
д а нный
момент
в
та блице
,
з на ч ение
род ительского
ключ а
.
К роме
того
,
ни
в
од ной
строке
та блицы
не
д олжно
быть
з на ч ений
в нешнего
ключ а
,
д ля
которых
в
текущ ий
момент
отсутств уют
соотв етств ующ ие
з на ч ения
род ительского
ключ а
.
Д ругими
слов а ми
не
д олжно
быть
та к
на з ыв а емых
“в исяч их”
ссылок
102
в нешнего
ключ а
.
Е сли
ука з а нные
требов а ния
в ып олняются
в
конкретный
момент
сущ еств ов а ния
ба з ы
д а нных
,
то
гов орят
,
ч то
д а нные
на ход ятся
в
со гла со в а нно м
состоянии
,
а
са ма
ба з а
на ход ится
в
состоянии
ссы ло чно й
цело ст но ст и
.
4.6.4.
О граничение
FOREIGN
KEY
(
внеш него
кл ю ча
)
Д ля
решения
в оп росов
п од д ержа ния
ссылоч ной
целостности
в
SQL
исп ользуется
огранич ение
FOREIGN
KEY
.
Н а з на ч ение
FOREIGN
KEY
–
э то
огранич ение
д оп устимых
з на ч ений
п ол я
множеств ом
з на ч ений
род ительского
ключ а
,
ссылка
на
который
ука з ыв а ется
п ри
оп иса нии
д а нного
огранич ения
FOREIGN
KEY
.
Проблемы
обесп еч ения
ссылоч ной
целостности
в оз ника ют
ка к
п ри
в в од е
з на ч ений
п оля
,
яв ляющ егося
в нешним
ключ ом
,
та к
и
п ри
мод ифика ции
/
уд а лении
з на ч ений
п оля
,
на
которое
ссыла ется
э тот
ключ
(
род ительского
ключ а
).
О д но
из
д ейств ий
огра нич ения
FOREIGN
KEY
–
э то
отклонение
(
блокиров ка
)
в в од а
з на ч ений
в нешнего
ключ а
,
отсутств ующ их
в
та блице
с
род ительским
ключ ом
.
Та кже
э то
огра нич ение
в оз д ейств ует
на
в оз можность
из менять
или
уд а лять
з на ч ения
род ительского
ключ а
.
О гра нич ение
FOREIGN
KEY
исп ользуется
в
кома нд а х
CREATE
TABLE
и
ALTER
TABLE
п ри
соз д а нии
или
мод ифика ции
та блицы
,
которая
сод ержит
п оле
,
которое
требуется
объяв ить
в нешним
ключ ом
.
В
кома нд е
ука з ыв а ется
имя
род ительского
ключ а
,
на
который
имеется
ссылка
в
огра нич ении
FOREIGN
KEY
.
103
4.6.5.
В неш ний
кл ю ч
как
ограничение
т абл иц ы
Синта ксис
огра нич ения
FOREIGN
KEY
имеет
след ующ ий
в ид
.
FOREIGN
KEY
<
с п и с о к
с т о л бцо в
>
REFERENCES
<
ро ди т ел ь с к а я
т а бл и ца
>
[<
ро ди т ел ь с к и й
к л ю ч
>];
В
э том
п ред ложении
с п и с о к
с т о л бцо в
–
э то
сп исок
из
од ного
или
более
столбцов
та блицы
,
которые
буд ут
соз д а ны
или
из менены
кома нд а ми
CREATE
TABLE
или
ALTER
TABLE
(
д олжны
быть
отд елены
д руг
от
д руга
з а п ятыми
).
Па р а метр
ро ди т ел ь с к а я
т а бл и ца
–
э то
имя
та блицы
,
сод ержа щ ей
род ительский
ключ
.
Э то
,
в
ч а стности
,
может
быть
и
та блицей
,
которая
соз д а ется
или
из меняется
текущ ей
кома нд ой
.
Па раметр
ро ди т ел ь с к и й
к л ю ч
п ред ста в ляет
собой
сп исок
столбцов
род ительской
та блицы
,
которые
соста в ляют
собств енно
род ительский
ключ
.
О ба
сп иска
столбцов
,
оп ред еляющ их
в нешний
и
род ительский
ключ и
,
д олжны
быть
сов местимы
,
а
именно
:
•
сод ержа ть
од ина ков ое
ч исло
столбцов
.
•
п ослед ов а тельность
(1-
й
, 2-
й
, 3-
й
и
т
.
д
.)
столбцов
сп иска
в нешнего
ключ а
д олжны
иметь
тип ы
д а нных
и
раз меры
,
сов п а д а ющ ие
с
соотв етств ующ ими
(1-
м
, 2-
м
, 3-
м
и
т
.
д
.)
столбца ми
сп иска
род ительского
ключ а
.
Соз д а д им
та блицу
STUDENT
с
п олем
UNIV
_
ID
,
оп ред еленным
в
ка ч еств е
в нешнего
кл юч а
,
ссыла ющ егося
на
та блицу
UNIVERSITY
:
CREATE
TABLE
STUDENT
(
STUDENT
_
ID
INTEGER
PRIMARY
KEY
,
SURNAME
CHAR
(
25
),
NAME
CHAR
(
10
),
STIPEND
INTEGER
,
KURS
INTEGER
,
CITY
CHAR
(
15
),
BIRTHDAY
DATE
,
UNIV
_
ID
INTEGER REFERENCES
,
CONSTRAINT
UNIV
_
FOR
_
KEY
FOREIGN
KEY
(
UNIV
_
ID
)
REFERENCES
UNIVERSITY
(
UNIV
_
ID
));
104
При
п р именении
кома нд ы
ALTER
TABLE
к
ка кой
-
либо
та блице
д ля
з а д а ния
огранич ения
FOREIGN
KEY
,
з на ч ения
в нешнего
ключ а
э той
та блицы
и
род ительского
ключ а
соотв етств ующ ей
та бл ицы
д олжны
на ход иться
в
состоянии
ссылоч ной
целостности
.
В
п р отив ном
случ а е
кома нд а
буд ет
отклонена
.
Синта ксис
кома нд ы
ALTER
TABLE
в
э том
случ а е
имеет
след ующ ий
в ид
:
ALTER
TABLE
<
и м я
т а бли цы
>
ADD
CONSTRAINT
<
и мя
о гра ни чени я
>
FOREIGN
KEY
(<
с п и с о к
с т о л бцо в
внеш него
к л ю ча
> )
REFERENCES
<
и мя
ро ди т ел ь с к о й
т а бл и цы
>
[(<
с п и с о к
с т о л бцо в
ро ди т ел ь с к о го
к л ю ча
>)];
Н а п ример
,
кома нд а
ALTER
TABLE
STUDENT
ADD
CONSTRAINT
STUD
_
UNIV
_
FOR
_
KEY
FOREIGN
KEY
(
UNIV
_
ID
)
REFERENCES
UNIVERSITY
(
UNIV
_
ID
);
д оба в ляет
огра нич ение
в нешнего
кл юч а
д ля
та блицы
STUDENT
.
4.6.6.
В неш ний
кл ю ч
как
ограничение
ст ол бц ов
О гра нич ение
в нешнего
ключ а
может
ука з ыв а ться
не
д ля
в сей
та блицы
,
ка к
э то
было
п ока з а но
в ыше
,
а
неп осред ств енно
на
соотв етств ующ ий
столбец
та блицы
.
При
та ком
в а р иа нте
,
на з ыв а емом
ссы ло чны м
о гр а ни чени ем
ст о лбца
,
ключ ев ое
слов о
FOREIGN
KEY
фа ктич ески
не
исп ользуется
.
Пр осто
исп ользуется
ключ ев ое
слов о
REFERENCES
и
д а лее
ука з ыв а ется
имя
род ительского
ключ а
,
п од обно
след ующ ему
п ример у
.
CREATE
TABLE
STUDENT
(
STUDENT
_
ID
INTEGER
PRIMARY
KEY
,
SURNAME
CHAR
(25),
NAME
CHAR
(10),
STIPEND
INTEGER
,
KURS
INTEGER
,
CITY
CHAR
(15),
BIRTHDAY
DATE
,
UNIV
_
ID
INTEGER REFERENCES
UNIVERSITY
(
UNIV
_
ID
));
105
К ома нд а
оп ред еляет
п оле
STUDENT
.
UNIV
_
ID
ка к
в нешний
ключ
,
исп ользующ ий
в
ка ч еств е
род ительского
ключ а
п оле
UNIVERSITY
.
UNIV
_
ID
,
яв ляющ ееся
ключ ом
та бл ицы
UNIVERSITY
.
Э та
форма
э кв ив а лентна
след ующ ему
огранич ению
та блицы
STUDENT
:
FOREIGN
KEY
(
UNIV
_
ID
)
REGERENCES
UNIVERSITY
(
UNIV
_
ID
)
или
,
в
д ругой
з а п иси
,
CONSTRAINT
UNIV
_
FOR
_
KEY
FOREIGN
KEY
(
UNIV
_
ID
)
REFERENCES
UNIVERSITY
(
UNIV
_
ID
).
Е сли
в
род ительской
та блице
у
род ительского
ключ а
ука з а но
огранич ение
PRIMARY
KEY
,
то
п р и
ука з а нии
огранич ения
FOREIGN
KEY
,
на кла д ыв а емого
на
та блицу
или
на
столбцы
,
м о ж но
не
ука зы в а т ь
спи со к
ст о лбцо в
р о д и т ельско го
ключа
.
Е стеств енно
,
в
случ а е
исп ользов а ния
ключ ей
со
многими
п олями
,
п оряд ок
столбцов
в
соотв етств ующ их
в нешних
и
п ерв ич ных
ключ а х
д олжен
сов п а д а ть
,
и
в
любом
случ а е
,
п р инцип
сов местимости
межд у
д в умя
ключ а ми
д олжен
быть
соблюд ен
.
Н а п ример
,
если
огра нич ение
PRIMARY
KEY
ра з мещ ено
в
п оле
UNIV
_
ID
та блицы
UNIVERSITY
CREATE
TABLE
UNIVERSITY
(
UNIV
_
ID
INTEGER
PRIMARY
KEY
,
UNIV
_
NAME
CHAR
(
10
),
RATING
INTEGER
,
CITY
CHAR
(
15
));
то
в
та блице
STUDENT
п оле
UNIV
_
ID
можно
исп ользов а ть
в
ка ч еств е
в нешнего
ключ а
,
не
ука з ыв а я
в
ссылке
имя
род ительского
ключ а
:
CREATE
TABLE
STUDENT
(
STUDENT
_
ID
INTEGER
PRIMARY
KEY
,
SURNAME
CHAR
(
25
),
NAME
CHAR
(
10
),
STIPEND
INTEGER
,
KURS
INTEGER
,
CITY
CHAR
(
15
),
BIRTHDAY
DATE
,
UNIV
_
ID
INTEGER
REFERENCES
UNIVERSITY
);
Та ка я
в оз можность
в страив а ла сь
в
яз ык
д л я
обесп еч ения
исп ользов а ния