web-dev-qa-db-de.com

Wie kann ich einen zusammengesetzten Primärschlüssel in SQL definieren?

Wie kann ich in SQL einen zusammengesetzten Primärschlüssel definieren, der aus zwei Feldern besteht?

Ich verwende PHP zum Erstellen von Tabellen und allem. Ich möchte einen Tabellennamen voting mit den Feldern QuestionID, MemeberID und vote. Und der zusammengesetzte Primärschlüssel besteht aus den Feldern QuestionID und MemberID.

Wie soll ich das machen?

96
Zeeshan Rang

Nur zur Verdeutlichung: Eine Tabelle kann höchstens einen Primärschlüssel haben. Ein Primärschlüssel besteht aus einer oder mehreren Spalten (aus dieser Tabelle). Wenn ein Primärschlüssel aus zwei oder mehr Spalten besteht, wird er als zusammengesetzter Primärschlüssel bezeichnet. Es ist wie folgt definiert:

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

Das Paar (QuestionID, MemberID) muss dann für die Tabelle eindeutig sein und keiner der Werte darf NULL sein. Wenn Sie eine Abfrage wie folgt durchführen:

SELECT * FROM voting WHERE QuestionID = 7

es wird der Index des Primärschlüssels verwendet. Wenn Sie dies jedoch tun:

SELECT * FROM voting WHERE MemberID = 7

dies ist nicht der Fall, da für die Verwendung eines zusammengesetzten Indexes alle Schlüssel von "links" verwendet werden müssen. Befindet sich ein Index in Feldern (A, B, C) und befinden sich Ihre Kriterien in B und C, ist dieser Index für diese Abfrage für Sie nicht von Nutzen. Wählen Sie also aus (QuestionID, MemberID) und (MemberID, QuestionID), was für die Verwendung der Tabelle am besten geeignet ist.

Fügen Sie bei Bedarf einen anderen Index hinzu:

CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);
200
cletus
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`)
);
6
Justin