데이터들을 보다 보면 복합키로 PK를 구성할 수 있음에도 ID 컬럼을 만들어 사용하는 경우를 자주 확인할 수 있다.
왜 이렇게 사용하는걸까? 장점이 뭘까??
CREATE TABLE Enrollments_NaturalKey (
StudentId VARCHAR(10), -- 학번
CourseCode VARCHAR(10), -- 과목 코드
Semester VARCHAR(6), -- 예: '2024F'
Grade CHAR(2), -- 성적 (예: A+, B0)
PRIMARY KEY (StudentId, CourseCode, Semester)
);
CREATE TABLE Enrollments_SurrogateKey (
EnrollmentId INT AUTO_INCREMENT PRIMARY KEY, -- Surrogate Key
StudentId VARCHAR(10),
CourseCode VARCHAR(10),
Semester VARCHAR(6),
Grade CHAR(2),
UNIQUE (StudentId, CourseCode, Semester) -- 유일성은 따로 관리
);
RDBMS는 PK에 자동으로 클러스터형 B-Tree 인덱스를 생성
➡️ 데이터를 정렬해서 저장하고, 검색 시 빠르게 찾도록 함
Surrogate Key 또한 단점이 있으나, 성능·관리 측면에서 Composite Key보다 좋기 때문에
작고 단순한 테이블에서는 Composite Key로도 충분하지만,
중대형 시스템 / 다수 JOIN / 외래키 많은 경우에는 Surrogate Key를 적극 사용하는 것이 좋다!