SQL で 2 つのフィールドで構成される複合主キーを定義するにはどうすればよいですか?
私はPHPを使用してテーブルとすべてを作成しています。voting
フィールドQuestionID
、MemeberID
、およびでテーブル名を作成したいvote
。また、複合主キーはフィールドQuestionID
とで構成されますMemberID
。
どうすればいいですか?
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`)
);