SQLの2つのフィールドで構成される複合主キーを定義するにはどうすればよいですか?
PHPを使用して、テーブルとすべてを作成しています。テーブル名voting
をフィールドQuestionID
、MemeberID
、およびvote
で作成します。また、複合主キーは、フィールドQuestionID
およびMemberID
で構成されます。
どうすればいいですか?
明確にするために、テーブルには最大で1つの主キーを含めることができます。主キーは、1つ以上の列(そのテーブルから)で構成されます。主キーが2つ以上の列で構成されている場合、それは複合主キーと呼ばれます。次のように定義されます。
CREATE TABLE voting (
QuestionID NUMERIC,
MemberID NUMERIC,
PRIMARY KEY (QuestionID, MemberID)
);
ペア(QuestionID、MemberID)はテーブルに対して一意である必要があり、どちらの値もNULLにできません。このようなクエリを実行する場合:
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`)
);