ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.04.2021
Просмотров: 1532
Скачиваний: 4
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
,
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),
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
.
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
.
Перв ич ные
ключ и
имеют
след ующ ие
особенности
:
•
та блица
может
сод ержа ть
только
од ин
п ер в ич ный
ключ
;
•
в нешние
ключ и
п о
умолч а нию
ссыла ются
на
п ерв ич ный
ключ
та блицы
;
•
п ерв ич ный
ключ
яв ляется
ид ентифика тор ом
строк
та блицы
(
строки
,
од на ко
,
могут
ид ентифицир ов а ться
и
д ругими
сп особа ми
).
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
));