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

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

Выталкивается непосредственно из SO :

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

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

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

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

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

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

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

Поэтому правильный ответ на ваш вопрос – «соглашение» и «удобство». Нет хорошей технической причины.

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

[2] Например, в разделе «Дальнейшая нормализация модели базы реляционных данных» (1971)

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