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


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

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

как я должен это сделать?

2 89

2 ответа:

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

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);
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`)
);