Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

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

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

Ключ PRIMARY не позволяет значения NULL

while

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

Это основное отличие.

Ответ 8

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

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

Источник Wikipedia

Ответ 9

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

Так просто..

  PRIMARY KEY= UNIQUE + NOT NULL

Ответ 10

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

Ответ 11

Я подумал, зачем пробовать это

Возможна ли уникальная ненулевая комбинация, используемая для установления внешнего ключа..

Выше линии вы сказали ПЕРВИЧНЫЙ КЛЮЧ = УНИКАЛЬНО + НЕ НУЛЬ

Ответ 12

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