В чем разница между первичным ключом и идентификацией? - PullRequest
59 голосов
/ 27 ноября 2010

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

В дополнение к различиям, что предлагает столбец PK и Identity, чего нет только в столбце PK?

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

Ответы [ 6 ]

75 голосов
/ 27 ноября 2010

Столбец определенно может быть идентификатором, не являясь PK.

Идентификатор - это просто автоматически увеличивающийся столбец.

Первичный ключ - это уникальный столбец или столбцы, которые определяют строку.

Эти два часто используются вместе, но не требуется, чтобы это было так.

12 голосов
/ 28 ноября 2010

Этот ответ в большей степени относится к ПОЧЕМУ идентификатору и первичному ключу, чем к ЧЕМ они являются, поскольку Джо правильно ответил НА ЧЕМ выше.

Идентификация - это значение, которое контролируется SQL.Идентичность - это функция строки.Это последовательное увеличение или уменьшение значения, по крайней мере, в SQL Server.Он никогда не должен изменяться, и пропуски в значении должны игнорироваться.Значения идентичности очень полезны при связывании таблицы B с таблицей A, поскольку значение никогда не дублируется.Идентичность - не лучший выбор для кластерного индекса в каждом случае.Если таблица содержит данные аудита, кластерный индекс может быть лучше создан на дату наступления, поскольку он представит ответ на вопрос «что произошло между сегодняшним днем ​​и четырьмя днями ранее» с меньшим количеством работы, поскольку записи для дат являются последовательными встраницы данных.

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

Общие правила, которым я следую для идентификации и первичного ключа:

  1. Всегда используйте столбец идентификаторов
  2. Создание кластеризованного индекса для столбца или столбцов, которые используются при поиске по диапазону
  3. Сохраняйте кластеризованный индекс узким, поскольку кластеризованный индекс являетсядобавляется в конец каждого другого индекса
  4. Создает первичный ключ и уникальные индексы для отклонения повторяющихся значений
  5. Узкие ключи лучше
  6. Создайте индекс для каждого столбца или столбцов, используемых вприсоединяется

Это мои ОБЩИЕ правила.

8 голосов
/ 28 ноября 2010

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

Свойство IDENTITY эффективно создает автоматически увеличивающееся значение по умолчанию для столбца. Этот столбец не обязательно должен быть уникальным, поэтому столбец IDENTITY не обязательно является ключом.

Однако столбец IDENTITY обычно предназначен для использования в качестве ключа, и поэтому он обычно имеет ограничение уникальности, чтобы гарантировать, что дубликаты не допускаются.

1 голос
/ 28 ноября 2010

РЕДАКТИРОВАНИЕ НА ОСНОВЕ ОБРАТНОЙ СВЯЗИ

Ключ уникален для строки. Это способ определения строки. Строки могут иметь ни один, ни один, или несколько ключей. Эти ключи могут состоять из одного или нескольких столбцов.

Ключи - это индексы с уникальным ограничением. Это отличает их от неключевых индексов.

Любой индекс с несколькими столбцами называется «составным индексом».

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

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

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

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

Столбец идентификации - это просто метод создания уникального идентификатора для строки.

Эти два часто используются вместе, но это не является обязательным требованием.

0 голосов
/ 12 сентября 2017

Вы можете использовать IDENTITY не только с целыми числами, но и с любым числовым типом данных со шкалой 0

первичный ключ может иметь масштаб, но это не обязательно.

IDENTITY в сочетании с ограничением PRIMARY KEY или UNIQUE позволяет вам предоставить простой уникальный идентификатор строки

0 голосов
/ 10 сентября 2015

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

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