Как первичный ключ может быть только один в таблице - PullRequest
0 голосов
/ 03 ноября 2018

После долгих поисков я нашел 2 утверждения для первичного ключа.

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

Некоторые говорят, что первичный ключ может состоять из нескольких столбцов.

А также говорит, что это разница между Первичным ключом и Уникальным ключом.

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

Но этот пост также смешивает эту разницу.

Мой вопрос:

When Primary key can consists of multiple columns, then how can it be only 
1 for a table and then  how this can differ from Unique Key except from   
null value difference?

Ответы [ 7 ]

0 голосов
/ 03 ноября 2018

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

Это правда, что таблица может иметь только один первичный ключ. Этот ключ может содержать несколько столбцов (комбинация столбцов). Эта комбинация столбцов является коллективной и является первичным ключом.

Давайте рассмотрим пример

Таблица A

Id, Clientid, Branchid, Имя, Адрес, .......

Здесь я создал первичный ключ с комбинацией «Id, Clientid, Branchid»

так что возможно иметь дубликат Id или дубликат CLientid или дубликат Branchid, но невозможно иметь всю комбинацию как дубликат

например

Id    Clientid    Branchid  
1        1           1  
1        2           1  
1        1           2  
2        1           1

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

Id    Clientid    Branchid  
 1        1           1  
 1        1           1  

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

0 голосов
/ 03 ноября 2018

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

  • Комбинация значений в столбцах уникальна.
  • Значения в каждом столбце никогда не бывают NULL.
  • В таблице только один первичный ключ.

Первые два условия могут быть истинными для любого числа столбцов или комбинаций столбцов в таблице. Они называются кандидат первичными ключами. Вы бы реализовали их с ограничениями unique и not null.

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

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

0 голосов
/ 03 ноября 2018

В SQL: любое количество наборов из одного или нескольких столбцов может быть объявлено UNIQUE. Один набор столбцов может быть объявлен PK (PRIMARY KEY). PK означает УНИКАЛЬНО, НЕ NULL. Набор из одного столбца является «простым», а набор из более чем одного - «составным».

В стандартном SQL набор столбцов UNIQUE имеет различное значение subrow в каждой строке, где NULL <> NULL. MySQL делает это, но некоторые СУБД оценивают эту «отличную» обработку NULL как NULL. Прочитайте инструкции.

СУБД SQL используют объявления UNIQUE & PK для других целей - обычно для индексов по умолчанию. INDEX не является стандартным SQL и представляет собой другое понятие. Прочитайте инструкции.

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

Нет необходимости в PK в SQL или RM - это просто традиция.

Re связанные термины в SQL и RM.

0 голосов
/ 03 ноября 2018

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

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

0 голосов
/ 03 ноября 2018

Первичный ключ используется оптимизатором для создания кластеризованного индекса вокруг этого ключа. Если этот ключ является комбинацией столбцов (например, в таблице, которая обрабатывает отношения «многие ко многим»), то это нормально. Уникальный ключ - это атрибут чего-то, что является уникальным для этой вещи, но не атрибут, который вы хотите использовать в качестве первичного ключа.

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

Аналогичным образом мы обрабатываем таблицы групп пользователей с первичными ключами в нескольких столбцах. Таким образом, сочетание идентификатора пользователя и идентификатора пользователя является первичным ключом, предотвращающим вход людей в одну и ту же группу более одного раза. Использование первичного ключа здесь, а не уникального ключа, в основном соответствует 3-й нормальной форме.

Надеюсь, это поможет, но если вы хотите получить дополнительные разъяснения, пожалуйста, дайте мне знать.

0 голосов
/ 03 ноября 2018

В прочитанном нет несоответствия

Первичный ключ - это «один или несколько столбцов, чья комбинация значений должна отображаться только в одной строке»

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

Key1, Key2
1   , A
1   , B
2   , A
2   , B

Здесь верно, что и столбец key1, и столбец key2 имеют повторяющиеся значения, но когда мы рассматриваем комбинации ключа 1 и ключа 2, они уникальны: 1A, 1B, 2A, 2B

Относительно запроса PK против уникального ключа см. Этот ответ. Более подробно о первичных ключах, основной принцип которых заключается в том, что ни один из столбцов, составляющих первичный ключ, не допускает нулевого значения: Что не так с обнуляемыми столбцами в составных первичных ключах?

0 голосов
/ 03 ноября 2018

В таблице может быть только один первичный ключ, но он может состоять из нескольких столбцов. Это не означает, что каждый столбец является первичным ключом, но комбинация значений all этих столбцов уникальна.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...