반응형
합성키를 외래키로(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`)
)
'튜터링'의 복합 고유 키에 링크하는 필드를 '그룹'에 만들고 싶습니다.그래서 제 질문은 이 표들을 어떻게 연관시키느냐는 것입니다.'튜터링'의 각 기본 키에 대해 '그룹'의 외국 키 필드를 작성해야 합니까?
mySQL 설명서에 따라 합성물에 대한 외부 키 매핑을 설정할 수 있어야 하며, 이를 위해서는 여러 개의 열을 만들어야 합니다.
열을 추가하고 이것을 당신의 것에 넣습니다.group
테이블
FOREIGN KEY (`beggingTime`,`day`,`tutorId`)
REFERENCES tutorial(`beggingTime`,`day`,`tutorId`)
아래 의견에서 Steven이 언급한 것처럼 튜토리얼 테이블이 실제 기본 키(ID 대리 키라 하더라도)를 사용하도록 이를 다시 설계해야 합니다.이렇게 하면 SQL이 복합이 아닌 이러한 유형의 관계를 위해 구축되었기 때문에 성능이 향상됩니다.
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.생각 좀 해보세요.
언급URL : https://stackoverflow.com/questions/9780163/composite-key-as-foreign-key-sql
반응형
'prosource' 카테고리의 다른 글
chartjs 차트의 값을 동적으로 업데이트합니다. (0) | 2023.10.05 |
---|---|
C의 함수 포인터를 통해 정적 함수를 호출할 수 있습니까? (0) | 2023.10.05 |
가변 제품의 각 변동 설정에 사용자 정의 치수 필드 추가 (0) | 2023.10.05 |
SQL Server:날짜 시간 필드에 초를 추가하시겠습니까? (0) | 2023.09.25 |
$wpdb->와 같은 문을 사용하여 와일드카드 문자가 있는 해시를 표시할 수 있습니다. (0) | 2023.09.25 |