Изменение таблиц. Добавление строки. Копирование строк из таблицы. Команда UPDATE, страница 4

Задание. Для таблицы title_authors определите два внешних ключа: идентификаторы названия и автора. Установите связи с таблицами АВТОРЫ и ИЗДАНИЯ. Определите первичный ключ.

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

Примечание. Внешний ключ может ссылаться на столбец в той же таблице (самообъединение).

Примечание. Предложение ON UPDATE действие, задает действие, которое выполняется в случае обновления ключа, который связан с ключами в других таблицах. Действие задается одной из фраз:

- CASCADE – замена значений внешних ключей в соответствии с новым значением первичного ключа;

- SET NULL – замена значений внешних ключей на NULL;

- SET DEFAULT – замена значений внешних ключей значениями по умолчанию;

- NO ACTION – выдает ошибку для внешнего ключа (по умолчанию).

Примечание. Предложение ON DELETE действие, задает действие, которое выполняется в случае обновления ключа, который связан с ключами в других таблицах. Действие задается одной из фраз:

- CASCADE – удаление строк, которые содержат значения внешних ключей, соответствующие удаленному первичному ключу;

- SET NULL – замена значений внешних ключей на NULL;

- SET DEFAULT – замена значений внешних ключей значениями по умолчанию;

- NO ACTION – выдает ошибку для внешнего ключа (по умолчанию).

Ограничение UNIQUE

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

CREATE TABLE authors

(au_id              CHAR(3)                          NOT NULL PRIMARY KEY,

au_fname         VARCHAR(15)              NOT NULL,

au_lname         VARCHAR(15)               NOT NULL,

phone              VARCHAR(12)               NULL,

address           VARCHAR(20)                NULL,

city                 VARCHAR(15)                NULL,

state                CHAR(2)                          NULL,

zip                  CHAR(5)                           NULL,

contract            SMALLINT                  NOT NULL

CONSRAINT royalties_ title_id_fk FOREING KEY (title_id) REFERENCES title(title_id));

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

Ограничение значений

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

В случае нескольких ограничений следует убедиться, что они не противоречат друг другу.

CREATE TABLE title

(title_id              CHAR(3)                         NOT NULL PRIMARY KEY,

title_name         VARCHAR(40)              NOT NULL CHECH (title_name <>’ ‘),

type                  VARCHAR(10)               NOT NULL

CONSRAINT type_chk CHECK (type in (‘biology’, ‘children’, ‘computer’, ‘history’, ‘psychology’),

pub_id              CHAR(3)                         NOT NULL REFERENCES publishers(pub_id),

pages                INTEGER                      NULL CHECH (pages >0),

price                 DECIMAL(5,2)             NULL CHECH (price >0.00 AND price<150.00),

sales                 INTEGER                      NULL CHECH (sales >=0),

pubdate            DATE                           NULL,

contract            SMALLINT                  NOT NULL)

CONSRAINT t_id_chk CHECK (Mid(title_id,1,1) = ‘t’ AND CInt(Mid(title_id,2,2) BETWEEN 0 AND 99),

;

Некоторые СУБД не поддерживают ограничения столбца, но контролируют ограничение таблицы.