Таблица может иметь Составной Первичный ключ , который является первичным ключом, сделанным из двух или больше столбцов. Например:
CREATE TABLE userdata (
userid INT,
userdataid INT,
info char(200),
primary key (userid, userdataid)
);
Обновление: Вот ссылка с более подробным описанием составных первичных ключей.
У Вас может только быть один первичный ключ, но у Вас может быть несколько столбцов в Вашем первичном ключе.
у Вас могут также быть Уникальные индексы на Вашей таблице, которая будет работать немного как первичный ключ, в котором они осуществят уникальные значения и ускорят запросы тех значений.
Таблица может иметь несколько ключей-кандидатов. Каждый ключ-кандидат является столбцом или набором столбцов, которые УНИКАЛЬНЫ, взяты вместе, и также NOT NULL. Таким образом определения значений для всех столбцов любого ключа-кандидата достаточно, чтобы решить, что существует одна строка, которая соответствует критериям или никаким строкам вообще.
Ключи-кандидаты являются фундаментальным понятием в реляционной модели данных.
Это - обычная практика, если несколько ключей присутствуют в одной таблице, для обозначения одного из ключей-кандидатов как первичный ключ. Это - также обычная практика, чтобы заставить любые внешние ключи к таблице ссылаться на первичный ключ, а не любой другой ключ-кандидат.
я рекомендую эти методы, но нет ничего в реляционной модели, которая требует выбора первичного ключа среди ключей-кандидатов.
Некоторые люди используют термин "первичный ключ" для значения точно целочисленного столбца, который генерировал его значения некоторым автоматическим механизмом. Например 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
В некоторых других брендах базы данных, Вы в состоянии определить больше чем один столбец автоматической генерации в таблице.
Да, Его возможное в 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)
);