Корпоративные базы данных - статьи




Глава 4.1. Ограничения



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

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

Следующий пример содержит именованное ограничение, связывающее значения в двух
столбцах:

CREATE TABLE dept (

dname char(10),

budget money,

expenses money,

CONSTRAINT check_amount CHECK (budget > 0 and expenses
);

{Бюджет должен быть положительным, а расходы не должны выходить за рамки
бюджета}

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

Приведем пример ссылочного ограничения:

CREATE TABLE emp (

ename char(10),

edept char(10) references dept(dname)

);

{Ни один работник не должен числиться в неизвестном отделе}

Ограничения всех видов накладываются владельцем таблицы и влияют на исход последующих
операций с данными. Перед завершением выполнения SQL-оператора производится проверка
имеющихся ограничений. При обнаружении нарушений СУБД сигнализирует о ненормальном
завершении и аннулирует внесенные оператором изменения.

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

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

CREATE TABLE dept (

name char(10) NOT NULL,

location char(20),

CONSTRAINT dept_unique UNIQUE(name)

);



CREATE TABLE emp (

name char(10),



Содержание  Назад  Вперед