Как я могу определить составной первичный ключ в SQL? - PullRequest
94 голосов
/ 10 июля 2009

Как определить составной первичный ключ, состоящий из двух полей в SQL?

Я использую PHP для создания таблиц и всего остального. Я хочу сделать имя таблицы voting с полями QuestionID, MemeberID и vote. А составной первичный ключ состоит из полей QuestionID и MemberID.

Как мне это сделать?

Ответы [ 2 ]

196 голосов
/ 10 июля 2009

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

CREATE TABLE voting (
  QuestionID NUMERIC,
  MemberID NUMERIC,
  PRIMARY KEY (QuestionID, MemberID)
);

Пара (QuestionID, MemberID) должна быть уникальной для таблицы, и ни одно из значений не может быть NULL. Если вы делаете запрос, подобный этому:

SELECT * FROM voting WHERE QuestionID = 7

будет использовать индекс первичного ключа. Однако, если вы делаете это:

SELECT * FROM voting WHERE MemberID = 7

этого не произойдет, потому что для использования составного индекса необходимо использовать все ключи слева. Если индекс находится по полям (A, B, C), а ваши критерии - по B и C, тогда этот индекс для вас бесполезен. Поэтому выберите один из вариантов (QuestionID, MemberID) и (MemberID, QuestionID) в зависимости от того, как вы будете использовать таблицу.

При необходимости добавить индекс по другому:

CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);
6 голосов
/ 10 июля 2009
CREATE TABLE `voting` (
  `QuestionID` int(10) unsigned NOT NULL,
  `MemberId` int(10) unsigned NOT NULL,
  `vote` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`QuestionID`,`MemberId`)
);
...