복합 키는 행을 식별하는 컬럼 조합이다
수강처럼 두 개 이상의 부모 개체가 함께 행을 정하면, 그 외래키 조합이 기본키 후보가 된다.
컬럼
역할
식별 참여
student_id
FK
PK part 1
course_id
FK
PK part 2
term
속성
PK part 3
grade
일반 속성
식별에는 참여하지 않음
복합 자연키 DDL
CREATE TABLE enrollments ( student_id NUMBER NOT NULL, course_id NUMBER NOT NULL, term VARCHAR2(10) NOT NULL, grade VARCHAR2(2), PRIMARY KEY (student_id, course_id, term) );
PK에 들어간 컬럼은 함께 모였을 때만 한 행을 식별한다.
복합 자연키 유지
업무 의미가 안정적일 때
주문상세의 주문번호+상품번호처럼 조합 자체가 의미를 가진다.
대리키 + UNIQUE
조합이 길거나 바뀔 수 있을 때
id를 PK로 두고 자연키 조합은 UNIQUE 제약으로 중복만 막는다.