web-dev-qa-db-ja.com

SQLで複合主キーを定義するにはどうすればよいですか?

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

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

どうすればいいですか?

96
Zeeshan Rang

明確にするために、テーブルには最大で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);
200
cletus
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`)
);
6
Justin