В чем разница первичного ключа b/w и уникального ключа

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

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

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

11 ответов


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

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

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

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


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

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

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


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

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

согласно РСУБД перспективным: Ключ (a.к. ключ-кандидат), значение или набор значений, которые однозначно идентифицируют сущность. Для Db-таблицы существует так много ключей, которые могут иметь право на первичный ключ. Таким образом, все ключи, первичный ключ, уникальный ключ и т. д. коллективно называются ключом-кандидатом.

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

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

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

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

3. Принимать значение null: первичный ключ не включает нулевые значения, тогда как уникальный ключ может.

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

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

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


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


первичный ключ не допускает нулей, уникальный ключ допускает один null (на 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, Уровень 16, Состояние 0, Строка 1 Оператор INSERT конфликтовал с ограничением внешнего ключа "FK_ForeignTest_PrimaryTest". Конфликт произошел в базе данных "aspnetdb", таблица "dbo.PrimaryTest", колонка "id". Заявление было прекращено.


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

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


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

первичный ключ не допускает значений NULL

пока

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

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


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

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

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


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


NOT NULL означает, что любая запись в этом конкретном столбце не должна быть null. UNIQUE означает, что каждая запись в столбце должна быть отдельной. Первичный ключ означает, что любая запись в столбце должна быть отдельной, а не нулевой.

Так Просто..

  PRIMARY KEY= UNIQUE + NOT NULL

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