Ключ

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

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

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

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

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

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

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

Внешний ключ

Внешний ключ

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

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

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

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


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


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

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

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

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

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

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