Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
dbbook(2010.04.15).pdf
Скачиваний:
51
Добавлен:
09.06.2015
Размер:
2.14 Mб
Скачать

Ограничение подтипа записывается как условие, зависящее от имени определяемого подтипа, например:

create

subtype ПочтовыйИндекс

type

decimal(6, 0)

as

ПочтовыйИндекс > 0

В общем случае ограничение подтипа может содержать логические связки not, and, or и быть выражением произвольной сложности. Определенные таким образом подтипы могут использоваться наряду с другими базовыми типами и в программном коде, и при определении типа данных в столбцах таблиц. В визуальной среде разработки базы данных они появляются в списках допустимых типов вместе с другими базовыми типами.

Пользовательский подтип данных может быть удален с помощью оператора

drop subtype имя_подтипа

Пользовательские подтипы данных рекомендуется вводить для подтипов достаточно общего назначения. В противном случае лучше ограничение ввести при объявлении соответствующего атрибута таблицы.

3.2. Первичные и кандидатные ключи

При объявлении схемы базового отношения могут быть заданы объявления нескольких ключей. Ключ схемы базового отношения – это подсхема, состоящая из одного или нескольких атрибутов,

для которых после объявления в схеме базового отношения СУБД будет автоматически поддерживать условие уникальности значений в кортежах отношения. Это означает, что после выполнения операции вставки, обновления или удаления кортежа (обобщающий термин для этих операций – «модификация отношения») условие уникальности не нарушится, поскольку СУБД этого не допустит. (Впрочем, при удалении кортежа условие уникальности нарушиться не может.)

Но как выбрать ключ? Например, в списке учебной группы заведомо уникальными должны быть значения пары атрибутов – номер зачетной книжки и фамилия студента. Однако, если эту пару (№ ЗК, Ф) объявить в качестве ключа, то тогда в список учебной группы окажется возможным ввести два кортежа с одним и тем же № ЗК и разными Ф. То есть окажется, что в группе появились два студента с одним и тем же номером зачетной книжки, чего быть не должно. (Заметим, что обратная ситуация – разные № ЗК и одинаковые Ф – вполне возможна и допустима.) Следовательно, объявляя ключ, следует позаботиться о его неизбыточности. Это означает, что ни для какого строгого подмножества ключа требование уникальности не предъявляется и не должно предъявляться. То есть в рассматриваемом примере ключом следовало бы объявить № ЗК. Требование неизбыточности является семантическим, и проконтролировать его СУБД, естественно, не в состоянии.

Ключ, состоящий из одного атрибута, называется простым. Простым ключом является № ЗК в экзаменационной ведомости по конкретному предмету. Ключ, состоящий из двух или более атрибутов, называется составным. Составным ключом является № корпуса и № аудитории в списке учебных аудиторий.

Суперключом называется надмножество ключа. Суперключ может содержать дополнительные атрибуты, которые не обязательны для уникальной идентификации кортежа в отношении. Суперключ обладает свойством уникальности, но не обязательно обладает свойством неизбыточности. Если суперключ неизбыточен, то он ключ.

При объявлении схемы базового отношения один из ключей может быть объявлен в качестве первичного. Другие ключи называются кандидатными. Различие между первичным и кандидатными

ключами заключается в том, что

1)допустимо объявление не более одного первичного ключа, тогда как кандидатных ключей может быть несколько;

2)атрибуты первичного ключа не могут принимать null-значений, тогда как для кандидатных ключей это ограничение не обязано накладываться (но может).

При выборе первичного ключа следует отдавать предпочтение простым ключам или ключам, составленным из минимального числа атрибутов. Нецелесообразно также использовать ключи с длинными текстовыми значениями, как, например (для блюда) – «Заяц в сметане с картофельными крокетами и салатом из красной капусты». Но как же сослаться на такое блюдо в базе данных ресторана? Просто нужно ввести словарь-справочник c двумя атрибутами, первый из которых – суррогатный ключ типа счетчика, а второй – наименование, объявленное кандидатным ключом.

3.3. Создание базовых отношений

Атрибуты в схеме базового отношения разделяются на базовые (хранимые) и виртуальные (вычисляемые).

Оператор создания базового отношения в записи на псевдокоде включает объявления базовых и виртуальных атрибутов, объявление ограничения кортежа и объявления первичного, кандидатных и внешних ключей:

create table имя_базового_отношения {имя_базового_атрибута

тип_значений_атрибута

[check(ограничение_значений_атрибута)] [null | not null] [default(значение_по_умолчанию)]

},..

[имя_виртуального_атрибута as(формула_вычисления) ]...

[check(ограничение_кортежа)] [primary key(имя_атрибута,..)] [candidate key(имя_атрибута,..)]...

[foreign key(имя_атрибута,..)

references имя_ссылочного_отношения(имя_атрибута,..) [on update {restrict | cascade | set null}]

[on delete {restrict | cascade | set null}] ]...

Примечание. Первичный ключ может быть только один. Кандидатных и внешних ключей может быть много

При объявлении базового атрибута в общем случае задаются его тип, ограничение значений, флажок допустимости null-значений и значение по умолчанию. Тип и ограничение значений атрибута определяют его домен. Ограничение значений атрибута записывается как условие (в общем случае с логическими связками not, and, or), зависящее от имени атрибута, например,

create table ...

Курс integer

check(1 <= Курс and Курс <= 5)

...

Флажок допустимости null-значений разрешает или запрещает появление null-значений в значениях атрибута. Значение по умолчанию используется при вставке кортежа в отношение, если в операторе вставки значение атрибута явно не задано. Значение по умолчанию может быть и null- значением, если только null-значения для атрибута объявлены допустимыми.

Определение виртуального атрибута заключается в задании формулы его вычисления через другие базовые атрибуты, например:

create table ...

ВесКг ...

[ЦенаРуб/Кг] ...

...

СтоимостьРуб as(ВесКг * [ЦенаРуб/Кг])

...

Ограничение кортежа записывается как условие (в общем случае с логическими связками not, and, or), зависящее от имен нескольких базовых атрибутов, например:

create table ...

minВесКг ...

maxВесКг ...

...

check(0 < minВесКг and minВесКг < maxВесКг)

...

Применение ограничения к кортежу сводится к подстановке значений атрибутов кортежа вместо имен атрибутов.

Далее могут быть объявлены первичный, кандидатные и внешние ключи.

Подсхема базового отношения, которой в другом (или том же самом) базовом отношении соответствует первичный или кандидатный ключ, в контексте указанного отношения называется внешним ключом. Внешние ключи представляют механизм ссылок кортежей одних отношений на кортежи других отношений (рис. 3.1).

Рис. 3.1.: Внешние ключи как механизм ссылок

Объявления первичного и кандидатных ключей навязывают схеме базового отношения соответствующие ограничения уникальности. Объявления внешних ключей связаны с навязыванием так называемых ограничений ссылочной целостности (о них позже).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]