문제

SQL의 두 필드로 구성된 복합 기본 키를 어떻게 정의 할 수 있습니까?

PHP를 사용하여 테이블과 모든 것을 만들고 있습니다. 테이블 이름을 만들고 싶습니다 voting 필드와 함께 QuestionID, MemeberID, 그리고 vote. 복합 기본 키는 필드로 구성됩니다 QuestionID 그리고 MemberID.

어떻게해야합니까?

도움이 되었습니까?

해결책

설명을 위해 : 테이블은 최대 하나의 주요 키를 가질 수 있습니다. 기본 키는 하나 이상의 열 (해당 테이블에서)으로 구성됩니다. 기본 키가 두 개 이상의 열로 구성된 경우 복합 기본 키. 다음과 같이 정의됩니다.

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

그런 다음 쌍 (QuestionId, Memberid)은 테이블에 고유해야하며 값은 널가 될 수 없습니다. 다음과 같은 쿼리를하는 경우 :

SELECT * FROM voting WHERE QuestionID = 7

기본 키 인덱스를 사용합니다. 그러나 당신이 이것을한다면 :

SELECT * FROM voting WHERE MemberID = 7

복합 인덱스를 사용하려면 "왼쪽"의 모든 키를 사용해야하기 때문입니다. 인덱스가 필드 (A, B, C)에 있고 기준이 B와 C에있는 경우 해당 쿼리에 해당 인덱스가 사용되지 않습니다. 따라서 (QuestionId, Memberid) 및 (Memberid, QuestionId) 중에서 선택하여 테이블을 사용하는 방법에 가장 적합한 것입니다.

필요한 경우 다른 사람에 인덱스를 추가하십시오.

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

다른 팁

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`)
);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top