복붙노트

[SQL] 외부 키로서 복합 키 (SQL)

SQL

외부 키로서 복합 키 (SQL)

여기에 문제의 나의 두 테이블은 다음과 같습니다 :

CREATE TABLE IF NOT EXISTS `tutorial` (
  `beggingTime` time NOT NULL,
  `day` varchar(8) NOT NULL,
  `tutorId` int(3) NOT NULL,
  `maxMembers` int(2) NOT NULL,
  `minMembers` int(1) NOT NULL,
  PRIMARY KEY (`beggingTime`,`day`,`tutorId`),
  KEY `tutorId` (`tutorId`)
) 


CREATE TABLE IF NOT EXISTS `group` (
  `groupId` tinyint(3) NOT NULL AUTO_INCREMENT,
  `status` varchar(20) NOT NULL,
  `groupName` varchar(50) NOT NULL,
  PRIMARY KEY (`groupId`)
) 

나는 '튜토리얼'의 복합 고유 키에 링크 것 '그룹'의 필드를 작성하고 싶습니다. 내 질문은 추측 그래서, 내가 어떻게이 테이블을 관련이 있는가? 나는 '튜토리얼'의 각 기본 키 '그룹'의 외래 키 필드를 생성해야합니까?

해결법

  1. ==============================

    1.MySQL의 문서 당 당신은 여러 열을 만들 필요합니다 복합 재료에 대한 외래 키 매핑을 설정 할 수 있어야한다.

    MySQL의 문서 당 당신은 여러 열을 만들 필요합니다 복합 재료에 대한 외래 키 매핑을 설정 할 수 있어야한다.

    열을 추가하고 그룹 테이블에 넣고

    FOREIGN KEY (`beggingTime`,`day`,`tutorId`) 
        REFERENCES tutorial(`beggingTime`,`day`,`tutorId`)
    

    스티븐 댓글 아래에 언급했듯이, 당신은 다시 건축을 시도해야이 너무 튜토리얼 테이블 (그냥 신원 서로 게이트 키 경우에도) 실제 기본 키를 사용. SQL은 관계, 복합없는 이런 종류의 건축되었다 이것은 더 높은 성능을 위해 수 있습니다.

  2. ==============================

    2.1] 첫 번째 테이블을 다시 작성 : 첫 번째 tutorId를 넣어, 그것은 그 자체로 키는 모두 자동입니다. 사실, 모든하지만 복합 컬럼의 마지막 열쇠가된다.

    1] 첫 번째 테이블을 다시 작성 : 첫 번째 tutorId를 넣어, 그것은 그 자체로 키는 모두 자동입니다. 사실, 모든하지만 복합 컬럼의 마지막 열쇠가된다.

    CREATE TABLE IF NOT EXISTS `tutorial` (
     `beggingTime` time NOT NULL,
     `day` varchar(8) NOT NULL,
     `tutorId` int(3) NOT NULL,
     `maxMembers` int(2) NOT NULL,
     `minMembers` int(1) NOT NULL,
     PRIMARY KEY mykey (`tutorId`,`beggingTime`,`day`)
    ) 
    

    2] 많은 인덱스를 갖는 것은 무거운 쓰기 테이블에 대한 매우 비싸다. 그래서 외부 키로 사용에 튜토리얼의 추가 필드를 고려; 아마도 AUTO_INCREMENT는 RECORD_ID. 그것을 몇 가지 생각을주십시오.

  3. from https://stackoverflow.com/questions/9780163/composite-key-as-foreign-key-sql by cc-by-sa and MIT license