どのように私は、SQLにおける複合主キーを定義することができますか?

StackOverflow https://stackoverflow.com/questions/1110349

質問

私はSQLで二つのフィールドから成る複合主キーを定義できますか?

私はテーブルとすべてのものを作成するためにPHPを使用しています。私は、フィールドのvotingQuestionID、およびMemeberIDでテーブル名voteを作りたいです。複合主キーは、フィールドのQuestionIDMemberIDで構成されています。

これはどのようにしたらよいでしょうか?

役に立ちましたか?

解決

ただ、明確化のために:表には、最大1つの主キーを持つことができます。主キーは1つ以上の列(すなわちテーブルから)から成ります。主キーが複数のカラムで構成されている場合は、を複合主キーのと呼ばれています。これは次のように定義されています:

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`)
);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top