різниця між первинним і унікальним ключем


252

Я використовую базу даних mysql. У мене плутанина між первинним і унікальним ключем.

Будь ласка, допоможіть мені, де я повинен створити первинний та унікальний ключ. Я маю на увазі, в якій ситуації ми створюємо унікальний ключ або первинний ключ.


9
wrt null-здатність хороший спосіб їх розрізнити PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
KNU

Відповіді:


233

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

  • У таблиці може бути лише один первинний ключ
  • У деяких СУБД це не може бути NULL- наприклад, додається MySQLNOT NULL
  • Первинний ключ - це унікальний ідентифікатор ключа запису

Унікальний ключ:

  • В одній таблиці може бути більше одного унікального ключа
  • Унікальний ключ може мати NULLзначення
  • Це може бути ключовим кандидатом
  • Унікальний ключ може бути NULL; кілька рядків можуть мати NULLзначення, і тому їх не можна вважати "унікальними"

11
Також потрібно додати, що цей первинний ключ може бути створений у кількох стовпцях, наприклад, Первинний ключ (CustomerID, ProductID). Це називається складеним первинним ключем. Це для уточнення першого пункту, оскільки це може сприймати так, як є (прочитайте один ключ => один стовпець) новим учасником для sql:)
ken

1
Що ти означає "може бути ключовим кандидатом"?

1
"дозволений лише один нуль" - це неправда, принаймні, не для MySQL.
Яніс Елмеріс

69
Унікальний ключ може бути нульовим і не може бути унікальним. Значить ??
Пратік

20
@PratikCJoshi Він, ймовірно, означає, що в іншому випадку унікальний ключ може бути декількома рядками з нулем.
Джон

77

Унікальний ключ (Великобританія) : це стовпчик або група стовпців, які можуть ідентифікувати унікальність підряд.

Первинний ключ (ПК) : це також стовпчик або група стовпців, які можуть ідентифікувати унікальність підряд.

Отже, Первинний ключ - це ще одне ім'я унікального ключа, але реалізація за замовчуванням у SQL Server відрізняється від первинного та унікального ключа.

За замовчуванням:

  1. ПК створює індекс кластеру, а Великобританія створює індекс без кластера.
  2. PK не є нульовим, але Великобританія допускає нулі (Примітка: За замовчуванням)
  3. На столі може бути лише один і лише один ПК, але може бути декілька UK
  4. Ви можете змінити реалізацію за замовчуванням залежно від вашої потреби.

Це дійсно залежить, яка ваша мета, вирішуючи, чи створити Великобританію чи ПК. Звідси випливає аналогія на кшталт "Якщо є команда з трьох людей, тож усі вони є однолітками, але знайдеться одна з них, яка буде парою однолітків: ПК та Великобританія мають подібне відношення". Я б запропонував прочитати цю статтю: Приклад, поданий автором, може здатися не підходящим, але спробуйте отримати загальну думку.

http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html


прочитайте близько 10 веб-сторінок, де сказано, що ПК може містити більше одного стовпця. Тоді як на столі може бути один і єдиний ПК?

@android ПК з більш ніж одним стовпцем діє як один стовпчик щодо унікальності. Принаймні, у PostgreSQL це означає, що [table_name]_pkeyдо таблиці додається новий стовпець (з ім'ям за замовчуванням ) (я чув, що це називається сурогатним ключем). Джерело: postgresqltutorial.com/postgresql-primary-key Я новачок у всьому цьому, тому вдячний би більш обізнаним плакатом, щоб вказати на пропущені нюанси.
Poik

Гаразд, це не стовпчик. Я неправильно прочитав. Це контрант, а не колонка. Ще є кластерний індекс, але це понад два стовпчики замість одного. І кожен стовпчик у ньому не є первинним ключем самостійно, натомість весь набір - це первинний ключ. Тож у цих випадках не більше одного ПК.
Poik

46

Для організації чи бізнесу існує стільки фізичних осіб (таких як люди, ресурси, машини тощо) та віртуальних утворень (їх Завдання, операції, діяльність). Зазвичай бізнесу потрібно записувати та обробляти інформацію цих суб'єктів господарювання. Ці суб’єкти господарської діяльності ідентифікуються в межах цілого домену бізнесу.

Згідно з перспективою RDBMS, Key (він же - Candidate Key) - це значення або набір значень, що однозначно ідентифікує сутність.

Для таблиці DB-таблиць існує так багато ключів, і вони можуть бути придатними для первинного ключа. Таким чином, що всі ключі, первинний ключ, унікальний ключ тощо називаються разом як ключем кандидата. Однак DBA, який обрав ключ від кандидата для пошуку записів, називається Первинний ключ.

Різниця між первинним і унікальним ключем

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

2. Індексація: за замовчуванням SQL-механізм створює кластерний індекс на первинному ключі, якщо його немає, і некластеризований індекс на унікальному ключі.

3. Нульовість: Первинний ключ не включає нульових значень, тоді як унікальний ключ може.

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

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

Для отримання додаткової інформації та прикладів:

http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html


7
У п'ятій точці ви говорите, що ми не можемо змінити або видалити первинні значення. ми точно можемо змінити основні значення таблиці, використовуючи оператор оновлення.
Капіль

3
@Kapil таким чином перемагає цілі використання первинного ключа.
Gokigooooks

2
кластерний індекс: рядки зберігаються фізично на диску в тому ж порядку, що і індекс
Duy Đặng

26

Первинний ключ повинен бути унікальним.

Унікальний ключ не повинен бути первинним ключем - див. Ключ-кандидат .

Тобто на столі може бути більше однієї комбінації стовпців, яка може однозначно ідентифікувати рядок - лише один із них може бути обраний як основний ключ. Інші, хоча й унікальні, - це ключі кандидатів.


17

Різниця між первинним ключем та унікальним ключем

+-----------------------------------------+-----------------------------------------------+
|                Primary Key              |                    Unique Key                 |
+-----------------------------------------+-----------------------------------------------+
| Primary Key can't accept null values.   | Unique key can accept only one null value.    |
+-----------------------------------------+-----------------------------------------------+
| By default, Primary key is clustered    | By default, Unique key is a unique            |
| index and data in the database table is | non-clustered index.                          |
| physically organized in the sequence of |                                               |
| clustered index.                        |                                               |
+-----------------------------------------+-----------------------------------------------+
| We can have only one Primary key in a   | We can have more than one unique key in a     |
| table.                                  | table.                                        |
+-----------------------------------------+-----------------------------------------------+
| Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
| into another table.                     | key into another table.                       |
+-----------------------------------------+-----------------------------------------------+

Детальну інформацію можна знайти на веб-сайті : http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-bet between-Primary-Key-and-Unique-
Key.html


16

Первинний ключ має семантику ідентифікації рядка бази даних. Тому для даної таблиці може бути лише один первинний ключ, а унікальних ключів може бути багато.

Також з тієї ж причини первинний ключ не може бути NULL (принаймні, в Oracle, не впевнений в інших базах даних)

Оскільки він визначає рядок, він ніколи не повинен змінюватися. Зміна первинних ключів обов'язково заподіює серйозний біль і, ймовірно, вічне прокляття.

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

Унікальні клавіші з іншого боку можуть змінюватися настільки, наскільки ви хочете.


22
+1 за згадування ризику вічного прокляття. Настав час ввести теологію в теорію реляційних баз даних.
Невілл Куйт

PK також не може бути NULL в SQL Server
mrd3650

7

Первинний ключ - це унікальний ключ.

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


6
  • Подумайте, що назва таблиці найма.
  • Первинний ключ
  • Первинний ключ не може приймати нульові значення. первинний ключ забезпечує унікальність стовпця. У нас може бути лише один первинний ключ у таблиці.
  • Унікальний ключ
  • Унікальний ключ може приймати нульові значення. унікальний ключ також забезпечує унікальність стовпця. Ви можете подумати, якщо унікальний ключ містить нульові значення, то чому він може бути унікальним? так, хоча він може приймати нульові значення, він застосовує унікальність стовпця. просто подивіться на малюнок. Тут Emp_ID є первинним, ідентифікатор Citizen - унікальний. Сподіваюся, ти зрозумієш. Ми можемо використовувати кілька унікальних ключів у таблиці. введіть тут опис зображення

1
ми не можемо вставити більше одного нульового значення в унікальний ключ, і він також не дозволить дублікати.
Масум

@ mahedi-hasan Чи не у стовпці Унікальний ключ має бути лише одне значення NULL? Як за останні два ряди в ідентифікаторі громадянина NULL? Я щось тут пропускаю?
супернова

Щойно отримав відповідь на мій власний коментар вище. Схоже, MySQL дозволяє декілька NULL в унікальних і так виглядає, як @Mahedi_Hasan використовується MySQL. stackoverflow.com/questions/3712222/…
supernova

6

Мені відомо, що це питання вже кілька років, але я хотів би дати відповідь на це пояснення, чому, а не як

Призначення первинного ключа : однозначно ідентифікувати рядок у базі даних => рядок являє собою окремий екземпляр типу сутності, змодельований таблицею. Первинний ключ забезпечує цілісність суб'єкта господарювання, цілісність об'єднання AKA. Первинний ключ - це кластерний індекс, тобто він визначає порядок фізичного зберігання даних у таблиці.

Призначення унікального ключа : Гаразд, з Первинним ключем у нас є спосіб однозначно визначити рядок. Але в мене є потреба в бізнесі така, що інший стовпчик / набір стовпців повинен мати унікальні значення. Ну, технічно, враховуючи, що цей стовпець (и) є унікальним, він може стати кандидатом для забезпечення цілісності сутності. Але, наскільки ми знаємо, цей стовпець може містити дані, що походять від зовнішньої організації, у мене можуть бути сумніви щодо унікальності. Я не можу довіряти йому, щоб забезпечити цілісність сутності. Я просто роблю це унікальним ключем для виконання моєї бізнес-вимоги.

Ось так!


1

Якщо дизайн Вашої бази даних такий, що в них немає потреби в зовнішньому ключі, тоді Ви можете перейти з унікальним ключем ( але пам’ятайте, що унікальний ключ допускає єдине нульове значення ).

Якщо у вашій базі даних вимагається зовнішній ключ, тоді ви не залишаєте іншого вибору, вам доведеться переходити з первинним ключем.

Щоб побачити різницю між унікальним та первинним ключем, відвідайте тут


1

Унікальний ключ: - Він повинен використовуватися, коли ви повинні надати унікальне значення. У разі унікального ключа це означає, що нульові значення також дозволені. Унікальні клавіші - це ті ключі, які є унікальними і не схожими в цьому стовпчику, наприклад, наприклад, ім'я вашого улюбленця .it може бути не таким, як null, і якщо ви запитуєте в контексті бази даних, то слід зазначити, що кожен null відрізняється від іншого null в базі даних. EXCEPT-SQL Server, де null = null є істинним


первинний ключ: - Його слід використовувати, коли вам потрібно однозначно вказати row.primary є ключовим елементом, який є унікальним для кожного рядка в обмеженні бази даних - це те, що він не дозволяє в ньому нулю. Отже, ви могли бачити, що база даних мати стовпчик, який збільшується автоматично, і це первинний ключ таблиці. плюс він може бути використаний в якості зовнішнього ключа в іншій таблиці. Приклад можна замовитиId у таблиці замовлень , billId у вексельній таблиці .

тепер повертаємось до ситуації, коли ним користуватися: -

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

2) унікальний ключ у таблиці, де це не впливає на таблицю чи всю базу даних, чи берете ви нуль для конкретного стовпця, як закуски в ресторані, можливо, ви не приймаєте закусок у ресторані


1

різниця між первинним ключем та унікальним ключем

І те, Primary keyі Unique Keyінше використовується для однозначного визначення рядка в таблиці. Primary Keyстворює clustered indexколонку, тоді як a Unique creates an unclustered index of the column.

A Primary Keyне дозволяє NULL value, проте a Unique Keyдозволяє one NULL value.


0

Просто первинний ключ є унікальним і не може бути нульовим, унікальний може бути нульовим, а може і не унікальним.


"унікальний може бути нульовим і не може бути унікальним". Що may not be uniqueтут означає?
Юсуф Хассан

0

Первинні ключі

Основне призначення первинного ключа - забезпечити засіб для ідентифікації кожного запису в таблиці.

Первинний ключ забезпечує засіб ідентифікації рядка, використовуючи дані всередині рядка. Первинний ключ може базуватися на одному або декількох стовпцях, таких як ім’я та прізвище; однак у багатьох проектах первинний ключ - це автоматично створене число зі стовпця ідентичності.

Первинний ключ має такі характеристики:

  1. Для таблиці може бути лише один первинний ключ.
  2. Первинний ключ складається з одного або декількох стовпців.
  3. Первинний ключ забезпечує цілісність таблиці сутності.
  4. Усі визначені стовпці повинні бути визначені як NOT NULL.
  5. Первинний ключ однозначно ідентифікує рядок.
  6. Первинні ключі за замовчуванням призводять до CLUSTERED унікальних індексів.

Унікальні ключі

Унікальний ключ також називають унікальним обмеженням. Унікальне обмеження може бути використане для забезпечення унікальності рядків у базі даних.

Хіба ми вже не робимо це за допомогою первинного ключа? Так, ми маємо, але в таблиці може бути кілька наборів стовпців, які вам потрібні унікальні.

У SQL Server унікальний ключ має такі характеристики:

  1. На столі може бути кілька унікальних ключів.
  2. Унікальні ключі за замовчуванням призводять до НЕКЛЮЧЕНО Унікальних індексів.
  3. Один або кілька стовпців складають унікальний ключ.
  4. Стовпець може бути NULL, але дозволено один NULL на стовпець.
  5. На унікальне обмеження може посилатися обмеження зовнішнього ключа.

джерело: тут


0

Основними характеристиками основного ключа є:

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

Основними особливостями Унікального ключа є:

Він також може містити унікальне значення для кожного рядка даних.

Він також може містити нульові значення.

Кілька унікальних клавіш у таблиці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.