Comment puis-je définir une clé primaire composite dans SQL?
-
12-09-2019 - |
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?
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`)
);