N:M 관계 = 연결 테이블 + 복합 PK + 1:N 두 개
N:M 관계를 SQL 한 블록으로
CREATE TABLE enrollment (
학번 CHAR(8) NOT NULL,
과목코드 CHAR(7) NOT NULL,
성적 CHAR(2) CHECK(성적 IN('A','B','C','F')),
-- 복합 기본키: 한 묶음 = 1 PK
PRIMARY KEY (학번, 과목코드),
-- 양쪽 외래키: 참조 무결성
FOREIGN KEY(학번) REFERENCES student(학번)
ON DELETE CASCADE,
FOREIGN KEY(과목코드) REFERENCES course(과목코드)
ON DELETE RESTRICT
);
| FK 옵션 | 부모 변경 시 자식 |
| CASCADE | 함께 변경 — 졸업생 정리 |
| RESTRICT | 거부 — 데이터 보호·안전장치 |
| SET NULL | NULL로 — 담당자 퇴사 |
| SET DEFAULT | 기본값으로 — 거의 안 씀 |
복합 PK의 의미
PK가 여러 개가 아니라 '한 묶음이 곧 1개 PK'. (학번, 과목코드) 조합이 유일하면 OK.
합격 공식
N:M → 연결 테이블 + 복합 PK + 양쪽 FK + CASCADE/RESTRICT. 함정 — FK는 NULL 허용(금지는 PK), CASCADE는 연쇄 삭제라 신중.