Каково максимальное количество первичных ключей в таблице базы данных? - PullRequest
0 голосов
/ 09 февраля 2009

Каково максимальное количество первичных ключей в таблице базы данных?

Ответы [ 9 ]

7 голосов
/ 09 февраля 2009

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

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

6 голосов
/ 09 февраля 2009

В теории баз данных наиболее критичные ограничения для таблицы называются ключами-кандидатами . Значения в столбце (столбцах) ключа-кандидата однозначно определяют значения, хранящиеся в других столбцах строки таблицы - это функциональная зависимость и ключевой аспект теории нормализации. (Строго говоря, зависимости соединения являются ключевыми; функциональная зависимость является частным случаем зависимости соединения.) Таблица может иметь несколько ключей-кандидатов. Из этих возможных ключей максимум один может быть обозначен как первичный ключ; другие становятся «альтернативными» ключами (но не по каким-то причинам «вторичными ключами», хотя для них это кажется очевидным названием).

Моя любимая иллюстрация нескольких ключей-кандидатов - это таблица элементов из химии и физики (и тот факт, что она называется «таблицей» - это хорошо):

CREATE TABLE elements
(
    atomic_number   INTEGER NOT NULL UNIQUE
                    CHECK (atomic_number > 0 AND atomic_number < 120),
    symbol          CHAR(3) NOT NULL UNIQUE,
    name            CHAR(20) NOT NULL UNIQUE,
    atomic_weight   DECIMAL(8,4) NOT NULL,
    stable          CHAR(1) DEFAULT 'Y' NOT NULL
                    CHECK (stable IN ('Y', 'N'))
);

Он имеет 3 ключа-кандидата - атомный номер, символ и имя (и эмпирически, вы, вероятно, могли бы использовать атомный вес в качестве четвертого, но он не уникален так же, как остальные три) , Любой из них может быть обозначен как первичный ключ, но обычно используется либо атомный номер, либо символ. Какой из них предпочтителен, зависит в значительной степени от того, имеете ли вы дело с химией (в этом случае символ является победителем), или (под) ядерной физикой, и в этом случае атомный номер, вероятно, более важен. Ваши вторичные таблицы, такие как таблица изотопов , будут иметь перекрестную ссылку на атомный номер; Ваши вторичные таблицы, относящиеся к химическим соединениям, скорее всего, дадут перекрестную ссылку на символ. (Кстати, знаете ли вы, что «пока неизолированные» элементы с атомными номерами свыше 100 имеют трехсимвольные сокращения?)

5 голосов
/ 09 февраля 2009

Ну, если вы спросите, какое максимальное количество столбцов , которое может составить первичный ключ, для SQL Server это 16.

Ссылка: Характеристики максимальной емкости для SQL Server .

1 голос
/ 23 февраля 2015

Может быть только один первичный ключ, поскольку Реляционные базы данных являются программными выражениями 12 правил Эдгара Кодда для реляционной модели, набора из 13 правил, которые математически гарантируют целостность, согласованность и атомарность, поэтому объект с более чем одним основным ключ не является таблицей базы данных, поскольку он нарушает правило codd.

1 голос
/ 09 февраля 2009

Я думаю, что Мадхина, возможно, на самом деле хотела узнать, сколько строк может иметь таблица, в которой используется первичный ключ с автоинкрементом ... и если так, то это зависит от используемой СУБД и того, как вы ее создали к какому типу данных относится первичный ключ), поэтому вам нужно будет более подробно объяснить это.

1 голос
/ 09 февраля 2009

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

У вас могут быть другие уникальные индексы из одного или нескольких столбцов, но они не могут быть назначены PK. (Но их поведение будет таким же, как если бы они были, так что это просто семантика, чтобы сказать, что вы можете иметь только один.)

0 голосов
/ 09 февраля 2009

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

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

Например, таблица SQL Server, которая имеет один единственный целочисленный столбец в качестве первичного ключа, может содержать 4 294 967 295 записей (значения PK от -2 147 483 648 до 2 147 483 647).

0 голосов
/ 09 февраля 2009

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

0 голосов
/ 09 февраля 2009

У вас может быть не более 1 первичного ключа, но он может быть составным (с несколькими столбцами в этом ключе)

...