В чем разница между первичным ключом и уникальным ограничением? - PullRequest
36 голосов
/ 21 августа 2009

Кто-то задал мне этот вопрос на собеседовании ...

Ответы [ 16 ]

53 голосов
/ 21 августа 2009

Первичные ключи не могут быть нулевыми. Уникальные ключи могут.

23 голосов
/ 21 августа 2009

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

Уникальное ограничение просто означает, что конкретное поле должно быть уникальным.

12 голосов
/ 21 августа 2009
  1. Первичный ключ не может быть нулевым, но уникальный может иметь только одно нулевое значение.
  2. Первичный ключ создает индекс кластера автоматически, а уникальный ключ - нет.
  3. Таблица может иметь только один первичный ключ, но уникальный ключ - более одного.
5 голосов
/ 22 февраля 2012

TL; DR Многое может подразумеваться PRIMARY KEY (уникальность, ссылочная возможность, ненулевое значение, кластеризация и т. Д.), Но ничего, что не может быть указано явно с использованием UNIQUE.

Я полагаю, что если вы тот тип кодировщика, которому нравится удобство SELECT * FROM... без необходимости перечислять все эти надоедливые столбцы, тогда PRIMARY KEY - это то, что вам нужно.


relvar может иметь несколько ключей, но мы выбираем только один для подчеркивания и назовите это первичным ключом. Выбор произвольный, поэтому Понятие первичного не очень важно с логической точки зрения зрения. Общая концепция ключа, однако, очень важна! термин «ключ-кандидат» означает то же самое, что и ключ (то есть кандидата не имеет реального значения - это было предложено Тедом Коддом потому что он рассматривал каждый ключ в качестве кандидата на выдвижение в качестве первичный ключ) ... SQL позволяет подмножеству столбцов таблицы быть объявлен в качестве ключа для этой таблицы. Это также позволяет одному из них быть назначен в качестве первичного ключа. Указание ключа для основных марок для определенного удобства в связи с другими ограничения, которые могут понадобиться

Что такое ключ? Хью Дарвен


обычно ... выделять один ключ как первичный ключ (и любой другой ключи для рассматриваемого relvar затем называются альтернативными ключами). Но следует ли выбирать какой-то ключ в качестве основного, и если да, то какой, по сути психологические проблемы, выходящие за рамки реляционная модель как таковая. В соответствии с хорошей практикой, большинство базовых relvars, вероятно, должен иметь первичный ключ, но, повторяя это правило, если это правило, на самом деле это не вопрос отношений как таковой ... Сильный рекомендация [для пользователей SQL]: во всяком случае, для базовых таблиц используйте ОСНОВНЫЕ КЛЮЧЕВЫЕ и / или УНИКАЛЬНЫЕ спецификации, чтобы гарантировать, что каждый такой Таблица имеет хотя бы один ключ.

SQL и реляционная теория: как написать точный код SQL С. Дж. Дата

В стандартном SQL PRIMARY KEY

  • подразумевает уникальность, но вы можете указать это явно (используя UNIQUE).
  • подразумевает NOT NULL, но вы можете указать это явно при создании столбцов (но вы все равно должны избегать нулевых значений!)
  • позволяет вам опустить его столбцы в FOREIGN KEY, но вы можете указать их явно.
  • может быть объявлено только для одного ключа на таблицу, но неясно, почему (Кодд, который первоначально предложил концепцию, не вводил такое ограничение).

В некоторых продуктах PRIMARY KEY подразумевает кластеризованный индекс таблицы, но вы можете указать это явно (вы можете не захотеть, чтобы первичный ключ был кластеризованным индексом!)

Для некоторых людей PRIMARY KEY имеет чисто психологическое значение:

  • они думают, что это означает, что на ключ будет ссылаться внешний ключ (это было предложено Codd, но фактически не принято ни стандартным SQL, ни поставщиками SQL).
  • они считают, что это означает единственный ключ таблицы (но отказ от применения других ключей-кандидатов приводит к потере целостности данных).
  • они думают, что это подразумевает «суррогатный» или «искусственный» ключ, который не имеет значения для бизнеса (но на самом деле навязывает нежелательное значение для предприятия, будучи открытым для пользователей).
4 голосов
/ 22 февраля 2012

Ограничения уникального ключа:

  1. Ограничение уникального ключа предоставит вам ограничение, при котором значения столбцов должны сохранять уникальность.
  2. По умолчанию будет создан некластеризованный индекс
  3. Любое количество уникальных ограничений может быть добавлено в таблицу.
  4. Это позволит пустое значение в столбце.

    ALTER TABLE table_name ADD CONSTRAINT UNIQUE_CONSTRAINT УНИКАЛЬНЫЙ (column_name1, column_name2, ...)

Первичный ключ:

  1. Первичный ключ создаст уникальность данных столбца в таблице.
  2. Первичный ключ создаст кластерный индекс по умолчанию
  3. Для таблицы может быть создан только один ключ Primay
  4. Несколько столбцов могут быть объединены в единый первичный ключ
  5. Не допускаются нулевые значения.

    ALTER TABLE table_name ADD CONSTRAINT KEY_CONSTRAINT ПЕРВИЧНЫЙ КЛЮЧ (имя_столбца)

4 голосов
/ 21 августа 2009

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

Скажем, у вас есть таблица сотрудников, PK EmployeeID. Вы можете добавить уникальное ограничение для SSN, например.

2 голосов
/ 21 августа 2009
  1. Цель первичного ключа - уникальная идентификация строки в таблице. Ограничение уникальности гарантирует, что значение поля является уникальным среди строк в таблице.
  2. В таблице может быть только один первичный ключ. Вы можете иметь более одного уникального ограничения на таблицу.
2 голосов
/ 21 августа 2009

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

1 голос
/ 08 сентября 2014

Ограничение UNIQUE однозначно определяет каждую запись в таблице базы данных.

Ограничения UNIQUE и PRIMARY KEY предоставляют гарантию уникальности для столбца или набора столбцов.

Ограничение PRIMARY KEY автоматически имеет ограничение UNIQUE.

Обратите внимание, что вы можете иметь много ограничений UNIQUE на таблицу, но только одно ограничение PRIMARY KEY на таблицу

1 голос
/ 21 августа 2009

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

Ограничение уникальности - именно то, на что оно похоже.

...