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

D-коллизия проявляется в том, что при использовании схемы, построенной на суррогатных ключах, можно заданную в заказе модель укомплектовать изделием, относящимся к совсем иной модели. Это тоже легко увидеть из схемы, представленной на рис. 4, если ещё раз проанализировать отношение «Комплекты».

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

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

  • Идентификатор;
  • Модель;
  • Позиция;
  • Серийный номер.

В результате получено то же отношение, что и в схеме, построенной на интеллектуальных ключах, что со всей очевидностью показывает, что интеллектуальные ключи являются единственной схемой, обеспечивающей достоверность информации. Безусловно, есть и другой путь. Можно использовать суррогатные ключи и поддерживать достоверность с помощью дополнительных механизмов, например, триггеров. Однако это приведёт к ещё большему усложнению логики базы данных.

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

Сайт Alexus Software Development