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 문서에 따르면 복합 키에 대한 외래 키 매핑을 설정할 수 있습니다. 이를 위해서는 외래 키 테이블에 여러 열을 생성해야 합니다.
ALTER TABLE `group` ADD COLUMN `beggingTime` time NOT NULL; ALTER TABLE `group` ADD COLUMN `day` varchar(8) NOT NULL; ALTER TABLE `group` ADD COLUMN `tutorId` int(3) NOT NULL; ALTER TABLE `group` ADD FOREIGN KEY (`beggingTime`,`day`,`tutorId`) REFERENCES tutorial(`beggingTime`,`day`,`tutorId`);
이 접근 방식은 튜토리얼 테이블의 복합 기본 키 구성 요소에 해당하는 그룹 테이블에 추가 열을 생성합니다.
권장 사항
복합 외래 키를 생성하는 것이 가능하지만 항상 최선의 디자인 선택은 아닙니다. 다른 응답에서 제안했듯이 테이블 디자인을 다시 고려하고 튜토리얼 테이블에 단일 열 기본 키를 사용하는 것이 좋습니다. 이를 통해 데이터베이스 성능이 향상되고 관계 관리가 단순화됩니다.
위 내용은 MySQL에서 복합 외래 키를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!