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

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

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

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

Добавлен: 02.04.2021

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

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

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

 

96 

4.5.7. 

П роверка

 

з начений

 

пол ей

 

О гра нич ение

 

CHECK

 

п оз в оляет

 

оп р ед елять

 

услов ие

котор ому

 

д олжно

 

уд ов летв орять

 

в в од имое

 

в

 

п оле

 

та блицы

 

з на ч ение

п режд е

 

ч ем

 

оно

 

буд ет

 

п ринято

Л юба я

 

п оп ытка

 

обнов ить

 

или

 

з а менить

 

з на ч ение

 

п оля

 

та кими

д ля

 

которых

 

п ред ика т

з а д а в а емый

 

огранич ением

 

CHECK

имеет

 

з на ч ение

 

ло ж ь

буд ет

 

отв ерга ться

Ра ссмотрим

   

та блицу

 

STUDENT

Зна ч ение

 

столбца

 

STIPEND

 

в

 

э той

 

та блице

 

STUDENT

 

в ыража ется

 

д есятич ным

 

ч ислом

Н а ложим

 

на

 

з на ч ения

 

э того

 

столбца

 

след ующ ее

 

огранич ение

 

 

в елич ина

 

раз мера

 

стип енд ии

 

д олжна

 

быть

 

меньше

 200. 

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

 

з а п рос

 

имеет

 

след ующ ий

 

в ид

CREATE

 

TABLE

 

STUDENT

 

 

(

STUDENT

_

ID 

INTEGER

 

PRIMARY

 

KEY

 

 SURNAME   

CHAR

 (

25

NOT

 

NULL

 

 NAME   

 

CHAR

 (

10

NOT

 

NULL

,  

 

 STIPEND   

INTEGER

 

CHECK

 (

STIPEND

 < 

200

), 

 

 KURS   

 

INTEGER

 

 CITY   

 

CHAR

 (

15

), 

 

 BIRTHDAY  

DATE

,      

 

 UNIV

_

ID 

 

INTEGER

); 

4.5.8. 

П роверка

 

ограничиваю щ их

 

усл овий

 

с

 

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

 

сост авны х

 

пол ей

 

О гра нич ение

 

CHECK

 

можно

 

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

 

в

 

ка ч еств е

 

та блич ного

 

огранич ения

то

 

есть

 

п ри

 

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

 

в ключ ить

 

более

 

од ного

 

п оля

 

строки

 

в

 

огранич ив а ющ ее

 

услов ие

.  

Пред п оложим

ч то

 

огранич ение

 

на

 

раз мер

 

стип енд ии

  (

меньше

  200) 

д олжно

 

ра сп ространяться

 

только

 

на

 

студ ентов

жив ущ их

 

в

 

Воронеже

Э то

 

можно

 

ука з а ть

 

в

 

з а п росе

 

со

 

след ующ им

 

та блич ным

 

огранич ением

 

CHECK


background image

 

97 

CREATE

 

TABLE

 

STUDENT

 

 

(

STUDENT

_

ID 

INTEGER

 

PRIMARY

 

KEY

 

 SURNAME   

CHAR

(

25

NOT

 

NULL

 

 NAME   

 

CHAR

 (

10

NOT

 

NULL

,  

 

 STIPEND   

INTEGER

 

 KURS   

 

INTEGER

 

 CITY   

 

CHAR

(

15

), 

 

 BIRTHDAY  

DATE

,      

 

 UNIV

_

ID 

 

INTEGER

 

UNIQUE

 

CHECK

(

STIPEND

 < 

200

 

AND

 

CITY

 

=  

Во р о н еж

)); 

или

 

в

 

несколько

 

д ругой

 

з а п иси

 

CREATE

 

TABLE

 

STUDENT

 

 

(

STUDENT

_

ID 

INTEGER

 

PRIMARY

 

KEY

 

 SURNAME   

CHAR

(

25

NOT

 

NULL

 

 NAME   

 

CHAR

 (

10

NOT

 

NULL

,  

 

 STIPEND   

INTEGER

 

 KURS   

 

INTEGER

 

 CITY   

 

CHAR

(

15

), 

 

 BIRTHDAY  

DATE

,      

 

 UNIV

_

ID 

 

INTEGER

 

UNIQUE

 

CONSTRAINT

 

STUD

_

CHECK

 

CHECK

 (

STIPEND

 < 

200

  

 

 

 

 

 

 

 

 

 

AND

 

CITY

 

Во р о н еж

)); 

4.5.9. 

Уст ановка

 

з начений

 

по

 

ум ол чанию

 

В

 SQL 

имеется

 

в оз можность

 

п ри

 

в ста в ке

 

в

 

та блицу

 

строки

не

 

ука з ыв а я

 

з на ч ений

 

некоторого

 

п оля

оп ред елять

 

з на ч ение

 

э того

 

п оля

 

п о

 

умолч а нию

Н а иболее

 

ч а сто

 

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

 

з на ч ением

 

п о

 

умолч а нию

 

яв ляется

 

NULL

Э то

 

з на ч ение

 

п ринима ется

 

п о

 

умолч а нию

 

д ля

 

любого

 

столбца

д ля

 

которого

 

не

 

было

 

уста нов лено

 

огранич ение

 

NOT

 

NULL

Зна ч ение

 

п оля

 

п о

 

умолч а нию

 

ука з ыв а ется

 

в

 

кома нд е

 

CREATE

 

TABLE

 

тем

 

же

 

сп особом

ч то

 

и

 

огра нич ение

 

столбца

с

 

п омощ ью

 

ключ ев ого

 

слов а

 

DEFAULT 

<

зна чени е

 

по

 

ум о лча ни ю

>.  

Строго

 

гов оря

оп ция

 

DEFAULT

 

не

 

имеет

 

огранич ительного

 

св ойств а

та к

 

ка к

 

она

 

не

 

огра нич ив а ет

 

з на ч ения

в в од имые

 

в

 

п оле

а

 

п р осто

 


background image

 

98 

конкретиз ирует

 

з на ч ение

 

п оля

 

в

 

случ а е

если

 

оно

 

не

 

бы ло

 

за д а но

.  

Пред п оложим

ч то

 

основ на я

 

ма сса

 

студ ентов

информа ция

 

о

 

которых

 

на ход ится

 

в

 

та блице

 

STUDENT

п рожив а ет

 

в

 

Воронеже

Ч тобы

 

п ри

 

з а д а нии

 

а трибутов

 

не

 

в в од ить

 

д ля

 

большинств а

 

студ ентов

 

на з в а ние

 

город а

 

Во р о н еж

можно

 

уста нов ить

 

его

 

ка к

 

з на ч ение

 

п оля

 

CITY

 

п о

 

умолч а нию

оп ред елив

 

та блицу

 

STUDENT

 

след ующ им

 

образ ом

CREATE

 

TABLE

 

STUDENT

 

 

STUDENT

_

ID

  

INTEGER

 

PRIMARY

 

KEY

 

 SURNAME   

CHAR

 (

25

NOT

 

NULL

 

 NAME   

 

CHAR

 (

10

NOT

 

NULL

,  

 

 STIPEND   

INTEGER

 

CHECK

 (

STIPEND

 < 

200

), 

 

 KURS   

 

INTEGER

 

 CITY   

 

CHAR

 (

15

DEFAULT

 

Во р о н еж

 

 BIRTHDAY  

DATE

,      

 

 UNIV

_

ID 

 

INTEGER

); 

Д руга я

 

цель

 

п рактич еского

 

п рименения

 

з а д а ния

 

з на ч ения

 

п о

 

умолч а нию

 

 

э то

 

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

 

его

 

ка к

 

а льтерна тив ы

 

д ля

 

NULL

К а к

 

уже

 

отмеч а лось

 

в ыше

п рисутств ие

 

NULL

 

в

 

ка ч еств е

 

в оз можных

 

з на ч ений

 

п оля

 

сущ еств енно

 

усложняет

 

интерп рета цию

 

оп ераций

 

срав нения

в

 

которых

 

уч а ств уют

 

з на ч ения

 

та ких

 

п олей

п оскольку

 

NULL

 

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

 

собой

 

п риз на к

 

того

ч то

 

фа ктич еское

 

з на ч ение

 

п оля

 

неи зв ест но

 

или

 

нео пр ед еленно

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

строго

 

гов ор я

срав нение

 

с

 

ним

 

любого

 

конкретного

 

з на ч ения

 

в

 

рамка х

 

д в уз на ч ной

 

булев ой

 

логики

 

яв ляется

 

не

 

корр ектным

з а

 

исключ ением

 

сп ециа льной

 

оп ерации

 

сра в нения

 

IS

 

NULL

котор а я

 

оп ред еляет

яв ляется

 

ли

 

сод ержимое

 

п оля

 

ка ким

-

либо

 

з на ч ением

 

или

 

оно

 

отсутств ует

Д ейств ительно

ка ким

 

образ ом

 

в

 

рамка х

 

д в уз на ч ной

 

логики

 

отв етить

 

на

 

в оп рос

 

истинно

 

или

 

ложно

 

услов ие

CITY

  = 

Во р о н еж

если

 

текущ ее

 

з на ч ение

 

п оля

 

CITY

 

не

 

из в естно

 (

сод ержит

  

NULL

).  

Во

 

многих

 

случ а ях

 

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

 

в место

 

NULL

 

з на ч ения

п од ста в ляемого

 

в

 

п оле

 

п о

 

умолч а нию

может

 

сущ еств енно

 

уп ростить

 

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

 

з на ч ений

 

п оля

 

в

 

п ред ика та х

.  

Н а п ример

можно

 

уста нов ить

 

д ля

 

столбца

 

оп цию

 

NOT  NULL

а

 

д ля

 

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

 

з на ч ений

 

ч ислов ого

 

тип а

 

уста нов ить

 

з на ч ение

 

п о

 


background image

 

99 

умолч а нию

 

“рав но

 

нулю”

или

 

д ля

 

п олей

 

тип а

 

CHAR

 

 

п робел

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

 

которых

 

в

 

оп ера циях

 

сра в нения

 

не

 

в ыз ыв а ет

 

ника ких

 

п роблем

.  

При

 

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

 

з на ч ений

 

п о

 

умолч а нию

 

в

 

п ринцип е

 

д оп устимо

 

п рименять

 

огранич ения

 

UNIQUE

 

или

 

PRIMARY

 

KEY

 

в

 

э том

 

п оле

При

 

этом

од на ко

след ует

 

иметь

 

в

 

в ид у

 

отсутств ие

 

в

 

та ком

 

огранич ении

 

п ра ктич еского

 

смысла

п оскольку

 

только

 

од на

 

стр ока

 

в

 

та блице

 

сможет

 

п ринять

 

з на ч ение

сов п а д а ющ ее

 

с

 

э тим

 

з на ч ением

 

п о

 

умолч а нию

Д ля

 

та кого

 

п рименения

 

з а д а ния

 

п о

 

умолч а нию

 

необход имо

 (

д о

 

в ста в ки

 

д ругой

 

строки

 

с

 

уста нов кой

 

п о

 

умолч а нию

мод ифициров а ть

 

п ред ыд ущ ую

 

строку

сод ержа щ ую

 

та кое

 

з на ч ение

.  

УП Р АЖ НЕ НИ Я

 

1.

 

Соз д а йте

 

та блицу

 

EXAM

_

MARKS

 

та к

ч тобы

 

не

 

д оп уска лся

 

в в од

 

в

 

та блицу

 

д в ух

 

з а п исей

 

об

 

оценка х

 

од ного

 

студ ента

 

п о

 

конкретным

 

э кз а мену

 

и

 

п ред мету

 

обуч ения

а

 

та кже

ч тобы

 

не

 

д оп уска лось

 

п ров ед ение

 

д в ух

 

э кз а менов

 

п о

 

любым

 

п ред мета м

 

в

 

од ин

 

д ень

2.

 

Соз д а йте

 

та блицу

 

п ред метов

 

обуч ения

 

SUBJECT

 

та к

ч тобы

 

колич еств о

 

отв од имых

 

на

 

п ред мет

 

ч а сов

 

п о

 

умолч а нию

 

было

 

рав но

  36, 

не

 

д оп уска лись

 

з а п иси

 

с

 

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

 

колич еств ом

 

ч а сов

п оле

 

SUBJ

_

ID

 

яв лялось

 

п ер в ич ным

 

ключ ом

 

та блицы

и

 

з на ч ения

 

семестров

  (

п оле

 

SEMESTR

)

 

лежа ли

 

в

 

д иа п а з оне

 

от

 1-

го

 

д о

 12-

ти

3.

 

Соз д а йте

 

та блицу

 

EXAM

_

MARKS

 

та ким

 

образ ом

ч тобы

 

з на ч ения

 

п оля

 

EXAM

_

ID

 

были

 

больше

 

з на ч ений

 

п оля

 

SUBJ

_

ID

а

 

з на ч ения

 

п оля

 

SUBJ

_

ID

 

были

 

больше

 

з на ч ений

 

п оля

 

STUDENT

_

ID

п усть

 

та кже

 

буд ут

 

з а п рещ ены

 

з на ч ения

 

NULL

 

в

 

любом

 

из

 

э тих

 

трех

 

п олей


background image

 

100

4.6. 

П оддерж ка

 

ц ел остности

 

данны х

 

В

 

та блица х

 

рассма трив а емой

 

ба з ы

 

д а нных

 

з на ч ения

 

некотор ых

 

п олей

 

св яз а ны

 

д руг

 

с

 

д ругом

Та к

 

п оле

 

STUDENT

_

ID

 

в

 

та блице

 

STUDENT

 

и

 

п оле

 

STUDENT

_

ID

 

в

 

та блице

 

EXAM_MARKS

 

св яз а ны

 

тем

ч то

 

оп исыв а ют

 

од ни

 

и

 

те

 

же

 

объекты

то

 

есть

   

сод ержа т

 

ид ентифика торы

 

студ ентов

инфор ма ция

 

о

 

которых

 

хранится

 

в

 

ба з е

Б олее

 

того

з на ч ения

 

ид ентифика тор ов

 

студ ентов

которые

 

д оп устимы

 

в

 

та блице

 

EXAM_MARKS

д олжны

 

в ыбираться

 

только

 

из

 

сп иска

 

з на ч ений

 

STUDENT

_

ID

фа ктич ески

 

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

 

в

 

та блице

 

STUDENT

то

 

есть

   

п рина д лежа щ их

 

реа льно

 

оп иса нным

 

в

 

ба з е

 

студ ента м

А на логич но

з на ч ения

 

п оля

 

UNIV

_

ID

 

та бл ицы

 

STUDENT

 

д олжны

 

соотв етств ов а ть

 

ид ентифика торам

 

унив ерситетов

 

UNIV

_

ID

фа ктич ески

 

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

 

в

 

та блице

 

UNIVERSITY

а

 

з на ч ения

 

п оля

 

SUBJ

_

ID

 

та блицы

 

EXAM

_

MARKS

 

д олжны

 

соотв етств ов а ть

 

ид ентифика тора м

 

п ред метов

 

обуч ения

фа ктич ески

 

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

 

в

 

та бл ице

 

SYBJECT

.  

О гра нич ения

на кла д ыв а емые

 

ука з а нным

 

тип ом

 

св яз и

на з ыв а ются

 

о гр а ни чени ям и

 

ссы ло чно й

 

цело ст но ст и

О ни

 

соста в ляют

 

в а жную

 

ч а сть

 

оп иса ния

 

ха р а ктеристик

 

п ред метной

 

обла сти

обесп еч ения

 

корректности

 

д а нных

хранящ ихся

 

в

 

та блица х

К ома нд ы

 

оп иса ния

 

та блиц

  DML 

имеют

 

сред ств а

п оз в оляющ ие

 

оп исыв а ть

 

огра нич ения

 

ссылоч ной

 

целостности

 

и

 

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

 

п од д ержа ние

 

та кой

 

целостности

 

п р и

 

ма нип уляциях

 

з на ч ениями

 

п олей

 

ба з ы

 

д а нных

.  

4.6.1. 

В неш ние

 

и

 

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

 

кл ю чи

 

К огд а

 

ка жд ое

 

з на ч ение

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

 

в

 

од ном

 

п оле

 

та блицы

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

 

в

 

д ругом

 

п оле

 

д ругой

 

или

 

э той

 

же

 

та блицы

гов орят

ч то

 

п ер в ое

 

п оле

 

ссыла ется

 

на

 

в торое

Э то

 

ука з ыв а ет

 

на

 

п рямую

 

св яз ь

 

межд у

 

з на ч ениями

 

д в ух

 

п олей

Поле

которое

 

ссыла ется

 

на

 

д ругое

 

п оле

на з ыв а ется

 

в неш ним

 

к лю ч ом

а

 

п оле

на

 

которое

 

ссыла ется

 

д ругое

 

п оле

на з ыв а ется

 

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

 

к лю ч ом

Та к

 

ч то

 

п оле

 

UNIV

_

ID

 

та блицы

 

STUDENT

 

 

это

 

в нешний

 

ключ

  (

оно

 

ссыла ется

 

на

 

п оле

 

д ругой

 

та блицы

), 

а

 

п оле

 

UNIV

_

ID

 

та блицы

 

UNIVERSITY

на

 

ко т о р о е

 

ссыла ется

 

э тот

 

в нешний

 

ключ

 

 

э то

 

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

 

ключ

.