В реляционной модели баз данных первичный ключ — это назначенный атрибут ( столбец ), который может надежно идентифицировать и различать каждую отдельную запись в таблице . Создатель базы данных может выбрать существующий уникальный атрибут или комбинацию атрибутов из таблицы ( естественный ключ ) в качестве первичного ключа или создать новый атрибут, содержащий уникальный идентификатор , который существует исключительно для этой цели ( суррогатный ключ ).
Примерами естественных ключей, которые могут быть подходящими первичными ключами, являются данные, которые по определению уникальны для всех элементов в таблице, такие как атрибут национального идентификационного номера для записей о лицах или комбинация очень точного атрибута временной метки с очень точным атрибутом местоположения для записей о событиях.
Более формально, первичный ключ — это определенный выбор минимального набора атрибутов, которые однозначно определяют кортеж ( строку ) в отношении (таблице). [a] [1] Первичный ключ — это выбор [ требуется пояснение ] потенциального ключа (минимального суперключа ); любой другой потенциальный ключ является альтернативным ключом .
В терминах реляционной базы данных первичный ключ не отличается по форме или функции от ключа, который не является первичным. На практике выбор одного ключа в качестве первичного вместо другого может определяться различными мотивами. Обозначение первичного ключа может указывать на «предпочтительный» идентификатор для данных в таблице или на то, что первичный ключ должен использоваться для ссылок на внешние ключи из других таблиц, или может указывать на какую-то другую техническую, а не семантическую особенность таблицы. Некоторые языки и программное обеспечение имеют специальные синтаксические особенности, которые можно использовать для идентификации первичного ключа как такового (например, ограничение PRIMARY KEY в SQL).
Реляционная модель, выраженная через реляционное исчисление и реляционную алгебру, не различает первичные ключи и другие виды ключей. Первичные ключи были добавлены в стандарт SQL в основном для удобства прикладного программиста. [ необходима цитата ]
Первичные ключи могут быть целым числом, которое увеличивается, универсальным уникальным идентификатором (UUID) или могут быть сгенерированы с использованием алгоритма Hi/Lo .
Первичные ключи определены в стандарте ISO SQL через ограничение PRIMARY KEY. Синтаксис для добавления такого ограничения к существующей таблице определен в SQL:2003 следующим образом:
ALTER TABLE < идентификатор таблицы > ADD [ CONSTRAINT < идентификатор ограничения > ] PRIMARY KEY ( < имя столбца > [ { , < имя столбца > } ... ] )
Первичный ключ также может быть указан непосредственно во время создания таблицы. В стандарте SQL первичные ключи могут состоять из одного или нескольких столбцов. Каждый столбец, участвующий в первичном ключе, неявно определен как NOT NULL. Обратите внимание, что некоторые СУРБД требуют явной маркировки столбцов первичного ключа как NOT NULL
. [ необходима цитата ]
СОЗДАТЬ ТАБЛИЦУ имя_таблицы ( ... )
Если первичный ключ состоит только из одного столбца, столбец можно пометить как таковой, используя следующий синтаксис:
CREATE TABLE table_name ( id_col INT PRIMARY KEY , col2 CHARACTER VARYING ( 20 ), ... )
В некоторых обстоятельствах естественный ключ, который уникально идентифицирует кортеж в отношении, может быть громоздким для использования при разработке программного обеспечения. Например, он может включать несколько столбцов или большие текстовые поля. В таких случаях вместо него в качестве первичного ключа можно использовать суррогатный ключ . В других ситуациях для отношения может быть более одного потенциального ключа , и ни один из потенциальных ключей не является, очевидно, предпочтительным. Суррогатный ключ можно использовать в качестве первичного ключа, чтобы избежать предоставления одному потенциальному ключу искусственного приоритета над другими.
Поскольку первичные ключи существуют в первую очередь для удобства программиста, суррогатные первичные ключи часто используются, а во многих случаях и исключительно, при проектировании приложений баз данных.
Из-за популярности суррогатных первичных ключей многие разработчики, а в некоторых случаях даже теоретики, стали считать суррогатные первичные ключи неотъемлемой частью реляционной модели данных. Во многом это связано с миграцией принципов из объектно-ориентированной модели программирования в реляционную модель, создав гибридную объектно-реляционную модель. В ORM- подобном шаблоне активной записи на первичные ключи накладываются следующие дополнительные ограничения:
Однако ни одно из этих ограничений не является частью реляционной модели или любого стандарта SQL. При принятии решения о неизменяемости значений первичного ключа во время проектирования базы данных и приложения следует проявлять должную осмотрительностьUPDATE
. Некоторые системы баз данных даже подразумевают, что значения в столбцах первичного ключа не могут быть изменены с помощью оператора SQL. [ необходима цитата ]
Обычно один из потенциальных ключей выбирается в качестве первичного ключа. Другие потенциальные ключи становятся альтернативными ключами, каждый из которых может иметь UNIQUE
ограничение, назначенное ему для предотвращения дубликатов (повторяющаяся запись недопустима в уникальном столбце). [2]
Альтернативные ключи могут использоваться как первичный ключ при выполнении выбора из одной таблицы или при фильтрации в предложении where , но обычно не используются для объединения нескольких таблиц.
Первичный ключ — это поле или набор полей со значениями, которые являются уникальными во всей таблице.