Введение
Концепция реляционных баз данных
В реляционной модели баз данных первичный ключ – это конкретный выбор минимального набора атрибутов (столбцов), однозначно определяющих кортеж (строку) в отношении (таблице). Неформально первичный ключ – это "атрибуты, идентифицирующие запись", а в простых случаях состоит из одного атрибута: уникального идентификатора. Более формально, первичный ключ – это выбор из множества допустимых ключей (минимального суперключа); любой другой допустимый ключ является альтернативным ключом. Первичный ключ может состоять из реально наблюдаемых данных, в этом случае он называется естественным ключом, а атрибут, созданный для функционирования в качестве ключа и не используемый для идентификации за пределами базы данных, называется суррогатным ключом. Например, для базы данных людей (определенной национальности) дата и место рождения могут быть естественным ключом. Национальный идентификационный номер – еще один пример атрибута, который может использоваться в качестве естественного ключа.
Дизайн
В реляционных базах данных первичный ключ не отличается по форме или функциональности от любого другого ключа. На практике, выбор конкретного ключа в качестве первичного может определяться различными соображениями. Обозначение ключа как первичного может указывать на его предпочтительность в качестве идентификатора данных в таблице, на то, что он будет использоваться для внешних ключей в других таблицах, или на какие-либо другие технические, а не семантические особенности таблицы. Некоторые языки программирования и программное обеспечение предоставляют специальные синтаксические конструкции для обозначения первичного ключа (например, ограничение PRIMARY KEY в SQL). Реляционная модель, выраженная посредством реляционного исчисления и реляционной алгебры, не делает различий между первичными ключами и другими типами ключей. Первичные ключи были добавлены в стандарт SQL главным образом для удобства разработчиков приложений. Первичные ключи могут представлять собой целое число с автоинкрементом, универсальный уникальный идентификатор (UUID) или генерироваться с использованием алгоритма Hi/Lo.
Заместительные ключи
В некоторых случаях естественный ключ, однозначно идентифицирующий кортеж в отношении, может быть неудобным в использовании при разработке программного обеспечения. Например, он может состоять из нескольких столбцов или включать большие текстовые поля. В таких случаях вместо первичного ключа можно использовать суррогатный ключ. В других ситуациях для отношения может существовать несколько потенциальных ключей, и ни один из них не является явно предпочтительным. Суррогатный ключ может быть использован в качестве первичного, чтобы избежать необоснованного предпочтения одного из потенциальных ключей перед другими. Поскольку первичные ключи в основном служат удобством для программиста, суррогатные первичные ключи часто используются, во многих случаях исключительно, при проектировании приложений баз данных. Благодаря популярности суррогатных первичных ключей многие разработчики, а иногда и теоретики, стали рассматривать их как неотъемлемую часть реляционной модели данных. Это во многом связано с переносом принципов из объектно-ориентированной модели программирования в реляционную, что привело к созданию гибридной объектно-реляционной модели. В ORM, таких как шаблон "активная запись", на первичные ключи накладываются следующие дополнительные ограничения:
Первичные ключи должны быть неизменяемыми, то есть их нельзя изменять или повторно использовать; они должны удаляться вместе со связанной записью. Первичные ключи должны быть анонимными целочисленными или числовыми идентификаторами. Однако ни одно из этих ограничений не является частью реляционной модели или какого-либо стандарта SQL. Необходимо проявлять должную осмотрительность при определении неизменности значений первичного ключа в процессе проектирования базы данных и приложения. Некоторые системы управления базами данных даже подразумевают, что значения в столбцах первичного ключа нельзя изменить с помощью оператора SQL UPDATE.
Заменный ключ
Обычно один из ключей-кандидатов выбирается в качестве первичного ключа. Остальные ключи-кандидаты становятся альтернативными ключами, которым может быть назначено ограничение UNIQUE для предотвращения дубликатов (дублирующаяся запись недопустима в уникальном столбце). Альтернативные ключи могут использоваться аналогично первичному ключу при выборке из одной таблицы или при фильтрации в предложении WHERE, но обычно не используются для соединения нескольких таблиц.