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

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

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

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

Добавлен: 02.04.2021

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

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

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

 

101

Х отя

 

в

 

п р ив ед енном

 

п римере

 

имена

 

в нешнего

 

и

 

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

 

ключ ей

 

сов п а д а ют

они

 

не

 

о бяза т ельно

 

д олжны

 

быть

 

од ина ков ыми

хотя

 

ч а сто

 

их

 

соз на тельно

 

з а д а ют

 

од ина ков ыми

ч тобы

 

соед инение

 

было

 

более

 

на гляд ным

4.6.2. 

С ост авны е

 

внеш ние

 

кл ю чи

 

Н а

 

п р а ктике

 

в нешний

 

ключ

 

не

 

обяз а тельно

 

может

 

состоять

 

только

 

из

 

од ного

 

п оля

Под обно

 

п ерв ич ному

 

ключ у

в нешний

 

ключ

 

может

 

состоять

 

из

 

любого

 

ч исла

 

п олей

Внешний

 

ключ

 

и

 

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

 

ключ

на

 

который

 

он

 

ссыла ется

конеч но

 

же

д олжны

 

быть

 

оп ред елены

 

на

 

од ина ков ом

 

множеств е

 

п олей

  (

п о

 

колич еств у

 

п олей

тип а м

 

п олей

 

и

 

п оряд ку

 

след ов а ния

 

п олей

). 

Внешние

 

ключ и

состоящ ие

 

из

 

од ного

 

п оля

 

 

п рименяемые

 

в

 

тип ов ых

 

та блица х

 

на стоящ его

 

из д а ния

на иболее

 

ч а сты

 

на

 

п рактике

Ч тобы

 

сохра нить

 

п ростоту

 

обсужд ения

буд ем

 

гов орить

 

о

 

в нешнем

 

ключ е

ка к

 

об

 

од иноч ном

 

столбце

хотя

 

в се

ч то

 

буд ет

 

из ла га ться

 

о

 

п оле

которое

 

яв ляется

 

в нешним

 

ключ ом

сп ра в ед лив о

 

и

 

д ля

 

соста в ных

 

в нешних

 

кл юч ей

оп ред еленных

 

на

 

груп п е

 

п олей

4.6.3. 

С м ы сл

 

внеш него

 

и

 

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

 

кл ю чей

 

К огд а

 

п оле

 

яв ляется

 

в нешним

 

ключ ом

оно

 

оп ред еленным

 

образ ом

 

св яз а но

 

с

 

та блицей

на

 

котор ую

 

э тот

 

ключ

 

ссыла ется

К а жд ое

 

з на ч ение

 

в

 

э том

 

п оле

  (

в нешнем

 

ключ е

неп осред ств енно

 

п рив яз а но

 

к

 

конкр етному

 

з на ч ению

 

в

 

д ругом

 

п оле

  (

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

 

ключ е

). 

Зна ч ения

 

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

 

ключ а

   

д олжны

 

быть

 

уника льными

та к

 

он

 

од нов ременно

 

яв ляется

 

ключ ом

 

отношения

Зна ч ения

 

в нешнего

 

ключ а

 

не

 

о бяза т ельно

 

д олжны

 

быть

 

уника льными

то

 

есть

 

в

 

отношении

 

может

 

быть

 

любое

 

ч исло

 

строк

 

с

 

од ина ков ыми

 

з на ч ениями

 

а трибутов

яв ляющ ихся

 

в нешним

 

ключ ом

При

 

этом

 

строки

сод ер жа щ ие

 

од ина ков ые

 

з на ч ения

 

в нешнего

 

ключ а

 

д олжны

 

о бяза т ельно

 

ссыла ться

 

на

 

 

конкретное

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

 

в

 

д а нный

 

момент

 

в

 

та блице

з на ч ение

 

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

 

ключ а

К роме

 

того

ни

 

в

 

од ной

 

строке

 

та блицы

 

не

 

д олжно

 

быть

 

з на ч ений

 

в нешнего

 

ключ а

д ля

 

которых

 

в

 

текущ ий

 

момент

 

отсутств уют

 

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

 

з на ч ения

 

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

 

ключ а

Д ругими

 

слов а ми

 

не

 

д олжно

 

быть

 

та к

 

на з ыв а емых

 

“в исяч их”

 

ссылок

 


background image

 

102

в нешнего

 

ключ а

Е сли

 

ука з а нные

 

требов а ния

 

в ып олняются

 

в

 

конкретный

 

момент

 

сущ еств ов а ния

 

ба з ы

 

д а нных

то

 

гов орят

ч то

 

д а нные

 

на ход ятся

 

в

 

со гла со в а нно м

 

состоянии

а

 

са ма

 

ба з а

 

на ход ится

 

в

 

состоянии

 

ссы ло чно й

 

цело ст но ст и

 

 

4.6.4. 

О граничение

 

FOREIGN

 

KEY

 (

внеш него

 

кл ю ча

Д ля

 

решения

 

в оп росов

 

п од д ержа ния

 

ссылоч ной

 

целостности

 

в

  SQL 

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

 

огранич ение

 

FOREIGN

 

KEY

Н а з на ч ение

 

FOREIGN

 

KEY

 

 

э то

 

огранич ение

 

д оп устимых

 

з на ч ений

 

п ол я

 

множеств ом

 

з на ч ений

 

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

 

ключ а

ссылка

 

на

 

который

 

ука з ыв а ется

 

п ри

 

оп иса нии

 

д а нного

 

огранич ения

 

FOREIGN

 

KEY

.

  

Проблемы

 

обесп еч ения

 

ссылоч ной

 

целостности

 

в оз ника ют

 

ка к

 

п ри

 

в в од е

 

з на ч ений

 

п оля

яв ляющ егося

 

в нешним

 

ключ ом

та к

 

и

 

п ри

 

мод ифика ции

/

уд а лении

 

з на ч ений

 

п оля

на

 

которое

 

ссыла ется

 

э тот

 

ключ

 

(

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

 

ключ а

).

 

О д но

 

из

 

д ейств ий

 

огра нич ения

 

FOREIGN

 

KEY

 

 

э то

 

отклонение

  (

блокиров ка

в в од а

 

з на ч ений

 

в нешнего

 

ключ а

отсутств ующ их

 

в

 

та блице

 

с

 

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

 

ключ ом

Та кже

 

э то

 

огра нич ение

 

в оз д ейств ует

 

на

 

в оз можность

 

из менять

 

или

 

уд а лять

 

з на ч ения

 

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

 

ключ а

.  

О гра нич ение

 

FOREIGN

 

KEY

 

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

 

в

 

кома нд а х

 

CREATE

 

TABLE

 

и

 

ALTER

 

TABLE

 

п ри

 

соз д а нии

 

или

 

мод ифика ции

 

та блицы

которая

 

сод ержит

 

п оле

которое

 

требуется

 

объяв ить

 

в нешним

 

ключ ом

В

 

кома нд е

 

ука з ыв а ется

 

имя

 

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

 

ключ а

на

 

который

 

имеется

 

ссылка

 

в

 

огра нич ении

 

FOREIGN

 

KEY

.  


background image

 

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

)); 


background image

 

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

)); 


background image

 

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

); 

Та ка я

 

в оз можность

 

в страив а ла сь

 

в

 

яз ык

 

д л я

 

обесп еч ения

 

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