Ключ

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

Элемент множества возможных ключей отношения называется потенциальным ключом

Ключ выбранный для отношения в качестве основного (его будут использовать для создания внешних ключей) называется первичным ключом.

Если первичный ключ выбран, прочие возможные ключи отношения называются альтернативными

Классификация ключей

По числу атрибутов:

  • Простые - ключ состоит из единственного атрибута отношения
  • Составной - ключ состоит из двух и более атрибутов отношения По уместности в предметной модели
  • Естественный - ключ, состоящий из информационных атрибутов полей таблицы (полезных данных)
  • Суррогатный- ключ из единственного особенного атрибута отношения. Атрибут добавляется к имеющемуся отношению. Единственная его цель - идентифицировать строки в отношении. Добавляется исскусственно к БД

Внешний ключ

Внешний ключ

Выбор первичного ключа в реальном приложении

В контексте уже реальных СУБД, а не реляционной модели

  • значение любого столбца потенциального ключа не может быть null
  • значение столбца (или столбцов) потенциального ключа должно быть уникальным для любой записи
  • значение столбца (или столбцов) потенциального ключа никогда не обновляется – оно неизменяемо Реляционная модель допускает изменение первичного ключа, Hibernate - нет (если попытаться что-то менять, как минимум, сломается кэширование)

Потенциальные ключи, не выбранные в качестве первичного ключа, следует объявить уникальными, если их значения действительно уникальны (но они при этом могут быть изменяемыми)


Естественный ключ (natural key) – это ключ, имеющий смысл в предметной области: атрибут (или комбинация атрибутов), уникальный в силу семантики предметной области


Опыт показывает, что рано или поздно естественные первичные ключи создают проблемы. Если он поменяется, то гг:

Изменение значения (или даже определения) первичного ключа, а также всех ссылающихся на него внешних ключей является неприятной задачей.

По этой и другой причинам рекомендуется использовать суррогатные ключи:

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

В идеале пользователи приложения не видят и не ссылаются на значения этого ключа

Другими словами, (почти) каждая таблица схемы должна иметь выделенный столбец суррогатного первичного ключа только для этой цели.