[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.MySQL의 문서 당 당신은 여러 열을 만들 필요합니다 복합 재료에 대한 외래 키 매핑을 설정 할 수 있어야한다.
MySQL의 문서 당 당신은 여러 열을 만들 필요합니다 복합 재료에 대한 외래 키 매핑을 설정 할 수 있어야한다.
열을 추가하고 그룹 테이블에 넣고
FOREIGN KEY (`beggingTime`,`day`,`tutorId`) REFERENCES tutorial(`beggingTime`,`day`,`tutorId`)
스티븐 댓글 아래에 언급했듯이, 당신은 다시 건축을 시도해야이 너무 튜토리얼 테이블 (그냥 신원 서로 게이트 키 경우에도) 실제 기본 키를 사용. SQL은 관계, 복합없는 이런 종류의 건축되었다 이것은 더 높은 성능을 위해 수 있습니다.
-
==============================
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. 그것을 몇 가지 생각을주십시오.
from https://stackoverflow.com/questions/9780163/composite-key-as-foreign-key-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL을 사용하여 날짜 범위를 생성 (0) | 2020.05.14 |
---|---|
[SQL] 왜 우리는 GROUP BY 집계 함수에 필요합니까? (0) | 2020.05.14 |
[SQL] VARBINARY에 문자 / VARCHAR에서 mysql을 변환하는 방법 (0) | 2020.05.13 |
[SQL] 확인 현재 날짜가 두 날짜 오라클 SQL 사이 인 경우 (0) | 2020.05.13 |
[SQL] T-SQL - 앨리어싱 사용 "="대 "로"[폐쇄] (0) | 2020.05.13 |