SQL에서 복합 기본 키를 어떻게 정의 할 수 있습니까?
-
12-09-2019 - |
문제
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`)
);
제휴하지 않습니다 StackOverflow