복붙노트

[SQL] 어떻게 SQL에서 복합 기본 키를 정의 할 수 있습니다?

SQL

어떻게 SQL에서 복합 기본 키를 정의 할 수 있습니다?

어떻게 SQL에서 두 개의 필드로 구성된 복합 기본 키를 정의 할 수 있습니다?

나는 테이블과 모든 것을 만들 수 PHP를 사용하고 있습니다. 나는 필드 QuestionID, MemeberID, 투표와 테이블 이름 투표를 만들고 싶어. 그리고 복합 기본 키 필드 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);
    
  2. ==============================

    2.

    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`)
    );
    
  3. from https://stackoverflow.com/questions/1110349/how-can-i-define-a-composite-primary-key-in-sql by cc-by-sa and MIT license