Question

Comment puis-je définir une clé primaire composite constitué de deux champs dans SQL?

J'utilise PHP pour créer des tables et tout. Je veux faire un nom de table voting avec des champs QuestionID, MemeberID et vote. Et la clé primaire composite se compose des champs QuestionID et MemberID.

Comment dois-je faire?

Était-ce utile?

La solution

Juste pour clarifier: une table peut avoir au plus une clé primaire. Une clé primaire est constitué d'une ou plusieurs colonnes (de la table). Si une clé primaire se compose de deux colonnes ou plus, il est appelé une clé primaire composite . Il est défini comme suit:

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

La paire (QuestionID, MemberID) doit alors être unique pour la table et la valeur ne peut être NULL. Si vous faites une requête comme ceci:

SELECT * FROM voting WHERE QuestionID = 7

il utilisera l'index de la clé primaire. Si toutefois vous faites ceci:

SELECT * FROM voting WHERE MemberID = 7

il ne sera pas à cause d'utiliser un indice composite nécessite l'utilisation de toutes les clés de la « gauche ». Si un indice est sur les champs (A, B, C) et vos critères est sur B et C, alors que l'indice est d'aucune utilité pour vous pour cette requête. Vous pouvez donc choisir (QuestionID, MemberID) et (MemberID, QuestionID) selon le plus approprié pour la façon dont vous utiliserez la table.

Si nécessaire, ajoutez un index sur l'autre:

CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);

Autres conseils

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`)
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top