В чем разница между первичным ключом и суррогатным ключом?

Я много гугл, но я не нашел точного прямого ответа с примером.

Любой пример для этого был бы более полезным.

Ответ 1

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

Суррогатный ключ - это искусственно созданный ключ. Они полезны, когда ваши записи по существу не имеют естественного ключа (например, таблицы Person, так как возможно, что два человека, родившиеся в одну дату, имеют одно и то же имя или записи в журнале, поскольку это возможно для двух событий чтобы они были такими, они несут одну и ту же метку времени). Чаще всего вы увидите, что они реализованы как целые числа в автоматически увеличивающемся поле или как GUID, которые автоматически генерируются для каждой записи. Идентификационные номера - это почти всегда суррогатные ключи.

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

Основным преимуществом суррогатного ключа является то, что их легко гарантировать как уникальное. Основной недостаток заключается в том, что они не имеют никакого значения. Там нет смысла, что, например, "28" - это Висконсин, но когда вы видите "WI" в столбце "Состояние" вашей таблицы "Адрес", вы знаете, в каком состоянии вы говорите, не задумываясь о том, какое состояние находится в вашем государстве таблица.

Ответ 2

A суррогатный ключ - это сделанное значение с единственной целью уникальной идентификации строки. Обычно это обозначается идентификатором автоматического увеличения.

Пример кода:

CREATE TABLE Example
(
    SurrogateKey INT IDENTITY(1,1) -- A surrogate key that increments automatically
)

A первичный ключ - это столбец идентификации или набор столбцов таблицы. Может быть суррогатным ключом или любой другой уникальной комбинацией столбцов (например, составной ключ). Должен быть уникальным для любой строки и не может быть NULL.

Пример кода:

CREATE TABLE Example
(
    PrimaryKey INT PRIMARY KEY -- A primary key is just an unique identifier
)

Ответ 3

Все ключи - это идентификаторы, используемые в качестве суррогатов для того, что они идентифицируют. E.F.Codd объяснил концепцию присваиваемых системой суррогатов следующим образом [1]:

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

Это то, что обычно называют суррогатным ключом. Это определение сразу же проблематично, поскольку Codd предполагал, что такая функция будет предоставлена ​​СУБД. СУБД вообще не имеют такой возможности. Клавиши обычно видны, по крайней мере, некоторым пользователям СУБД, поскольку по очевидным причинам они должны быть. Поэтому понятие суррогата слегка изменилось в использовании. Этот термин обычно используется в профессии управления данными для обозначения ключа, который не отображается и используется как идентификатор в бизнес-домене. Обратите внимание, что это по существу не связано с тем, как генерируется ключ или как "искусственно" он воспринимается. Все ключи состоят из символов, изобретенных людьми или машинами. Таким образом, единственное возможное значение термина "суррогат" относится к тому, как используется ключ, а не как он создан или каковы его значения.

[1] Расширение реляционной модели базы данных для большей значимости, E.F.Codd, 1979

Ответ 5

Суррогатный ключ обычно представляет собой числовое значение. В SQL Server Microsoft позволяет определить столбец с идентификационным свойством, чтобы помочь генерировать суррогатные значения ключа.

Ограничение PRIMARY KEY однозначно идентифицирует каждую запись в таблице базы данных. Первичные ключи должны содержать УНИКАЛЬНЫЕ значения. Столбец первичного ключа не может содержать значения NULL. Большинство таблиц должны иметь первичный ключ, и каждая таблица может иметь только один первичный ключ.

http://www.databasejournal.com/features/mssql/article.php/3922066/SQL-Server-Natural-Key-Verses-Surrogate-Key.htm

Ответ 6

Я думаю, что Мишель Пулет описывает это очень четко:

Суррогатный ключ - искусственно созданная ценность, чаще всего управляемый системой, увеличивающий счетчик, значения которого могут варьироваться от 1 до n, где n представляет таблицу максимального количества строк. В SQL Server, вы создаете суррогатный ключ, назначая свойство идентификации столбец с типом данных.

http://sqlmag.com/business-intelligence/surrogate-key-vs-natural-key

Обычно вы можете использовать суррогатный ключ при изменении составного ключа с помощью столбца идентификации.