>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 복합 외래 키를 구현하는 방법은 무엇입니까?

MySQL에서 복합 외래 키를 구현하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-23 15:52:10515검색

How to Implement a Composite Foreign Key in MySQL?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.