どのように私は、SQLにおける複合主キーを定義することができますか?
-
12-09-2019 - |
質問
私はSQLで二つのフィールドから成る複合主キーを定義できますか?
私はテーブルとすべてのものを作成するためにPHPを使用しています。私は、フィールドのvoting
、QuestionID
、およびMemeberID
でテーブル名vote
を作りたいです。複合主キーは、フィールドのQuestionID
とMemberID
で構成されています。
これはどのようにしたらよいでしょうか?
解決
ただ、明確化のために:表には、最大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`)
);
所属していません StackOverflow