Каждое отношение имеет минимум один ключ, так как ни одно отношение не может иметь одинаковые строки → группа из всех атрибуто отношения дает ключ
Элемент множества возможных ключей отношения называется потенциальным ключом
Ключ выбранный для отношения в качестве основного (его будут использовать для создания внешних ключей) называется первичным ключом.
Если первичный ключ выбран, прочие возможные ключи отношения называются альтернативными
Классификация ключей
По числу атрибутов:
- Простые - ключ состоит из единственного атрибута отношения
- Составной - ключ состоит из двух и более атрибутов отношения По уместности в предметной модели
- Естественный - ключ, состоящий из информационных атрибутов полей таблицы (полезных данных)
- Суррогатный- ключ из единственного особенного атрибута отношения. Атрибут добавляется к имеющемуся отношению. Единственная его цель - идентифицировать строки в отношении. Добавляется исскусственно к БД
Внешний ключ
Выбор первичного ключа в реальном приложении
В контексте уже реальных СУБД, а не реляционной модели
- значение любого столбца потенциального ключа не может быть
null - значение столбца (или столбцов) потенциального ключа должно быть уникальным для любой записи
- значение столбца (или столбцов) потенциального ключа никогда не обновляется – оно неизменяемо Реляционная модель допускает изменение первичного ключа, Hibernate - нет (если попытаться что-то менять, как минимум, сломается кэширование)
Потенциальные ключи, не выбранные в качестве первичного ключа, следует объявить уникальными, если их значения действительно уникальны (но они при этом могут быть изменяемыми)
Естественный ключ (natural key) – это ключ, имеющий смысл в предметной области: атрибут (или комбинация атрибутов), уникальный в силу семантики предметной области
Опыт показывает, что рано или поздно естественные первичные ключи создают проблемы. Если он поменяется, то гг:
Изменение значения (или даже определения) первичного ключа, а также всех ссылающихся на него внешних ключей является неприятной задачей.
По этой и другой причинам рекомендуется использовать суррогатные ключи:
Суррогатные ключи - ключи, не имеющие смысла для предметной области – они хранят уникальные значения, сформированные базой данных или приложением
В идеале пользователи приложения не видят и не ссылаются на значения этого ключа
Другими словами, (почти) каждая таблица схемы должна иметь выделенный столбец суррогатного первичного ключа только для этой цели.