Файл: SQL в вопросах и задачах.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 02.04.2021

Просмотров: 1536

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

106

п ерв ич ных

 

ключ ей

 

в

 

ка ч еств е

 

род ительских

4.6.7. 

П оддерж ание

 

ссы л очной

 

ц ел ост ност и

 

и

 

ограничения

 

з начений

 

родит ел ь ского

 

кл ю ча

  

Под д ер жа ние

 

ссылоч ной

 

целостности

 

требует

 

в ып ол нения

 

некоторых

 

огранич ений

 

на

 

з на ч ения

которые

 

могут

 

быть

 

з а д а ны

 

в

 

п олях

объяв ленных

 

ка к

 

в нешний

 

ключ

 

и

 

род ительский

 

ключ

Н а бор

 

з на ч ений

 

род ительского

 

ключ а

 

д олжен

 

быть

 

та ким

ч тобы

 

га р а нтиров а ть

ч то

 

ка жд ому

 

з на ч ению

 

в нешнего

 

ключ а

 

в

 

род ительской

 

та бл ице

 

обяз а тельно

 

соотв етств ов а ла

 

од на

 

и

 

только

 

од на

 

строка

ука з а нна я

 

соотв етств ующ им

 

род ительским

 

ключ ом

Э то

 

оз на ч а ет

ч то

 

род ительский

 

ключ

 

д олжен

 

быть

 

уни ка льны м

 

и

 

не

 

сод ержа ть

 

п устых

 

з на ч ений

  (

NULL

). 

След ов а тельно

п ри

 

объяв лении

 

в нешнего

 

ключ а

 

необход имо

 

убед иться

ч то

 

в се

 

п оля

которые

 

исп ользуются

 

ка к

 

р од ительские

 

ключ и

имеют

 

или

 

огранич ение

 

PRIMARY

 

KEY

 

или

 

огранич ения

 

UNIQUE

 

и

 

NOT

 

NULL

.  

4.6.8. 

И спол ь з ование

 

первичного

 

кл ю ча

 

в

 

качестве

 

уникал ь ного

 

внеш него

 

кл ю ча

  

Ссылка

 

в нешних

 

ключ ей

 

только

 

на

 

п ерв ич ные

 

ключ и

 

сч ита ется

 

хорошим

 

стилем

 

п рогра ммиров а ния

  SQL-

з а п росов

В

 

э том

 

случ а е

 

исп ользуемые

 

в нешние

 

кл юч и

 

св яз ыв а ются

 

не

 

п росто

 

с

 

род ительскими

 

ключ а ми

на

 

которые

 

они

 

ссыла ются

а

 

с

 

од ной

 

конкретной

 

строкой

 

род ительской

 

та бл ицы

в

 

которой

 

буд ет

 

на йд ено

 

соотв етств ующ ее

 

з на ч ение

 

род ительского

 

ключ а

Са м

 

п о

 

себе

 

род ительский

 

ключ

 

не

 

обесп еч ив а ет

 

ника кой

 

информа ции

которая

 

бы

 

не

 

была

 

уже

 

п ред ста в лена

 

в о

 

в нешнем

 

ключ е

Внешний

 

ключ

 

 

э то

 

не

 

п р осто

 

св яз ь

 

межд у

 

д в умя

 

ид ентич ными

 

з на ч ениями

 

столбцов

 

д в ух

 

та блиц

но

 

э то

 

 

св яз ь

 

м еж д у

 

д в ум я

 

ст р о ка м и

 

д в ух

 

т а бли ц

Та к

 

ка к

 

на з на ч ение

 

п ерв ич ного

 

ключ а

 

состоит

 

именно

 

в

 

том

ч тобы

 

од ноз на ч но

 

ид ентифициров а ть

 

строку

то

 

исп ользов а ние

 

ссылки

 

на

 

него

 

в

 

ка ч еств е

 

в нешнего

 

ключ а

 

яв ляется

 

более

 

логич ным

 

и

 

более

 

од ноз на ч ным

 

в ыбором

 

д ля

 

в нешнего

 

ключ а

Внешний

 

кл юч

который

 

не

 

имеет

 

ника кой

 

д ругой

 

цели

 

кроме

 

св яз ыв а ния

 

строк

на п омина ет

 

п ерв ич ный

 

ключ

исп ользуемый

 

исключ ительно

 

д ля

 

ид ентифика ции

 

строк

и

 

яв ляется

 


background image

 

107

хорошим

 

сред ств ом

 

сохранения

 

на гляд ности

 

и

 

п ростоты

 

структуры

 

ба з ы

 

д а нных

.  

4.6.9. 

О граничения

 

з начений

 

внеш него

 

кл ю ча

  

Внешний

 

ключ

 

может

 

сод ержа ть

 

только

 

те

 

з на ч ения

которые

 

фа ктич ески

 

п ред ста в лены

 

в

 

род ительском

 

ключ е

или

 

яв ляются

 

п устыми

 

(

NULL

). 

Поп ытка

 

в в ести

 

д р угие

 

з на ч ения

 

в

 

э тот

 

ключ

 

д олжна

 

быть

 

отклонена

п оэ тому

 

объяв ление

 

в нешнего

 

ключ а

ка к

 

NOT

 

NULL

не

 

яв ляется

 

обяз а тельным

.   

4.6.10. 

Д ей ст вие

 

ограничений

 

внеш него

 

и

 

родит ел ь ского

 

кл ю чей

 

при

 

испол ь з овании

 

ком анд

 

м одиф икац ии

  

К а к

 

уже

 

гов орилось

п ри

 

исп ользов а нии

 

кома нд

 

INSERT

 

и

 

UPDATE

 

д ля

 

мод ифика ции

 

з на ч ений

 

столбца

объяв ленного

 

ка к

 

в неш ни й

 

ключ

в нов ь

 

в в од имые

 

з на ч ения

 

д олжны

 

уже

 

быть

 

обяз а тельно

 

п ред ста в лены

 

в

 

фа ктич ески

 

п рисутств ующ их

 

з на ч ениях

 

столбца

объяв ленного

 

род ительским

 

ключ ом

Пр и

 

э том

 

можно

 

п омещ а ть

 

в

 

э ти

 

п оля

 

п устые

 (

NULL

з на ч ения

несмотря

 

на

 

то

ч то

 

з на ч ения

 

NULL

 

не

 

д оп устимы

 

в

 

род ительских

 

ключ а х

М ожно

 

та кже

 

уд а лять

  (

DELETE

любые

 

строки

 

с

 

в нешними

 

ключ а ми

 

из

 

та блицы

в

 

которой

 

э ти

 

ключ и

 

объяв лены

При

 

необход имости

 

мод ифика ции

 

з на ч ений

 

р о д и т ельско го

 

ключа

 

д ело

 

обстоит

 

ина ч е

Исп ользов а ние

 

кома нд ы

 

INSERT

котор а я

 

осущ еств л яет

 

в в од

 

нов ой

 

з а п иси

не

 

в ыз ыв а ет

 

ника ких

 

особенностей

п р и

 

которых

 

в оз можно

 

на р ушение

 

ссылоч ной

 

целостности

О д на ко

 

кома нд а

 

UPDATE

из меняющ а я

 

з на ч ение

 

род ительского

 

ключ а

 

и

 

кома нд а

 

DELETE

уд а ляющ а я

 

строку

сод ержа щ ую

 

та кой

 

ключ

сод ержа т

 

в оз можность

 

на р ушения

 

согла сов а нности

 

з на ч ений

 

род ительского

 

и

 

ссыла ющ ихся

 

на

 

него

 

в нешних

 

ключ ей

Н а п ример

может

 

в оз никнуть

 

та к

 

на з ыв а ема я

 

в и сяча я

 

ссылка

 

в нешнего

 

ключ а

 

на

 

несущ еств ующ ее

 

з на ч ение

 

род ительского

 

ключ а

ч то

 

сов ершенно

 

не

 

д оп устимо

Ч тобы

 

п ри

 

п рименении

 

кома нд

 

UPDATE

 

и

 

DELETE

 

к

 

п олю

яв ляющ емуся

 

р од ительским

 

ключ ом

не

 

на р уша ла сь

 

целостность

 

ссылки

в оз можны

 

след ующ ие

 

в а р иа нты

 

д ейств ий


background image

 

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

То

 

есть

 

п ри

 


background image

 

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

  (

э кз а мена ционные

 

оценки

). 


background image

 

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

 

ука жите

 

д ля

 

сформиров а нных

 

та блиц

 

в се

 

огр а нич ения

в

 

том

 

ч исле

 

и

 

огранич ения

 

ссылоч ной

 

целостности