복합 키(Composite Key) 는 두 개 이상의 컬럼을 묶어 하나의 키로 사용하는 것을 말한다.
PRIMARY KEY (col1, col2, ...)UNIQUE (col1, col2, ...)복합 키는 주로 다음 경우에 등장한다.
단일 컬럼만으로는 유일성을 확보할 수 없을 때
예: (movie_title, screening_dt, seat_number) 조합으로 좌석 한 개를 구별
두 엔티티의 관계 자체가 의미를 가질 때
예: (order_id, item_id) 조합으로 주문 상세 한 줄을 구별
자연 키를 그대로 묶어서 복합 키를 만들면 다음과 같은 문제가 생긴다.
reservation_detail 테이블이 reservation의 PK (movie_title, screening_dt, seat_number) 를 FK로 참조한다면, FK도 3개 컬럼이 된다.복합 키 문제를 해결하는 현대적인 대안은 다음과 같다.
예시를 보자.
CREATE TABLE screening (
screening_id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 대리 키
movie_title VARCHAR(200) NOT NULL,
screening_dt DATETIME NOT NULL,
theater_no INT NOT NULL,
-- 비즈니스적으로는 (movie_title, screening_dt, theater_no)가 유일해야 한다.
UNIQUE (movie_title, screening_dt, theater_no)
);