Первичный ключ - Primary key

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

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

История

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

Дизайн

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

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

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

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

ИЗМЕНИТЬ СТОЛ <стол идентификатор>     ДОБАВИТЬ [ ОГРАНИЧЕНИЕ <ограничение идентификатор> ]     НАЧАЛЬНЫЙ КЛЮЧ ( <столбец имя> [ {, <столбец имя> }... ] )

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

СОЗДАЙТЕ СТОЛ table_name (      ...)

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

СОЗДАЙТЕ СТОЛ table_name (   id_col  INT  НАЧАЛЬНЫЙ КЛЮЧ,   col2    ПЕРСОНАЖ РАЗЛИЧНЫЕ(20),   ...)

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

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

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

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

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

Однако ни одно из этих ограничений не является частью реляционной модели или какого-либо стандарта SQL. Юридическая экспертиза следует применять при принятии решения о неизменности значений первичного ключа во время проектирования базы данных и приложения. Некоторые системы баз данных даже предполагают, что значения в столбцах первичного ключа нельзя изменить с помощью ОБНОВИТЬ Оператор SQL.[нужна цитата ]

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

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

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

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

Примечание

  1. ^ Соответствующие термины являются соответственно теоретическими (атрибут, кортеж, отношение) и конкретными (столбец, строка, таблица).
  2. ^ С достаточной точностью, два человека не могут родиться в одном и том же месте в одно и то же время.

Рекомендации

  1. ^ «Добавить или изменить первичный ключ таблицы в Access». Microsoft. Получено 20 января, 2020. Первичный ключ - это поле или набор полей со значениями, уникальными для всей таблицы.
  2. ^ «Программист как навигатор». Portal.acm.org. Дои:10.1145/355611.362534. Получено 2012-10-01.
  3. ^ Альтернативный ключ - Oracle FAQ