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

Оператор check

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

Пример ограничения первого типа можно видеть в листинге 2, где столбец SalesPrice (продажная цена) должен иметь значение, превышающее 1000, но меньшее или равное 200 000.

Листинг 2

CONSTRAINT SalesPriceRange

CHECK ((SalesPrice > 1000) AND (SalesPrice <= 200000))

CONSTRAINT BirthValuesCheck

CHECK (BirthDate < DeceasedDate)

Ограничение второго типа имеет место в листинге 3. Здесь множество значений столбца Nationality (национальность) ограничивается только теми значениями, которые перечислены в скобках.

Листинг 3

CONSTRAINT NationalityValues

CHECK (Nationality IN

('Canadian', 'English', 'French', 'German',

'Mexican', 'Russian', 'Spanish', 'US'));

CONSTRAINT ValidBirthYear

CHECK (BirthDate LIKE '[l-2][0-9][0-9][0-9]');

    1. Определение первичных и альтернативных ключей с помощью оператора alter

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

Листинг 4. Добавление ограничений с помощью оператора ALTER

CREATE TABLE ПРОЕКТ

(ИдПроекта Integer Primary Key,

Название Char(25) Unique Not Null,

Отдел VarChar(l00) Null,

МаксТрудозатраты Numeric(6,1) Default 100);

CREATE TABLE СОТРУДНИК

(ТабельныйНомер Integer Not Null,

Имя Char(25)

Телефон Char(8),

Отдел VarChar(100));

ALTER TABLE СОТРУДНИК

ADD CONSTRAINT СотрудникПК PRIMARY KEY (ТабельныйНомер);

CREATE TABLE НАЗНАЧЕНИЕ

(ИдПроекта Integer Not Null,

НомерСотрудника Integer Not Null,

ФактТрудозатраты Numeric(5,2) Default 10,

CONSTRAINT НазначениеПК PRIMARY KEY (ИдПроекта, НомерСотрудника));

ALTER TABLE НАЗНАЧЕНИЕ

ADD CONSTRAINT СотрудникВК

FOREIGN KEY (НомерСотрудника) REFERENCES СОТРУДНИК(ТабельныйНомер)

ON UPDATE CASCADE

ON DELETE NO ACTION;

ALTER TABLE НАЗНАЧЕНИЕ

ADD CONSTRAINT ПроектВК

FOREIGN KEY (ИдПроекта) REFERENCES ПРОЕКТ(ИдПроекта)

ON UPDATE CASCADE

ON DELETE CASCADE;

Ограничения можно определять в теле оператора CREATE TABLE или добавлять после создания таблицы при помощи оператора ALTER. Некоторые формы определения ограничений позволяют разработчику давать ограничениям имена, а некоторые — нет. В последнем случае имя ограничению присваивает СУБД, и, как правило, это имя является длинным и не особенно осмысленным. Разработчику рекомендуется использовать те формы операторов CREATE TABLE и ALTER, которые всегда позволяют присваивать имена ограничениям. Кроме того, по возможности, ограничения будут определяться внутри оператора CREATE TABLE.

Также обратите внимание, что композитный ключ определяется путем перечисления имен атрибутов в скобках. Первичный ключ таблицы НАЗНАЧЕНИЕ представляет собой сочетание {ИдПроекта, НомерСотрудника}. Композитный первичный ключ не может быть определен с помощью того метода, который мы использовали для таблицы ПРОЕКТ.

Посредством оператора ALTER можно также определять внешние ключи (см. листинг 4). В предпоследнем операторе определено ограничение СотрудникВК. Это ограничение указывает, что столбец НомерСотрудника является внешним ключом, который указывает на столбец СОТРУДНИК.ТабельныйНомер. Имена первичного и внешнего ключей не обязательно должны совпадать.

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

Процедуры обеспечения ссылочной целостности определяются с помощью выражений ON UPDATE (при обновлении) и ON DELETE (при удалении). Например, Для ограничения СотрудникВК в листинге 4 предписывается при обновлении родителя выполнить каскадное обновление (ON UPDATE CASCADE), а при удалении — не предпринимать никаких действий (ON DELETE NO ACTION). Последнее указывать не обязательно, поскольку по умолчанию задается как раз NO ACTION. Но режим существует и его можно использовать для целей документирования.

Листинг 5. Еще один способ определения ограничений

CREATE TABLE ПРОЕКТ

(ИдПроекта Integer Primary Key,

Название Char(25) Unique Not Null,

Отдел VarChar(l00) Null,

МаксТрудозатраты Numeric(6,1) Default 100);

CREATE TABLE СОТРУДНИК

(ТабельныйНомер Integer Not Null,

Имя Char(25),

Телефон Char(8),

Отдел VarChar(100),

CONSTRANT СотрудникПК Primary Key(ТабельныйНомер));

CREATE TABLE НАЗНАЧЕНИЕ

(ИдПроекта Integer Not Null,

FOREIGN KEY REFERENCES ПРОЕКТ(ИдПроекта),

НомерСотрудника Integer Not Null,

ФактТрудозатраты Numeric(5,2) Default 10,

CONSTRAINT НазначениеПК PRIMARY KEY (ИдПроекта, НомерСотрудника)

FOREIGN KEY (НомерСотрудника) REFERENCES

СОТРУДНИК(ТабельныйНомер));

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