Информационные системы
Шрифт:
• Первичный ключ может быть также задан в конце описания таблицы после определений всех полей. Для этого также используется ключевая фраза PRIMARY KEY, после которой в круглых скобках указывается имя поля, составляющего первичный ключ:
Второй
Примечание.
При использовании составного первичного ключа ограничение NOT NULL должно быть задано для всех полей, входящих в его состав.
Ограничение UNIQUE
Ограничение UNIQUE похоже на ограничение первичного ключа, так как при наличии этого ограничения для некоторого поля все содержащиеся в нем значения должны быть уникальными. Однако в отличие от первичного ключа ограничение UNIQUE допускает наличие в поле пустых значений (если, конечно, для этого поля не установлено ограничение NOT NULL).
Ограничение UNIQUE задается при создании таблицы с помощью ключевого слова UNIQUE, указываемого при описании поля:
Можно также задать ограничение UNIQUE не для одного поля, а для группы полей. Объявление группы полей уникальной – не то же самое, что объявление уникальными нескольких отдельных полей, так как уникальной обязана быть именно комбинация значений, а не просто индивидуальные значения. То есть значение каждого поля, входящего в группу, не обязательно должно быть уникальным, а комбинация значений полей всегда должна быть уникальной.
Ограничение UNIQUE для группы полей, так же как и составной первичных ключ, задается после описания всех полей таблицы:
Ограничение внешнего ключа
Ограничение внешнего ключа лежит в основе поддержания ссылочной целостности
Типы полей внешнего и родительского ключей обязательно должны быть идентичными. А вот имена полей могут быть разными. Однако во избежание путаницы желательно и имена полей для внешнего и родительского ключей делать одинаковыми.
Внешний ключ не обязательно должен состоять только из одного поля. Подобно первичному ключу внешний ключ может состоять из любого числа полей, которые обрабатываются как единый объект. Поля родительского ключа, на который ссылается составной внешний ключ, должны следовать в том же порядке, что и во внешнем ключе.
Когда поле таблицы является внешним ключом, оно определенным образом связано с таблицей, на которую этот ключ ссылается. Это фактически означает, что каждое значение во внешнем ключе непосредственно привязано к значению в родительском ключе.
В качестве иллюстрации использования ограничения внешнего ключа возьмем пример из предыдущей главы – базу данных по учету сотрудников некоторой организации (рис. 5.1). Эта база данных состоит из трех таблиц:
• СОТРУДНИКИ – содержит информацию о профессиональных данных сотрудников;
• ФИЗИЧЕСКИЕ ЛИЦА – содержит информацию о личных данных сотрудников;
• ДОЛЖНОСТИ – содержит информацию о должностях организации.
Основной таблицей в этой базе данных является таблица СОТРУДНИКИ, которая ссылается на две другие таблицы и, соответственно, должна иметь два внешних ключа. В качестве родительских ключей в таблицах ФИЗИЧЕСКИЕ ЛИЦА и ДОЛЖНОСТИ используются первичные ключи.
Ограничение внешнего ключа (FOREIGN KEY) может быть задано либо в операторе CREATE TABLE, либо в операторе ALTER TABLE. Синтаксис ограничения FOREIGN KEY имеет следующий вид:
Рис. 5.1. База данных сотрудников организации.
Первый список полей – это список из одного или нескольких полей таблицы, разделенных запятыми. Второй список полей – это список полей, которые будут составлять родительский ключ. Списки полей, указываемые в качестве внешнего и родительского ключей, должны быть совместимы:
• число полей должно быть одинаковым;
• порядок следования полей в списках должен совпадать, причем совпадение определяется не именами полей, которые могут быть разными, а типами данных и размером полей.
Рассмотрим пример создания базы данных со связанными таблицами: