<На страницу назад | На страницу вперед >
Семантика внешних ключей
Если между двумя сущностями имеется специфическое отношение связи или категоризации, то атрибуты, входящие в первичный ключ родительской или общей сущности, наследуются в качестве атрибутов сущностью-потомком или категорией сущностью соответственно. Эти наследуемые атрибуты называются внешними ключами. Например, если существует отношение между сущностью ПРОЕКТ как родителем и сущностью ЗАДАНИЕ как потомком, то атрибуты первичного ключа сущности ПРОЕКТ будут наследуемыми атрибутами сущности ЗАДАНИЕ. Например, если атрибут ПРОЕКТ_ID являлся первичным ключом сущности ПРОЕКТ, то ПРОЕКТ_ID будет также наследуемым атрибутом или внешним ключом сущности ЗАДАНИЕ.
Наследуемый атрибут может использоваться в сущности в качестве. части или целого первичного ключа, альтернативного ключа или неключевого атрибута. Если все атрибуты первичных ключей сущности-родителя наследуются в качесте части первичного ключа сущности-потомка, то отношение, через которое эти атрибуты были унаследованы; называется идентифицирующим отношением. Если какой-нибудь из наследуемых атрибутов не является частью первичного ключа, то отношение называется неидентифицирующим отношением (см. раздел 3.2). Например, если задания имеют номера, уникальные только в пределах своего проекта, то для определения первичного ключа ЗАДАНИЯ необходимо соединить наследуемый атрибут ПРОЕКТ_ID с собственным атрибутом НОМЕР_ЗАДАНИЯ. Сущность ПРОЕКТ будет обладать идентифицирующим отношением с сущностью ЗАДАНИЕ. Если, с другой стороны, атрибут НОМЕР_ЗАДАНИЯ всегда уникален (даже для разных проектов), то наследуемый атрибут ПРОЕКТ_ID будет неключевым атрибутом сущности ЗАДАНИЕ. В этом случае сущность ПРОЕКТ будет обладать неидентифицирующим отношением с сущностью ЗАДАНИЕ.
В отношении категоризации и общая сущность, и сущности-категории изображают один и тот же предмет реального мира. Поэтому для всех сущностей-категорий первичный ключ наследуется через отношение категоризации из первичного ключа общей сущности. Например, ШТАТНЫЙ_СЛУЖАЩИЙ и СЛУЖАЩИЙ_ПОЧАСОВИК являются сущностями-категориями, а СЛУЖАЩИЙ является общей сущностью. Если атрибут НОМЕР_СЛУЖАЩЕГО является первичным ключом для сущности СЛУЖАЩИЙ, то он будет также первичным ключом для сущностей ШТАТНЫЙ_СЛУЖАЩИЙ и СЛУЖАЩИЙ_ПОЧАСОВИК.
В некоторых случаях сущность-потомок может иметь несколько отношений с одной и той же сущностью-родителем. Первичный ключ сущности-родителя появится для каждого отношения в качестве наследуемых атрибутов в сущности-потомке. Для данного экземпляра сущности-потомка значения наследуемых атрибутов могут быть различными для различных отношений, т.е. может быть ссылка на два разных экземпляра сущности-родителя. Например, спецификация некоторого устройства может изображаться двумя сущностями: ДЕТАЛЬ и УЗЕЛ. Сущность ДЕТАЛЬ в качестве сущности-родителя обладает двойным отношением с сущностью УЗЕЛ. Одна и та же деталь может служить как компонентой, из которой производится узел (т.е. деталь может быть компонентой одного или многих узлов), так и иногда быть узлом, в который собираются компоненты (т.е. деталь может быть узлом для одной или более деталей-компонент). Если НОМЕР-ДЕТАЛИ является первичным ключом для сущности ДЕТАЛЬ, то НОМЕР-ДЕТАЛИ дважды появляется в сущности УЗЕЛ в качестве наследуемого атрибута.
Когда отдельный атрибут наследуется более одного раза, для каждого случая должно назначаться имя роли. В предыдущем примере имена ролей НОМЕР_КОМПОНЕНТЫ и НОМЕР_УЗЛА могут назначаться для различения двух наследуемых атрибутов НОМЕР_ДЕТАЛИ. Имена ролей могут использоваться и при единственном появлении наследуемого атрибута для более точного выражения его смысла в контексте сущности-потомка, но это не является обязательным.
Синтаксис внешних ключей
Внешний ключ изображается с помощью помещения внутрь блока сущности имен наследуемых атрибутов, после которых следуют буквы FK в скобках (FK), см рис.3-9.
Рис. 3-9. Примеры синтаксиса внешних ключей
Если наследуемый атрибут принадлежит первичному ключу сущности-потомка, то он помещается выше горизонтальной линии, а сущность изображается с закругленными углами для указания на то, что идентификатор (первичный ключ) сущности зависит от атрибута, наследуемого через отношение. Если наследуемый атрибут не принадлежит первичному ключу сущности-потомка, то он изображается ниже линии. Наследуемые атрибуты могут быть также частью альтернативного ключа.
Имена ролей, как и имена атрибутов, являются грамматическими оборотами существительного. За именем роли следует имя наследуемого атрибута, отделенное точкой (см.рис.3-10).
Рис. 3-10. Синтаксис имени роли
Правила внешних ключей