Основной ключ - Primary key

В реляционной модели из баз данных , первичный ключ является конкретным выбором из минимального набора атрибутов ( столбцы ) , которые однозначно определить кортеж ( строка ) в соотношении ( таблицах ). Неформально первичный ключ - это «какие атрибуты идентифицируют запись», и в простых случаях он составляет один атрибут: уникальный идентификатор. Более формально первичный ключ - это выбор ключа кандидата (минимальный суперключ ); любой другой ключ-кандидат является альтернативным ключом .

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

История

Хотя в настоящее время термин «первичный ключ» используется в основном в контексте реляционной базы данных, он предшествует реляционной модели и также используется в других моделях баз данных. Чарльз Бахман в своем определении навигационной базы данных был первым, кто определил первичные ключи.

Дизайн

В терминах реляционной базы данных первичный ключ не отличается по форме или функциям от ключа, который не является первичным. На практике различные мотивы могут определять выбор одного ключа в качестве первичного по сравнению с другим. Обозначение первичного ключа может указывать «предпочтительный» идентификатор для данных в таблице, или то, что первичный ключ должен использоваться для ссылок на внешние ключи из других таблиц, или он может указывать на некоторые другие технические, а не семантические особенности таблицы. Некоторые языки и программное обеспечение имеют специальные синтаксические функции, которые можно использовать для идентификации первичного ключа как такового (например, ограничение PRIMARY KEY в SQL).

Реляционная модель, выраженная через реляционное исчисление и реляционную алгебру, не делает различий между первичными ключами и другими типами ключей. Первичные ключи были добавлены в стандарт SQL в основном для удобства программистов.

Определение первичных ключей в SQL

Первичные ключи определены в стандарте ISO SQL посредством ограничения PRIMARY KEY. Синтаксис для добавления такого ограничения к существующей таблице определен в SQL: 2003 следующим образом:

ALTER TABLE <table identifier> 
    ADD [ CONSTRAINT <constraint identifier> ] 
    PRIMARY KEY ( <column name> [ {, <column name> }... ] )

Первичный ключ также можно указать непосредственно во время создания таблицы. В стандарте SQL первичные ключи могут состоять из одного или нескольких столбцов. Каждый столбец, участвующий в первичном ключе, неявно определяется как NOT NULL. Обратите внимание, что некоторые СУБД требуют явной пометки столбцов первичного ключа как NOT NULL.

CREATE TABLE table_name (
   
   ...
)

Если первичный ключ состоит только из одного столбца, столбец можно пометить как таковой, используя следующий синтаксис:

CREATE TABLE table_name (
   id_col  INT  PRIMARY KEY,
   col2    CHARACTER VARYING(20),
   ...
)

Суррогатные ключи

В некоторых случаях естественный ключ, который однозначно идентифицирует кортеж в отношении, может быть неудобным для использования при разработке программного обеспечения. Например, он может включать несколько столбцов или большие текстовые поля. В таких случаях вместо первичного ключа можно использовать суррогатный ключ. В других ситуациях для отношения может быть более одного ключа-кандидата , и очевидно, что никакой ключ-кандидат не является предпочтительным. В качестве первичного ключа можно использовать суррогатный ключ, чтобы избежать искусственного примата одного ключа-кандидата над другими.

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

Из-за популярности суррогатных первичных ключей многие разработчики, а в некоторых случаях даже теоретики стали рассматривать суррогатные первичные ключи как неотъемлемую часть реляционной модели данных. Это во многом связано с миграцией принципов из модели объектно-ориентированного программирования в модель реляционной, создавая гибридную объектно-реляционную модель. В ORM, подобном шаблону активной записи , эти дополнительные ограничения накладываются на первичные ключи:

  • Первичные ключи должны быть неизменяемыми, то есть никогда не изменяться и не использоваться повторно; они должны быть удалены вместе со связанной записью.
  • Первичные ключи должны быть анонимными целыми или числовыми идентификаторами.

Однако ни одно из этих ограничений не является частью реляционной модели или какого-либо стандарта SQL. Следует проявлять должную осмотрительность при принятии решения о неизменности значений первичных ключей во время разработки базы данных и приложения. Некоторые системы баз данных даже подразумевают, что значения в столбцах первичного ключа нельзя изменить с помощью UPDATEоператора SQL.

Альтернативный ключ

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

Альтернативные ключи могут использоваться как первичный ключ при выборе одной таблицы или при фильтрации в предложении where , но обычно не используются для объединения нескольких таблиц.

Смотрите также

Примечания

использованная литература