Ключ или отмычка - Почему выбирают суррогатные ключи
Связи между таблицами на основе суррогатных ключей
Коллизии

Усложнение логики базы данных, построенной на суррогатных ключах, связано с тем, что в таких базах данных необходимо преодолевать коллизии, вызванные применением суррогатных ключей. Существо коллизий состоит в том, что базы данных, построенные на суррогатных ключах, не обеспечивают той же достоверности информации, что и базы данных, построенные на интеллектуальных ключах, без введения дополнительных механизмов. При этом данные механизмы не всегда просты, а их введение далеко не всегда очевидно.

Определим коллизии как аномалии данных, которые возникают при введении суррогатных ключей. Ниже рассмотрены две разновидности таких коллизий, и они проиллюстрированы примером из реальной предметной области. Но возможные коллизии не исчерпываются перечисленными примерами даже в случае бинарных связей между отношениями. При повышении арности связей между отношениями могут быть и иные, более сложные, коллизии. Вопрос исследования коллизий является очень интересным и требует отдельного рассмотрения, которое возможно будет представлено в виде отдельной работы.

Итак, определение коллизии базируется на утверждении, что Ks не тождественен Ki, где Ki – представляет собой интеллектуальный ключ некоторого отношения, а Ks – представляет собой суррогатный аналог.

Рассмотрим D-схему

Рис.1 Дельта-схема

Из схемы, представленной на рис. 1. видно, что отношения B и C ссылаются на отношение A. Связи между отношениями A, B и C являются детерминированными, то есть, внешние ключи, ссылающиеся на отношение A, входят составной частью в первичные ключи отношений и C. Пусть интеллектуальный первичный ключ отношения A состоит из одного или более атрибутов и обозначается Ka. Интеллектуальный первичный ключ отношения B Kb будет состоять из внешнего ключа Ka и одного или более атрибутов отношения B, обозначаемых, как DKb. Аналогично, интеллектуальный первичный ключ отношения C Kc будет состоять из внешнего ключа Ka и одного или более атрибутов отношения, обозначаемых, как DKc. Тогда интеллектуальные ключи отношений B и C можно записать в виде:

тогда интеллектуальный ключ отношения D запишется в виде:

Теперь введём суррогатные ключи для отношений B и C, такие, что

где знак => означает однозначное соответствие, то есть, каждому уникальному значению суррогатного ключа соответствует уникальная комбинация значений атрибутов интеллектуального ключа. Тогда ключ отношения D в схеме, построенной на суррогатных ключах, можно записать в виде:

Предположим, что следующие значения атрибутов, входящих в ключи отношений B и C, являются допустимыми:

и

здесь a1 является значением атрибута внешнего ключа, ссылающегося на первичный ключ отношения A; bi – значения атрибутов, входящих в интеллектуальный первичный ключ отношения B; gi – значения атрибутов, входящих в интеллектуальный ключ отношения C.

В этом случае ключ отношения в схеме, построенной на интеллектуальных ключах, может принять только одно значение, а именно:

Однако ключ отношения D в схеме, построенной на суррогатных ключах, может принять два значения:

Реально же это означает, что второй ключ является некорректным, поскольку возникает коллизия по атрибуту a.

D-коллизия является не единственной коллизией возможной при введении суррогатных ключей. Можно рассмотреть другой пример с P-коллизией. P-схема является развитием D-схемы. Пусть отношение B, из рассмотренного ранее примера, реализует связь многие-ко-многим между отношениями A и E. Так, как показано на рис. 2.

Рис.2 Р-схема

Теперь интеллектуальный ключ отношения B представим в виде:

а суррогатный ключ сохранит прежний вид:

Интеллектуальный ключ отношения D в этом случае примет вид:

В то время как суррогатный ключ снова останется неизменным:

Определим допустимые комбинации значений атрибутов, входящих в ключи отношений B и C:

 и

здесь si – значения атрибута внешнего ключа отношения B, ссылающегося на отношение E, и входящие в интеллектуальный ключ отношения B.

P-коллизию можно сформулировать следующим образом. В отношении D каждому значению ключа Ke из отношения E может быть поставлено только одно значение ключа Kc отношения C. Ключ отношения D, в схеме на интеллектуальных ключах, по-прежнему может принимать только одно значение, а именно:

Следовательно, наложенное ограничение не может быть нарушено. Однако в схеме, построенной на суррогатных ключах, ключ отношения D может принимать два значения:

Здесь оба варианта являются допустимыми, но совместно они нарушают наложенное ограничение, поскольку одному и тому же значению ключа Ke(s1) дважды соответствует одно и то же значение Kc(a1, g1, g2, …). Другими словами, если не устранена D-коллизия, то она может быть усугублена ещё и P-коллизией.

Для иллюстрации коллизий, рассмотрим фрагмент предметной области, представленный на рис. 3. Более подробно данная предметная область описана в приложении.

Рис.3 Использование интеллектуальных ключей

Из приведённого фрагмента схемы базы данных видно, что модели идентифицируются по своему названию, изделия имеют составной ключ, состоящий из названия модели и серийного номера изделия (серийные номера у разных моделей могут совпадать). Ключом заказов является их номер. Позиции заказа исполняют роль связи многие-ко-многим между моделями и заказами, и, кроме того, характеризуют количество изделий конкретной модели в конкретном заказе, а также цену данной модели. Отношение «Комплекты» играют роль связи многие-ко-многим между отношениями «Позиции» и «Изделия». Благодаря отношению «Комплекты» можно узнать, какими изделиями укомплектована та или иная позиция заказа. При этом несколько заказов могут быть укомплектованы одним изделием. Это возможно потому, что покупатель может вернуть изделие после факта продажи, если оно его не устроило по каким-либо параметрам или оказалось бракованным. Бракованные изделия возвращаются изготовителю и после того, как они приведены в соответствие с техническими требованиями, они могут быть снова пущены в продажу. Таким образом, одно и то же изделие может укомплектовать более одного заказа.

Рис.4 Использование суррогатных ключей

При использовании суррогатных ключей получается схема представленная на рис. 4. Для соответствия предметной области необходимо поддерживать уникальность тех полей, которые образуют интеллектуальные ключи (поля, помеченные символами «Ux»), помимо уникальности суррогатных ключей, которые выступают в качестве первичных ключей. Но даже в этом случае схемы баз данных, представленные на рис. 3. и рис. 4. различаются. Схема на суррогатных ключах не обеспечивает достоверности информации, в отличие от схемы на интеллектуальных ключах, то есть имеет коллизии.

В случае с интеллектуальными ключами первичный ключ отношения «Комплекты» образуется из двух внешних ключей: «Заказ» + «Модель» и «Модель» + «Серийный номер». При этом атрибут «Модель» существует в единственном числе. Когда происходит комплектация заказа, то атрибут «Модель» получается из соответствующего кортежа отношения «Позиции». Теперь в соответствие полученной модели необходимо поставить серийный номер конкретного изделия. Для указанной модели можно подставить нужный серийный номер из отношения «Изделия». Таким образом, можно корректно укомплектовать все позиции заказа. Теперь можно рассмотреть коллизии, которые возможны в модели построенной на суррогатных ключах.

Сайт Alexus Software Development