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

365
задан Angel Politis 29 January 2017 в 16:51
поделиться

5 ответов

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

CREATE TABLE userdata (
  userid INT,
  userdataid INT,
  info char(200),
  primary key (userid, userdataid)
);

Обновление: Вот ссылка с более подробным описанием составных первичных ключей.

530
ответ дан Sarfaraaz 23 November 2019 в 00:09
поделиться

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

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

188
ответ дан RB. 23 November 2019 в 00:09
поделиться

Таблица может иметь несколько ключей-кандидатов. Каждый ключ-кандидат является столбцом или набором столбцов, которые УНИКАЛЬНЫ, взяты вместе, и также NOT NULL. Таким образом определения значений для всех столбцов любого ключа-кандидата достаточно, чтобы решить, что существует одна строка, которая соответствует критериям или никаким строкам вообще.

Ключи-кандидаты являются фундаментальным понятием в реляционной модели данных.

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

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

36
ответ дан Walter Mitty 23 November 2019 в 00:09
поделиться

Некоторые люди используют термин "первичный ключ" для значения точно целочисленного столбца, который генерировал его значения некоторым автоматическим механизмом. Например AUTO_INCREMENT в MySQL или IDENTITY в Microsoft SQL Server. Вы используете первичный ключ в этом смысле?

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

mysql> create table foo (
  id int primary key auto_increment, 
  id2 int auto_increment
);
ERROR 1075 (42000): Incorrect table definition; 
there can be only one auto column and it must be defined as a key

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

2
ответ дан Bill Karwin 23 November 2019 в 00:09
поделиться

Да, Его возможное в SQL, но мы не можем установить больше чем один первичный ключ в MsAccess. Затем я не знаю о других базах данных.

CREATE TABLE CHAPTER (
    BOOK_ISBN VARCHAR(50) NOT NULL,
    IDX INT NOT NULL,
    TITLE VARCHAR(100) NOT NULL,
    NUM_OF_PAGES INT,
    PRIMARY KEY (BOOK_ISBN, IDX)
);
-3
ответ дан stema 23 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: