Предложения 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;