Каково различие черно-белый Первичный ключ и Уникальный ключ

Я пытался узнать, что это в Google, но не удовлетворительном ответе дано там. Может кто-либо объяснять твердое различие.

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

Когда я должен использовать Первичный ключ и когда использовать Уникальный ключ?

26
задан a_horse_with_no_name 10 January 2014 в 07:05
поделиться

5 ответов

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

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

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

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

36
ответ дан 28 November 2019 в 06:30
поделиться

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

4
ответ дан 28 November 2019 в 06:30
поделиться

Первичный ключ не допускает нулей, уникальный ключ допускает один нуль (на sql server и несколько нулей на 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)

Msg 547, Level 16, State 0, Line 1 Оператор INSERT вступил в конфликт с ограничением FOREIGN KEY "FK_ForeignTest_PrimaryTest". Конфликт произошел в базе данных "aspnetdb", таблица "dbo.PrimaryTest", столбец 'id'. Оператор был завершен.

4
ответ дан 28 November 2019 в 06:30
поделиться

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

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

2
ответ дан 28 November 2019 в 06:30
поделиться

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

Однако в SQL есть нечто, называемое ограничением UNIQUE, которое немного отличается от ограничения SQL PRIMARY KEY - оба обеспечивают уникальность, но PRIMARY KEY может использоваться только один раз для каждой таблицы. Ограничения UNIQUE также допускают значения NULL, тогда как ограничения PRIMARY KEY - нет.

Таким образом, потенциально сбивающий с толку термин «уникальный ключ» чаще всего используется для обозначения ключа, навязанного ограничением UNIQUE.Его можно даже использовать для обозначения ограничения UNIQUE для столбцов, допускающих значение NULL, хотя, на мой взгляд, это очень сомнительное использование этого термина, потому что набор столбцов, содержащих значения NULL, не может быть ключом-кандидатом, поэтому использование слова «ключ» для значения NULL столбцы не совсем правильные и обязательно вызовут путаницу.

11
ответ дан 28 November 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: