(pub_id CHAR(3) NOT NULL,
pub_name VARCHAR(20) NOT NULL,
city VARCHAR(15) NOT NULL,
state CHAR(3) NULL,
country VARCHAR(15) NOT NULL,
CONSRAINT publisher_pk PRIMERY KEY (pub_id) );
Для задания сложного ключа следует перечислить список столбцов, образующих ключ.
CREATE TABLE title_authors
(title_id CHAR(3) NOT NULL,
au_id CHAR(3) NOT NULL,
au_order SMALLINT NOT NULL,
royalty_share DECIMAL(5,2) DEFAULT 1.0 NOT NULL);
CONSRAINT title_authors_pk PRIMERY KEY (title_id, au_id) );
Внешний ключ применяется для связи таблиц, его значения связаны со значениями в другой таблице или ссылаются на них. Внешний ключ создает связь с первичным ключом (или группой значений) в родительской таблице, его значения должны соответствовать значениям в родительской таблице. Это свойство называется ссылочной целостностью. Внешний ключ может принимать значение NULL. В таблице может быть несколько внешних ключей либо не быть ни одного.
Внешний ключ задается предложением FOREING KEY или REFERENCES. Названия столбца внешнего ключа может не совпадать с родительским. Внешний ключ необязательно ссылается на столбец первичного ключа родительской таблицы. Он может ссылаться на столбец, содержащий уникальные значения. Если не задано ограничение на столбец внешнего ключа, будет задано ограничение NULL (можно задавать и ограничение NOT NULL).
Внешние ключи препятствуют некорректных операциям по удалению или изменению данных за счет контроля ссылочной целостности. СУБД препятствует созданию строк, не имеющих соответствия в родительской таблице. Выполняются следующие проверки во время исполнения команд INSERT, UPDATE, DELETE:
- при добавлении строки – наличие соответствия в родительской таблице значению внешнего ключа новой строки (при отсутствии соответствия строка не добавляется);
- при изменении – проверка соответствия нового значения внешнего ключа значению в родительской таблице (при отсутствии соответствия строка не изменяется);
- при удалении строки подчиненной таблицы проверка целостности не выполняется;
- при добавлении строки в родительскую таблицу проверка не выполняется;
- при изменении строки родительской таблицы – проверка соответствия нового значения родительской таблицы значению внешнего ключа (при наличии соответствия изменение не выполняется);
- при удалении строки родительской таблицы – проверка наличия в подчиненной таблицу внешнего ключа, соответствующего удаляемому значению (при наличии соответствия удаление не выполняется).
Внешний ключ можно задать несколькими способами.
1) CREATE TABLE title
(title_id CHAR(3) NOT NULL PRIMARY KEY,
title_name VARCHAR(40) NOT NULL,
type VARCHAR(10) NOT NULL,
pub_id CHAR(3) NOT NULL REFERENCES publishers(pub_id),
pages INTEGER NULL,
price DECIMAL(5,2) NULL,
sales INTEGER NULL,
pubdate DATE NULL,
contract SMALLINT NOT NULL);
Установлена связь с таблицей publishers.
2) CREATE TABLE royalties
(title_id CHAR(3) NOT NULL,
advance DECIMAL(9,2) NULL,
royalty_rate DECIMAL(5,2) NULL,
CONSRAINT royalties_pk PRIMARY KEY (title_id),
CONSRAINT royalties_ title_id_fk FOREING KEY (title_id) REFERENCES title(title_id)
);
Столбец title_id является и первичным и внешним ключом, связь установлен с таблицей title.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.