Giusto per chiarimento: 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 chiave primaria composta . È 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 esegui una query come questa:
SELECT * FROM voting WHERE QuestionID = 7
userà l'indice della chiave primaria. Se invece fai questo:
SELECT * FROM voting WHERE MemberID = 7
non è così perché per usare un indice composto è necessario utilizzare tutte le chiavi da "sinistra". Se un indice è sui campi (A, B, C) ei tuoi criteri sono su B e C, quell'indice non è di alcuna utilità per quella query. Quindi scegli tra (QuestionID, MemberID) e (MemberID, QuestionID) a seconda di quale è più appropriato per come utilizzerai la tabella.
Se necessario, aggiungi un indice sull'altro:
CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);