Почему у нас не может быть больше одного первичного ключа?

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

12 ответов


вытащил прямо из так:

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

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

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

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


на самом деле E. F. Codd (изобретатель модели реляционной базы данных) [1] создал термин "первичный ключ", чтобы означать любое число ключей отношения - не только одного. Он дал понять, что вполне возможно иметь более одного такого ключа. Его предложение состояло в том, чтобы конструктор баз данных мог выбрать один ключ в качестве предпочтительного идентификатора ("на primary key") - но в принципе это было необязательно, и такой выбор был" произвольным " (это было его слово). Потому что все ключи обладают теми же свойствами, что и друг друга нет фундаментальной необходимости выбирать один над другим.

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

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

Так что правильный ответ на ваш вопрос - "конвенция" и "удобство". Нет никаких веских технических причин.

[1] реляционная модель данных для больших общих банков данных (1970)

[2] например. в "дальнейшей нормализации модели реляционной базы данных" (1971)


PRIMARY KEY обычно эквивалентно UNIQUE INDEX NOT NULL. Так что вы можете эффективно иметь несколько "первичных ключей" на одной таблице.


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

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


первичный ключ-это ключ, который однозначно идентифицирует эту запись.

Я не уверен, что вы спрашиваете, Может ли a) быть один первичный ключ, охватывающий несколько столбцов, или b) если у вас может быть несколько ключей, которые однозначно идентифицируют запись.

возможно первое, известное как составной первичный ключ.

Вторая можно, но только один называется первичным ключом.


потому что "первичный" в "первичном ключе" обозначает его, МММ, сингулярность(?).

но если вам нужно больше, вы можете определить UNIQUE ключи, которые имеют совершенно одинаковое поведение.


техническая причина в том, что может быть только один основной. Иначе это не называлось бы так.

однако первичный ключ может содержать несколько столбцов - см. 7.5.2. Многостолбцовые Индексы


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


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


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


  1. для некластеризованного индекса мы можем создать два индекса и, как правило, выполняются на столбцах без первичного ключа , используемых в предложениях JOIN, WHERE, ORDER BY.
  2. в то время как в кластеризованном индексе у нас есть только один индекс и это на первичном ключе. Таким образом, если у нас есть два первичных ключа, есть двусмысленность.
  3. также в ссылочную целостность существует неопределенность выбора одного из двух первичных ключей.

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