Модель данных, основанная на ключах
Модель данных, основанная на ключах — это логическая модель, включающая описание всех сущностей и ключевых атрибутов, которые соответствуют предметной области.
Целью этой модели является дальнейшая детализация модели сущность-связь и идентификация сущностей путем выбора ключевых атрибутов (ключей).
Для идентификации конкретного экземпляра сущности вам необходимо определить первичный ключ. Первичный ключ — это набор атрибутов, значение которых однозначно определяют каждый экземпляров сущности.
Другими словами, первичный ключ может быть как одним атрибутом, так и состоять из нескольких. Первичный ключ, состоящий более чем из одного атрибута, называется составным ключом.
Первичный ключ должен быть статическим (static) и неразрушаемым (non-volatile). Под статичностью и неразрушаемостью подразумевается, что первичный ключ не должен подвергаться изменениям. Изменения первичного ключа трудно сопровождать, что часто приводит к весьма дорогостоящим переделкам, поэтому лучшим считается вариант, когда первичный ключ абсолютно не зависит от экземпляров сущности.
Для нахождения первичного ключа требуется проанализировать данные, определяющие сущность. Как правило, первичные ключи для стержневых сущностей определяются во время рабочих сессий и обсуждений. Эксперты предметной области и пользователи – хорошие источники информации для выбора потенциальных первичных ключей. Примеры данных тоже обеспечивают ценный вклад при выборе первичного ключа.
Начинайте процесс выявления первичных ключей с определения всех потенциально ключевых атрибутов, называемых кандидатами в ключи. Кандидатом в ключи может быть и один атрибут, и комбинация нескольких атрибутов. Если кандидатов в ключи не существует, или кандидатом является составной ключ, который слишком велик и громоздок, рассмотрите возможность использования искусственного уникального идентификатора. Ключи, заимствованные из родительской сущности, называются внешними ключами. Внешние ключи будут рассматриваться в одной из последующих публикаций на эту тему. Ниже приведено описание различных типов ключей:
· Кандидат в ключи. Кандидатом в ключи является атрибут или набор атрибутов, идентифицирующих единичный экземпляр сущности. Иногда единичный экземпляр сущности идентифицируется несколькими атрибутами или их комбинацией.
· Составной ключ. Ключ, который состоит более чем из одного атрибута, называется составным, сложным или компонентным. Для составных ключей каждая составляющая ключа должна иметь значение для каждого экземпляра. Ни одна часть ключа не должна быть неопределенной (NULL). Все части ключа являются обязательными и не могут быть опущены.
· Искусственный первичный или суррогатный ключ. Иногда ни единичный атрибут, ни комбинация атрибутов, не определяют экземпляр. В этих случаях вы используете искусственный уникальный идентификатор. Искусственные первичные ключи часто просто нумеруют каждый экземпляр или код.
· Внешние ключи. Когда первичный ключ одной сущности мигрирует в другую таблицу, он называется внешним ключом. Внешние ключи «связывают» сущности, представляя отношения между ними. Внешние ключи будут обсуждаться более подробно в дальнейших статьях по этой тематике.
На диаграмме сущность-связь каждый прямоугольник, отображающий собой сущность, разделяется горизонтальной линией на часть, в которой расположены ключевые поля и часть, где расположены неключевые поля. Верхняя часть называется ключевой областью, а нижняя часть областью данных (рис. П6.). Ключевая область содержит первичный ключ для сущности.
Ключевая область объекта СТРАХОВАНИЕ содержит поле уникальный идентификатор Код договора, в области данных находятся поля «Страховая сумма», «Дата страхования» и т.д.
Рис. П6. Ключевые поля
Выбор первичного ключа для сущности является очень важным шагом, и требует большого внимания. В качестве первичного ключа может быть использован атрибут или группа атрибутов. Атрибуты, которые могут быть выбраны первичными ключами, называются кандидатами в ключевые атрибуты (потенциальные атрибуты). Кандидаты в ключи должны уникально идентифицировать каждую запись сущности. В соответствии с этим, ни одна из частей ключа не может быть NULL, не заполненной или отсутствующей.
Например, для того, чтобы корректно использовать сущность СТРАХОВАНИЕ в IDEF1X модели данных (а позже в базе данных), необходимо иметь возможность уникально идентифицировать записи.
Правила выбора первичного ключа:
· Уникальным образом идентифицировать экземпляр сущности.
· Не использовать NULL значений.
· Не изменяться со временем. Экземпляр идентифицируется при помощи ключа. При изменении ключа, соответственно меняется экземпляр.
· Быть как можно более короткими для использования индексирования и получения данных.
Если вам нужно использовать ключ, являющийся комбинацией ключей из других сущностей, убедитесь в том, что каждая из частей ключа соответствует правилам.
Для наглядного представления о том, как целесообразно выбирать первичные ключи, приведем следующий пример – выберем первичный ключ для знакомой нам сущности «СОТРУДНИК»:
· Атрибут «ID сотрудника» является потенциальным ключом, так как он уникален для всех экземпляров сущности СОТРУДНИК.
· Атрибут «Имя сотрудника» не очень хорош для потенциального ключа, так как среди служащих на предприятии может быть, к примеру, двое Иванов Петровых.
· Атрибут «Номер страхового полиса сотрудника» является уникальным, но проблема в том, что СОТРУДНИК может не иметь такового.
· Комбинация атрибутов «имя сотрудника» и «дата рождения сотрудника» может оказаться удачной для наших целей и стать искомым потенциальным ключом.
После проведенного анализа можно назвать два потенциальных ключа – первый «Номер сотрудника» и комбинация, включающая поля «имя сотрудника» и «Дата рождения сотрудника». Так как атрибут «Номер сотрудника» имеет самые короткие и уникальные значения, то он лучше других подходит для первичного ключа.
При выборе первичного ключа для сущности, разработчики модели часто используют суррогатный ключ.
Суррогатный ключ — это произвольный номер, который уникальным образом определяет запись в сущности. Атрибут «Номер сотрудника» является примером суррогатного ключа.
Суррогатный ключ лучше всего подходит на роль первичного ключа, потому что является коротким и быстрее всего идентифицирует экземпляры в объекте. К тому же суррогатные ключи могут автоматически генерироваться системой так, чтобы нумерация была сплошной, т.е. без пропусков.
Альтернативный ключ – это потенциальный ключ, который не выбран первичными. С помощью альтернативных ключей часто отображают различные индексы доступа к данным в конечной реализации реляционной базы.
Если сущности в IDEF1X диаграмме связаны неидентифицирующей связью, то эта связь для дочерней сущности реализуется через внешние ключи.
Внешний ключ это – атрибуты первичных ключей родительской сущности, переданные дочерней сущности через их связь. Передаваемые атрибуты называются мигрирующими.