В чем разница ч / б первичный ключ и уникальный ключ - PullRequest
24 голосов
/ 04 июня 2010

Я пытался выяснить это в Google, но там нет удовлетворительного ответа. Кто-нибудь может объяснить солидную разницу.

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

Когда мне следует использовать первичный ключ, а когда использовать уникальный ключ?

Ответы [ 11 ]

35 голосов
/ 04 июня 2010

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

Первичный ключ используется для идентификации строки данных в таблице. Он используется всякий раз, когда вам нужно обратиться к конкретной строке, например. в других таблицах или по коду приложения и т. д. Чтобы идентифицировать строку, значения PK должны быть уникальными. Кроме того, они не могут быть нулевыми, потому что большинство dbms рассматривают ноль как не равное нулю (поскольку ноль обычно означает «неизвестный»). Таблица может иметь только один ПК. Все таблицы в вашей базе данных должны иметь PK (хотя это не применяется большинством БД), и PK может занимать несколько столбцов.

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

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

11 голосов
/ 04 июня 2010

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

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

Таким образом, потенциально запутанный термин «уникальный ключ» чаще всего используется для обозначения ключа, навязанного УНИКАЛЬНЫМ ограничением. Это может даже использоваться для обозначения УНИКАЛЬНОГО ограничения на столбцы, допускающие значение NULL, хотя, на мой взгляд, это весьма сомнительное использование термина, поскольку набор столбцов, которые содержат значения NULL, не может быть ключом-кандидатом, поэтому использование слова «ключ» для значения NULL. столбцы не совсем корректны и могут вызвать путаницу.

9 голосов
/ 10 января 2014

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

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

В соответствии с проспектом RDBMS: Ключ (a.k.a Candidate Key), значение или набор значений, который однозначно идентифицирует сущность. Для Db-таблицы существует так много ключей, которые существуют и могут иметь право на Первичный ключ. Таким образом, все ключи, первичный ключ, уникальный ключ и т. Д. Вместе называются ключом-кандидатом.

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

Разница между первичным ключом и уникальным ключом

1. Поведение: Первичный ключ используется для идентификации строки (записи) в таблице, тогда как уникальный ключ предназначен для предотвращения дублирования значений в столбце.

2. Индексирование: По умолчанию Sql-механизм создает кластеризованный индекс по первичному ключу, если он не существует, и некластеризованный индекс по уникальному ключу.

3. Обнуляемость: Первичный ключ не содержит значений Null, тогда как Unique-key может.

4. Существование: Таблица может иметь не более одного первичного ключа, но может иметь несколько уникальных ключей.

5. Модифицируемость: Вы не можете изменять или удалять первичные значения, но значения уникального ключа могут.

Для получения дополнительной информации с примерами: http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html

4 голосов
/ 04 июня 2010

Первичный ключ - это уникальный ключ. Оба типа ключей служат для уникальной идентификации одной строки в таблице. Многие РСУБД требуют, чтобы один из уникальных ключей в таблице был обозначен как «первичный ключ» по нескольким причинам реализации. С точки зрения целостности данных нет никакой разницы.

4 голосов
/ 04 июня 2010

Первичный ключ не допускает нулевые значения, уникальный ключ допускает одно нулевое значение (на сервере sql и несколько нулевых значений в Oracle) Таблица может иметь только один первичный ключ, но много уникальных ключей

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

Вот небольшой пример с одним столбцом в каждой таблице

--primary key table
CREATE TABLE PrimaryTest (id INT PRIMARY KEY NOT NULL)
GO

-- foreign key table
CREATE TABLE ForeignTest (Pkid INT NOT NULL)
GO


--relationship
ALTER TABLE dbo.ForeignTest ADD CONSTRAINT
    FK_ForeignTest_PrimaryTest FOREIGN KEY
    (
    Pkid
    ) REFERENCES dbo.PrimaryTest
    (
    id
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 

GO

вставить строку в таблицу первичных ключей

insert PrimaryTest values(1)

вставить строку в таблицу внешнего ключа со значением, существующим в таблице первичного ключа

insert ForeignTest values(1)

Теперь это не удастся, потому что значение 2 не существует в таблице первичного ключа

insert ForeignTest values(2)

Сообщение 547, уровень 16, состояние 0, строка 1 Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_ForeignTest_PrimaryTest". Конфликт произошел в базе данных «aspnetdb», таблице «dbo.PrimaryTest», столбце «id». Заявление было прекращено.

2 голосов
/ 17 сентября 2013

Оба представляют уникальную идентификацию строки в таблице, но есть небольшая разница в том, что

ПЕРВИЧНЫЙ ключ не допускает значения NULL

пока

Ключ UNIQUE допускает только одно значение NULL.

в этом главное отличие ..

2 голосов
/ 04 июня 2010

Просто добавьте еще один пример:

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

1 голос
/ 13 декабря 2017

NOT NULL означает, что любая запись в этом конкретном столбце не должна быть нулевой. УНИКАЛЬНЫЙ означает, что каждая запись в столбце должна быть отличной. PRIMARY KEY означает, что любая запись в столбце должна быть отличной и не нулевой.

Так просто ..

  PRIMARY KEY= UNIQUE + NOT NULL
1 голос
/ 22 января 2016

Ограничение первичного ключа
1. Первичный ключ не может разрешить ноль.
2. Несколько первичных ключей НЕ допускаются.
3. В некоторых СУБД первичный ключ по умолчанию генерирует кластерный индекс.

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

Источник Википедии

0 голосов
/ 25 марта 2015

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

...