13. Мощность связей. Типы связей. Типы ключей и их назначение при моделировании баз данных. Правила ссылочной целостности.
Связь является логическим отношением между сущностями.
Сами сущности могут быть «зависимые» и «независимые», а связи «идентифицирующими» – между «независимой» и «зависимой» сущностями или «не идентифицирующими», дочерняя сущность остается независимой. В случае если потомок связан «идентифицирующей» связью, дочерняя сущность «зависит» от родительской, то каждое значение родительской сущности связано с одним или более значениями дочерней сущности, и отображает связи, которые не могут быть без родительской сущности. В этом случае, любое значение дочерней сущности идентифицируется с помощью некоторого значения родительской сущности и атрибуты первичного ключа родительской сущности мигрируют в атрибуты первичного ключа дочерней сущности.
Если же связи между двумя сущностями не могут быть идентифицированы, но существуют, сущности «независимые», то любое значение дочерней сущности однозначно определяется без значения родительской сущности, и атрибуты первичного ключа родительской сущности мигрируют в состав не ключевых атрибутов дочерней сущности. В языке IDEF1x, «независимые» сущности изображаются прямоугольником с острыми углами, а «зависимые» прямоугольником с овальными углами, сами связи изображаются прямой линией с точкой, смотрите рис. 5.1. (прерывистой – «не идентифицирующие» или сплошной – «идентифицирующие»).
Мощность связей
Спецификация мощности связей (отношений) служит для обозначения количества экземпляров (значений) дочерних сущностей связанных с соответствующим значением родительской сущности.
Ключи
Как уже отмечалось выше, каждый экземпляр сущности должен быть уникален, и каждое значение атрибутов должно отличаться одно от другого. Для идентификации каждого экземпляра сущности используется первичный ключ – PK (Primary Key).
Рассмотрение атрибутов – кандидатов для формирования первичного ключа и его выбор (а он может быть только один для таблицы) требуют знания данных предметной области. Существуют строгие правила, использующиеся при выборе первичного ключа. Атрибут (атрибуты) первичного ключа должны:
- уникально идентифицировать значение сущности;
- не должны включать значение NULL;
- не должны изменяться через промежуток времени. Всякий элемент сущности берет свою идентичность от ключа. Если ключ поменяется, то это уже другой элемент;
- должен быть как можно более коротким, что облегчать индексацию и восстановление данных. Если нужно использовать ключ, который является комбинацией ключей из других сущностей, то каждая часть ключа должна придерживаться этих правил.
Связи между сущностями реализуются с помощью внешних ключей – FK (Foreign Key), которые образуются из PK путем их миграции из родительской сущности в дочернюю сущность. Сущности и их связи, ключи PK и FK – это основные элементы модели данных. Кроме ключей PK и FK – при построении модели данных, используются альтернативные и инверсные ключи – AK (Alternate Key) и IK (Inversion Key). Альтернативные ключи, так же как и PK, обеспечивают уникальный доступ к значениям сущности, но по другим наборам атрибутов, а инверсные ключи, обеспечивают доступ к некоторому набору значений сущности, имеющего общие характеристики.
Внутренние и внешние ключи
Одно из важнейших понятий, используемых при работе с базами данных, – это первичные ключи, с их помощью идентифицируются значения сущности (записи в таблице). В качестве первичного ключа может использоваться суррогатный или естественный ключ. Естественный ключ – это атрибут или набор атрибутов, которые однозначно идентифицируют значение сущности (записи таблицы) и имеют некий физический смысл вне БД (номер вагона, номер станции, номер контейнера и т.д.). Данный метод построения модели БД основан на естественной идентификации сущностей. Уникальность записи может достигаться не только значением уникального кода внешнего объекта, но, например, и датой вставки записи в таблицу (первичный ключ PK – состоит из значения кода объекта и даты вставки записи в БД), см. примеры диаграмм приведенные выше.
Ссылочная целостность
Одной из главных задач при эксплуатации БД, является задача поддержания правил ссылочной целостности, которые были определены при проектировании. Эти правила отражают заданные связи между сущностями и порядок выполнения операций вставка, замена и удаление. Если эти правила не будут соблюдены, то БД быстро деградирует, и не будет отражать те бизнес – правила, которые были заложены при ее проектировании. Правила контроля и выполнения этих операций может быть возложена на специально разработанные пользователем программы, но данное решение крайне не надежное и трудоемкое для его реализации. Задача поддержания правил ссылочной целостности обычно реализуется автоматически при генерации схемы БД на основе режимов реализации связей (отношений) с помощью триггеров, обеспечивающих ссылочную целостность. Данные триггера представляют собой программы, выполняемые всякий раз при выполнении операций вставка, замена и удаление. Таким образом, при проектировании автоматически обеспечивается правильная эксплуатация БД.