Предложения PRIMARY KEY и FOREIGN KEY

Кроме определений столбцов таблицы, в инструкции CREATE TABLE указывается информация о первичном ключе таблицы и ее связях с другими таблицами базы данных. Эта информация содержится в предложениях PRIMARY KEY и FOREIGN KEY.

Предложением PRIMARY KEY задается столбец или столбцы, которые образуют первичный ключ и служат в качестве уникального идентификатора строк таблицы. СУБД автоматически следит за тем, чтобы первичный ключ был уникален. Кроме того в определениях столбцов первичного ключа должно быть указано, что они не могут содержать значения NULL (имеют ограничения NOT NULL).

В предложении FOREIGN KEY задается внешний ключ таблицы и определяется связь, которую он создает для нее с другой таблицей (таблицей-предком). Итак, внешний ключ строится в дочерней таблице для соединения родительской и дочерних таблиц базы данных. В предложении FOREIGN KEY содержатся (или могут содержаться) следующие определения:

– CONSTRAINT определяет необязательное имя отношения; оно не используется в инструкциях SQL, но может появляться в сообщениях об ошибках и потребуется в дальнейшем, если будет необходимо удалить внешний ключ;

– список столбцов внешнего ключа − определяет столбцы дочерней таблицы, по которым строится внешний ключ; столбец или столбцы создаваемой таблицы, которые образуют внешний ключ;

– имя таблицы-предка − определяет таблицу, в которой описан первичный ключ. На этот ключ должен ссылаться внешний ключ дочерней таблицы для обеспечения ссылочной целостности; таблица, связь с которой создает внешний ключ; это таблица-предок, а определяемая таблица в данном отношении является потомком;

– список столбцов таблицы-предка − необязателен при ссылке на первичный ключ родительской таблицы;

– ON DELETE или ON UPDATE − определяют способы изменения подчиненных записей дочерней таблицы при удалении или изменении поля связи в записи родительской таблицы. Перечислим эти способы:

² NO ACTION − запрет удаления/изменения родительской записи при наличии подчиненных записей в дочерней таблице;

² CASCADE − для оператора ON DELETE: при удалении записи родительской таблицы происходит удаление подчиненных записей в дочерней таблице; для оператора ON UPDATE: при изменении поля связи в записи родительской таблицы происходит изменение на то же значение поля внешнего ключа у всех подчиненных записей в дочерней таблице;

² SET DEFAULT − в поле внешнего ключа у записей дочерней таблицы заносится значение этого поля по умолчанию, указанное при определении поля (параметр DEFAULT); если это значение отсутствует в первичном ключе, инициируется исключение;

² SET NULL − в поле внешнего ключа заносится значение NULL.

Ниже приводится расширенная инструкция CREATE TABLE для таблицы ZAKAZY, в которую входит определение первичного ключа и трех внешних ключей, имеющихся в таблице:

CREATE TABLE ZAKAZY

(ID_ORDER INTEGER NOT NULL,

DATE_ORDER DATE NOT NULL,

ID_CLN INTEGER NOT NULL,

ID_SLZH INTEGER,

ID_MFR CHAR(3) NOT NULL,

ID_PRD CHAR(5) NOT NULL,

COUNT INTEGER NOT NULL,

PRICE_ALL MONEY NOT NULL,

PRIMARY KEY (ID_ORDER),

CONSTRAINT PLACEDBY

FOREIGN KEY (ID_CLN) REFERENCES CLIENTY ON DELETE CASCADE,

CONSTRAINT TAKENBY

FOREIGN KEY (ID_SLZH) REFERENCES SLUZHASCHIE ON DELETE CASCADE,

CONSTRAINT PLACEDBY

FOREIGN KEY (ID_MFR, ID_PRD) REFERENCES TOVARY ON DELETE CASCADE

)

На Рис. 3.1 изображены три созданные этой инструкцией связи с присвоенными им именами. В общем случае связи следует давать имя, поскольку оно помогает лучше понять, какая именно связь создана внешним ключом. Например, каждый заказ делается клиентом, идентификатор которого находится в столбце CUST таблицы ZAKAZY. Связь с этим столбцом получила имя PLACEDBY.

Рис. 3.1 - Имена связей в инструкции CREATE TABLE

Когда СУБД выполняет инструкцию CREATE TABLE, она сравнивает определение каждого внешнего ключа с определениями связанных таблиц. СУБД проверяет, соответствуют ли друг другу внешний и первичный ключи в связанных таблицах как по числу столбцов, так и по типу данных. Для того чтобы такая проверка была возможна, связанная таблица уже должна быть определена.

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








Дата добавления: 2015-02-03; просмотров: 2433;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.