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

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

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

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

Добавлен: 02.04.2021

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

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

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

 

91 

оп иса ния

 

столбца

  (

з а п ятой

). 

О гранич ения

 

на

 

та блицу

 

раз мещ а ются

 

в

 

конце

 

оп ред еления

 

та блицы

п осле

 

оп ред еления

 

п ослед него

 

столбца

К ома нд а

 

CREATE

 

TABLE

 

имеет

 

след ующ ий

 

синта ксис

расширенный

 

в ключ ением

 

огранич ений

 

CREATE

 

TABLE

 <

и м я

 

т а бли цы

 

 

 

(

<

и м я

 

ст о лбца

> <

т и п

 

д а нны х

> <

о гр а ни чени я

 

на

 

ст о лбец

>, 

 

<

и м я

 

ст о лбца

> <

т и п

 

д а нны х

> <

о г р а ни чени я

 

на

 

ст о лбец

>,

 

 

<

о гр а ни чени я

 

на

 

т а бли цу

> (<

и м я

 

ст о лбца

>[,<

и м я

 

ст о лбца

>

])

); 

Поля

з а д а нные

 

в

 

круглых

 

скобка х

 

п осле

 

оп иса ния

 

огранич ений

 

та блицы

 

 

это

 

п оля

на

 

которые

 

э ти

 

огранич ения

 

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

О гранич ения

 

на

 

столбцы

 

п рименяются

 

к

 

тем

 

столбца м

з а

 

которыми

 

они

 

оп иса ны

4.5.1. 

О граничение

 

NOT

 

NULL

 

Ч тобы

 

з а п ретить

 

в оз можность

 

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

 

в

 

п оле

 

NULL-

з на ч ений

можно

 

п ри

 

соз д а нии

 

та блицы

 

кома нд ой

 

CREATE

 

TABLE

 

ука з а ть

 

д ля

 

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

 

столбца

 

ключ ев ое

 

слов о

 

NOT

 

NULL

Э то

 

огранич ение

 

п рименимо

 

только

 

к

 

столбца м

 

та блицы

К а к

 

уже

 

гов орилось

 

в ыше

NULL

 

 

э то

 

сп ециа льный

 

ма р кер

обоз на ч а ющ ий

 

тот

 

фа кт

ч то

 

п оле

 

п усто

Н о

 

он

 

п олез ен

 

не

 

в сегд а

Пер в ич ные

 

ключ и

на п ример

в

 

п ринцип е

 

не

 

д олжны

 

сод ержа ть

 

NULL-

з на ч ений

  (

быть

 

п устыми

), 

п оскольку

 

э то

 

на р ушило

 

бы

 

требов а ние

 

уника льности

 

п ер в ич ного

 

ключ а

 

(

более

 

строго

 

 

функциона л ьную

 

з а в исимость

 

а трибутов

 

та блицы

 

от

 

п ерв ич ного

 

ключ а

). 

Во

 

многих

 

д ругих

 

случ а ях

 

та кже

 

необход имо

ч тобы

 

п оля

 

о бяза т ельно

 

сод ержа ли

 

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

 

з на ч ения

Е сли

 

ключ ев ое

 

слов о

 

NOT

 

NULL

 

раз мещ а ется

 

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

 

п осле

 

тип а

 

д а нных

 (

в ключ а я

 

р а з мер

столбца

то

 

любые

 

п оп ытки

 

оста в ить

 

з на ч ение

 

п оля

 

п устым

  (

в в ести

 

в

 

п оле

 

NULL-

з на ч ение

буд ут

 

отв ергнуты

 

системой

 

Н а п ример

д ля

 

того

ч тобы

 

в

 

оп ред елении

 

та блицы

 

STUDENT

 

з а п ретить

 

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

 

NULL-

з на ч ений

 

д л я

 

столбцов

 

STUDENT

_

ID

SURNAME

 

и

 

NAME

можно

 

з а п иса ть

 

след ующ ее

CREATE

 

TABLE

 

STUDENT

 

 

(

STUDENT

_

ID

 

INTEGER

 

NOT

 

NULL


background image

 

92 

 

 SURNAME 

CHAR

 (25) 

NOT

 

NULL

 

 NAME   

CHAR

 (10) 

NOT

 

NULL

,  

 

 STIPEND 

INTEGER

 

 KURS   

INTEGER

 

 CITY   

CHAR

 (15), 

 

 BIRTHDAY 

DATE

,      

 

 UNIV

_

ID 

INTEGER

); 

Ва жно

 

п омнить

ч то

если

 

д ля

 

столбца

 

ука з а но

 

NOT

 

NULL

то

 

п ри

 

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

 

кома нд ы

 

INSERT

 

обяз а тельно

 

д олжно

 

быть

 

ука з а но

 

конкретное

 

з на ч ение

в в од имое

 

в

 

э то

 

п оле

При

 

отсутств ии

 

огранич ения

 

NOT

 

NULL

 

в

 

столбце

 

з на ч ение

 

может

 

отсутств ов а ть

если

 

только

 

не

 

ука з а но

 

з на ч ение

 

столбца

 

п о

 

умолч а нию

  (

DEFAULT

). 

Если

 

п р и

 

соз д а нии

 

та блицы

 

огранич ение

 

NOT

 

NULL

 

не

 

было

 

ука з а но

то

 

его

 

можно

 

ука з а ть

 

п оз же

исп ользуя

 

кома нд у

 

ALTER

 

TABLE

О д на ко

д ля

 

того

ч тобы

 

д ля

 

в нов ь

 

в в од имого

 

с

 

п омощ ью

 

кома нд ы

 

ALTER

 

TABLE

 

столбца

 

можно

 

было

 

з а д а ть

 

огранич ение

 

NOT

 

NULL

та блица

в

 

которую

 

д оба в ляется

 

столбец

д олжна

 

быть

 

п устой

.  

4.5.2. 

Уникал ь ност ь

 

как

 

ограничение

 

на

 

ст ол бец

 

Иногд а

 

тр ебуется

ч тобы

 

в се

 

з на ч ения

в в ед енные

 

в

 

столбец

отлич а лись

 

д руг

 

от

 

д руга

Н а п р имер

э того

 

требуют

 

п ер в ич ные

 

ключ и

Е сли

 

п ри

 

соз д а нии

 

та блицы

 

д ля

 

столбца

 

ука з ыв а ется

 

огранич ение

 

UNIQUE

то

 

ба з а

 

д а нных

 

отв ерга ет

 

любую

 

п оп ытку

 

в в ести

 

в

 

э то

 

п оле

 

ка кой

-

либо

 

строки

 

з на ч ение

уже

 

сод ержа щ ееся

 

в

 

том

 

же

 

п оле

 

д ругой

 

строки

Э то

 

огранич ение

 

п рименимо

 

только

 

к

 

тем

 

п олям

которые

 

был и

 

объяв лены

 

NOT

 

NULL

М ожно

 

п ред ложить

 

след ующ ее

 

оп ред еление

 

та блицы

 

STUDENT

исп ользующ ее

 

огранич ение

 

UNIQUE

CREATE

 

TABLE

 

STUDENT

 

 

(

STUDENT

_

ID

  

INTEGER

 

NOT

 

NULL

 

UNIQUE

 

 SURNAME   

CHAR

 (25) 

NOT

 

NULL

 

 NAME   

 

CHAR

 (10) 

NOT

 

NULL

,  

 

 STIPEND   

INTEGER

 

 KURS   

 

INTEGER

 

 CITY   

 

CHAR

 (15), 


background image

 

93 

 

 BIRTHDAY  

DATE

,      

 

 UNIV

_

ID 

 

INTEGER

); 

О бъяв ляя

 

п оле

 

STUDENT

_

ID

 

уника льным

можно

 

быть

 

ув еренным

ч то

 

в

 

та блице

 

не

 

п ояв ится

 

з а п исей

 

д ля

 

д в ух

 

студ ентов

 

с

 

од ина ков ыми

 

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

Столбцы

отлич ные

 

от

 

п ерв ич ного

 

ключ а

д ля

 

которых

 

требуется

 

п од д ержа ть

 

уника льность

 

з на ч ений

на з ыв а ются

 

в оз можными

 

ключ а ми

 

или

 

уника льными

 

ключ а ми

  (

CANDIDATE

 

KEYS 

или

  UNIQUE

 

KEYS

). 

4.5.3. 

Уникал ь ност ь

 

как

 

ограничение

 

т абл иц ы

  

М ожно

 

сд ела ть

 

уника л ьными

 

груп п у

 

п олей

ука з а в

 

UNIQUE

 

в

 

ка ч еств е

 

огранич ений

 

т а бли цы

При

 

объед инении

 

п олей

 

в

 

груп п у

 

в а жен

 

п оряд ок

в

 

котором

 

они

 

ука з ыв а ются

О гранич ение

 

на

 

та блицу

 

UNIQUE

 

яв ляется

 

п олез ным

если

 

требуется

 

п од д ержив а ть

 

уника льность

 

груп п ы

 

п олей

Н а п ример

если

 

в

 

на шей

 

ба з е

 

д а нных

 

не

 

д оп уска ется

ч тобы

 

студ ент

 

сд а в а л

 

в

 

од ин

 

д ень

 

больше

 

од ного

 

э кз а мена

то

 

можно

 

в

 

та блице

 

объяв ить

 

уника льной

 

комбина цию

 

з на ч ений

 

п олей

 

STUDENT

_

ID

 

и

 

EXAM

_

DATE

Д ля

 

э того

 

след ует

 

соз д а ть

 

та блицу

 

EXAM

_

MARKS

 

та ким

 

сп особом

CREATE

 

TABLE

 

EXAM

_

MARKS

 

 

(

EXAM

_

ID 

 

INTEGER NOT

 

NULL

 

 

STUDENT

_

ID 

INTEGER NOT

 

NULL

 

 

SUBJ_ID 

 

INTEGER NOT

 

NULL

 

 

MARK 

 

 

CHAR

 (

1

),  

 

 

EXAM_DATE  

DATE NOT

 

NULL

,      

 

UNIQUE

  (

STUDENT

_

ID

EXAM_DATE

)); 

О братите

 

в нима ние

ч то

 

оба

 

п оля

 

в

 

огра нич ении

 

та блицы

 

UNIQUE

 

в се

 

ещ е

 

исп ользуют

 

огра нич ение

 

столбца

 

 

NOT

 

NULL

Е сли

 

бы

 

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

 

огранич ение

 

столбца

 

UNIQUE

 

д л я

 

п оля

 

STUDENT

_

ID

то

 

та кое

 

огранич ение

 

та блицы

 

было

 

бы

 

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

Е сли

 

з на ч ения

 

п оля

 

STUDENT

_

ID

 

д олжно

 

быть

 

раз лич ным

 

д ля

 

ка жд ой

 

строки

 

в

 

та блице

 

EXAM

_

MARKS

э то

 

можно

 

сд ела ть

объяв ив

 

UNIQUE

 

ка к

 

огранич ение

 

са мого

 

п оля

 

STUDENT

_

ID

В

 

э том

 

сл уч а е

 

не

 

буд ет

 

и

 

д в ух

 

строк

 

с

 

ид ентич ной

 

комбина цией

 

з на ч ений

 

п олей

 

STUDENT

_

ID

EXAM_DATE


background image

 

94 

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

ука з а ние

 

UNIQUE

 

ка к

 

огра нич ение

 

та блицы

 

на иболее

 

п олез но

 

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

 

в

 

случ а ях

когд а

 

не

 

требуется

 

уника льность

 

инд ив ид уа льных

 

п олей

ка к

 

э то

 

имеет

 

место

 

на

 

са мом

 

д еле

 

в

 

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

 

п римере

4.5.4. 

П рисвоение

 

им ен

 

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

 

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

 

та блиц

 

можно

 

п рисв а ив а ть

 

уника льные

 

имена

Преимущ еств о

 

яв ного

 

з а д а ния

 

имени

 

огранич ения

 

состоит

 

в

 

том

ч то

 

в

 

э том

 

случ а е

 

п ри

 

в ыд а ч е

 

системой

 

сообщ ения

 

о

 

на р ушении

 

уста нов ленного

 

огранич ения

 

буд ет

 

ука з а но

 

его

 

имя

ч то

 

уп рощ а ет

 

обна р ужение

 

ошибок

.  

Д ля

 

п рисв оения

 

имени

 

огранич ению

 

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

 

несколько

 

из мененный

 

синта ксис

 

кома нд

 

CREATE

 

TABLE

 

и

 

ALTER

 

TABLE

.  

Прив ед енный

 

в ыше

 

п ример

 

з а п роса

 

из меняется

 

след ующ им

 

образ ом

CREATE

 

TABLE

 

EXAM

_

MARKS

 

 

(

EXAM

_

ID 

 

INTEGER NOT

 

NULL

 

 

STUDENT

_

ID 

INTEGER NOT

 

NULL

 

 

SUBJ_ID 

 

INTEGER NOT

 

NULL

 

 

MARK 

 

 

CHAR

 (

1

),  

 

 

EXAM_DATE  

DATE NOT

 

NULL

,      

 

CONSTRAINT

 

STUD

_

SUBJ

_

CONSTR

  

 

 

 

 

 

UNIQUE

 (

STUDENT

_

ID

EXAM_DATE

); 

В

 

э том

 

з а п росе

 

STUD

_

SUBJ

_

CONSTR

 

 

э то

 

имя

п рисв оенное

 

ука з а нному

 

огранич ению

 

та блицы

.  

4.5.5. 

О граничение

 

первичны х

 

кл ю чей

 

П ер в и чны е

 

ключи

 

т а бли цы

 

 

э то

 

сп ециа льные

 

случ а и

 

комбиниров а ния

 

огранич ений

 

UNIQUE

 

и

 

NOT

 

NULL

Перв ич ные

 

ключ и

 

имеют

 

след ующ ие

 

особенности

 

та блица

 

может

 

сод ержа ть

 

только

 

од ин

 

п ер в ич ный

 

ключ

 

в нешние

 

ключ и

 

п о

 

умолч а нию

 

ссыла ются

 

на

 

п ерв ич ный

 

ключ

 

та блицы

 

п ерв ич ный

 

ключ

 

яв ляется

 

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

 

строк

 

та блицы

  (

строки

од на ко

могут

 

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

 

и

 

д ругими

 

сп особа ми

). 


background image

 

95 

У луч шенный

 

в а р иа нт

 

соз д а ния

 

та блицы

 

STUDENT1

 

с

 

объяв ленным

 

п ерв ич ным

 

ключ ом

 

имеет

 

теп ер ь

 

след ующ ий

 

в ид

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

); 

4.5.6. 

С ост авны е

 

первичны е

 

кл ю чи

  

О гра нич ение

 

PRIMARY

 

KEY

 

может

 

та кже

 

быть

 

п р именено

 

д ля

 

нескольких

 

п олей

соста в ляющ их

 

уника льную

 

комбина цию

 

з на ч ений

 

 

со ст а в но й

 

п ерв ич ный

 

ключ

Ра ссмотрим

 

та блицу

 

EXAM

_

MARKS

О ч ев ид но

ч то

 

ни

 

к

 

п олю

 

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

 

студ ента

  (

STUDENT

_

ID

), 

ни

 

к

 

п ол ю

 

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

 

п ред мета

 

обуч ения

  (

EXAM

_

ID

п о

 

отд ельности

 

нельзя

 

п ред ъяв ить

 

требов а ние

 

уника льности

О д на ко

д ля

 

того

ч тобы

 

в

 

та блице

 

не

 

могли

 

п ояв иться

 

раз ные

 

з а п иси

 

д ля

 

од ина ков ых

 

комбина ций

 

з на ч ений

 

п олей

  

STUDENT

_

ID

 

и

 

EXAM

_

ID

  (

конкретный

 

студ ент

 

на

 

конкр етном

 

э кз а мене

 

не

 

может

 

п олуч ить

 

более

 

од ной

 

оценки

), 

имеет

 

смысл

 

объяв ить

 

уника льной

 

комбина цию

 

э тих

 

п олей

Д л я

 

э того

 

мы

 

можем

 

п рименить

 

огранич ение

 

та блицы

 

PRIMARY

 

KEY

объяв ив

 

п а р у

 

EXAM

_

ID

 

и

 

STUDENT

_

ID

 

п ерв ич ным

 

ключ ом

 

та блицы

CREATE

 

TABLE 

NEW

_

EXAM

_

MARKS

 

 

(

STUDENT

_

ID 

INTEGER NOT

 

NULL

 

 SUBJ

_

ID 

 

INTEGER NOT

 

NULL

 

 MARK   

 

INTEGER

 

 DATA   

 

DATE

,

 

 

CONSTRAINT 

 

EX

_

PR

_

KEY

 

PRIMARY KEY

 

(

EXAM

_

ID

STUDENT

_

ID

));