Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы БД.doc
Скачиваний:
149
Добавлен:
18.05.2015
Размер:
5.33 Mб
Скачать

Ограничения уникальности (Unique)

Используются для гарантии уникальности одного или нескольких полей записи. Единственное отличие от ограничения первичного ключа – возможность задания для таблицы нескольких таких ограничений.

Пример задания ограничения уникальности:

ALTER TABLE Employee

ADD CONSTRAINT Unique_Phone UNIQUE (Phone);

Ограничения внешнего ключа (Foreignkeys)

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

При определении внешнего ключа автоматически генерируется индекс.

Пример задания ограничения внешнего ключа при создании таблицы:

CREATE TABLE REFREG

(

CODCTR INTEGER NOT NULL,

CODREG INTEGER NOT NULL,

NAMEREG CHAR(40),

CENTER CHAR(25),

DESCR BLOB,

CONSTRAINT PK_REFREG PRIMARY KEY (CODCTR, CODREG),

CONSTRAINT FK_REFREG

FOREIGN KEY (CODCTR) REFERENCES REFCTR (CODCTR)

ON DELETE CASCADE

ON UPDATE CASCADE

);

Пример задания ограничения внешнего ключа при изменении таблицы:

ALTER TABLE Book

ADD CONSTRAINT FK_Book

FOREIGN KEY (B_PubNo) REFERENCES Publisher (B_NO);

В отличие от полей первичных ключей, в полях, которые являются внешним ключом, могут допускаться пустые значения. Эта возможность необходима для разрешения взаимных ссылок и возможности хранить в таблице иерархические структуры, когда корневые узлы содержат NULL.

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

Для внешнего ключа система также создает индекс.

Необязательные фразы ON DELETE и ON UPDATE задают, что должно выполняться, если удаля­ется или обновляется соответствующая строка родительской таблицы. Можно указать один из следующих вариантов:

- NO ACTION — ничего не происходит. Это вариант по умолчанию, т. е., если вы для внешнего ключа не укажете предложение ON DELETE и ON UPDATE, никаких дей­ствий выполняться не будет. Это хорошее основание получать исключе­ния базы данных практически на пустом месте. Вам самим придется как-то приводить в соответствие состояние строк дочерней таблицы после удаления (а точнее, перед удалением) строки родительской таблицы;

- CASCADE — все строки дочерней таблицы, содержащие внешние ключи, имеющие те же значения, что и первичный (уникальный) ключ удаленной или измененной строки родительской таблицы, будут автоматически удалены или изменены в базе дан­ных. Чаще всего при проектировании баз данных используется именно этот вариант;

- SET DEFAULT— значения столбцов внешнего ключа в соответствующих строках дочерней таблицы устанавливаются в заданные для них значения по умолчанию;

- SET NULL — значения столбцов внешнего ключа в соответствующих стро­ках дочерней таблицы устанавливаются в null. Тоже не самое плохое ре­шение, хотя, скорее всего потом нужно будет как-то наводить порядок в базе данных.

Ограничения атрибутов (Checks)

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

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

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

Пример ограничения атрибутов, которое гарантирует, что поле "Num" будет иметь значение от 0 до 4:

ALTER TABLE Property

ADD CONSTRAINT

Check_Invalid_Number CHECK (Num >= 0 AND Num <= 4);

Ограничения атрибутов реализованы при помощи системных триггеров.