Hoe kan ik een samengestelde primaire sleutel in SQL definiëren?

Hoe kan ik een samengestelde primaire sleutel definiëren die bestaat uit twee velden in SQL?

Ik gebruik PHP om tabellen en zo te maken. Ik wil een tabelnaam votingmaken met de velden QuestionID, MemeberIDen vote. En de samengestelde primaire sleutel bestaat uit de velden QuestionIDen MemberID.

Hoe moet ik dit doen?


Antwoord 1, autoriteit 100%

Ter verduidelijking: een tabel kan maximaal één primaire sleutel hebben. Een primaire sleutel bestaat uit een of meer kolommen (uit die tabel). Als een primaire sleutel uit twee of meer kolommen bestaat, wordt dit een samengestelde primaire sleutelgenoemd. Het wordt als volgt gedefinieerd:

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

Het paar (QuestionID, MemberID) moet dan uniek zijn voor de tabel en geen van beide waarden mag NULL zijn. Als je een zoekopdracht als deze doet:

SELECT * FROM voting WHERE QuestionID = 7

het zal de index van de primaire sleutel gebruiken. Als u dit echter doet:

SELECT * FROM voting WHERE MemberID = 7

het zal niet, want om een samengestelde index te gebruiken, moeten alle toetsen van “links” worden gebruikt. Als een index op velden (A,B,C) staat en je criteria staan op B en C, dan heeft die index voor die zoekopdracht geen zin. Kies dus uit (QuestionID,MemberID) en (MemberID,QuestionID) wat het meest geschikt is voor hoe u de tabel wilt gebruiken.

Voeg indien nodig een index toe aan de andere kant:

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

Antwoord 2, autoriteit 3%

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`)
);

Antwoord 3

QuestionIDis in uw geval de primaire sleutel. U kunt MemberIDgebruiken als kandidaatsleutel (indexering vindt hierop plaats) aangezien één lid meerdere vragen kan beantwoorden. Omgekeerd heeft geen zin.

Syntaxis:

CREATE TABLE SAMPLE_TABLE  
(COL1 integer,  
COL2 integer,  
COL3 integer,  
PRIMARY KEY (COL1, COL2));  

Antwoord 4

In de Oracle-database kunnen we dit zo bereiken.

CREATE TABLE Student(
  StudentID Number(38, 0) not null,
  DepartmentID Number(38, 0) not null,
  PRIMARY KEY (StudentID, DepartmentID)
);

Other episodes