150

SQL で 2 つのフィールドで構成される複合主キーを定義するにはどうすればよいですか?

私はPHPを使用してテーブルとすべてを作成しています。votingフィールドQuestionIDMemeberID、およびでテーブル名を作成したいvote。また、複合主キーはフィールドQuestionIDとで構成されますMemberID

どうすればいいですか?

4

4 に答える 4

276

明確にするために、テーブルは最大で 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);
于 2009-07-10T15:46:18.063 に答える
6
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`)
);
于 2009-07-10T16:01:06.660 に答える