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?

È stato utile?

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`)
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top