Come posso definire una chiave primaria composita in SQL?
-
12-09-2019 - |
Domanda
Come posso definire una chiave primaria composita composta da due campi in SQL?
Sto usando PHP per creare tabelle e tutto.Voglio creare un nome per la tabella voting
con campi QuestionID
, MemeberID
, E vote
.E la chiave primaria composita è costituita dai campi QuestionID
E MemberID
.
Come dovrei farlo?
Soluzione
Solo per chiarimenti:una tabella può avere al massimo una chiave primaria.Una chiave primaria è costituita da una o più colonne (da quella tabella).Se una chiave primaria è composta da due o più colonne viene chiamata a chiave primaria composita.È definito come segue:
CREATE TABLE voting (
QuestionID NUMERIC,
MemberID NUMERIC,
PRIMARY KEY (QuestionID, MemberID)
);
La coppia (QuestionID,MemberID) deve quindi essere univoca per la tabella e nessuno dei due valori può essere NULL.Se fai una query come questa:
SELECT * FROM voting WHERE QuestionID = 7
utilizzerà l'indice della chiave primaria.Se tuttavia fai questo:
SELECT * FROM voting WHERE MemberID = 7
non lo farà perché per utilizzare un indice composito è necessario utilizzare tutte le chiavi da "sinistra".Se un indice è sui campi (A,B,C) e i tuoi criteri sono su B e C, quell'indice non ti è utile per quella query.Quindi scegli tra (QuestionID, MemberID) e (MemberID, QuestionID) a seconda di come utilizzerai la tabella.
Se necessario, aggiungi un indice sull'altro:
CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);
Altri suggerimenti
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`)
);