Surrogate key vs Natural Key
Surrogate Key(대체 키)
- 비즈니스 의미가 없는 시스템 생성 값 (system generated)
- GUID, sequence, unique identifier...
- 컬럼들 중 유일하게 식별 가능한 단일 후보키가 존재하지 않는 경우, 임의의 식별번호로 이루어진 후보키
- 하나 이상의 컬럼으로 구성 (복합키)
-
-
- 비즈니스 의미가 없이 순차적 정수가 고유 키 역할을 하는 예시.
- 장점
- 비즈니스 요구 사항에 따른 변경 사항이 없음
- 모든 엔티티에서 동일한 키 전략을 유지하는 경우 코드가 줄어듦
- 애플리케이션 코드가 모두 순차적인 정수로 구현된 경우, 기본 키를 참조할 때 재사용 가능
- 대체 키는 고유성이 보장됨
- 시퀀스가 사용되면 값이 계속 증가하여 인덱스 단편화가 줄어들기 때문에, 인덱스 유지 관리가 거의 필요하지 않음
- 단점
- 대체 키에 대한 열/인덱스에 추가 디스크 공간이 필요함
- 데이터 삽입/업데이트
- 데이터 Insert & Update, query 시 대체 키에 대한 열/인덱스에 추가 I/O가 요구됨
- 데이터 자체에는 의미가 없으므로, 하위 테이블에 대한 더 많은 테이블 조인이 필요
- 다른 고유 제약 조건이 없는 경우 테이블에 자연 키의 중복 값이 있을 수 있음
- 대체 키 값은 검색 키로 사용할 수 없음
Natural Key(자연 키)
- 테이블에 이미 존재하는 열 or 열의 집합 (데이터 모델 내의 엔티티 속성)
- 테이블을 이루는 컬럼들 가운데 의미를 담고 있는 후보키
- 테이블의 레코드를 고유하게 식별하며, 비즈니스 의미가 담겨있음
- SSN 컬럼을 보면 비즈니스 의미를 담으며 고유하게 식별 가능.
- 장점
- 컬럼, 기본키 인덱스가 이미 존재하므로 대체 키를 위한 열 / 인덱스에 추가 disk가 필요하지 않음
- 단점
- 비즈니스 요구 사항이 변경되면 키 변경/재작업 필요
- 키에 여러 열이 필요한 경우 유지 관리가 더 어려움
- 키 값이 일반적으로 더 크거나 여러 컬럼으로 구성되므로 성능 저하
- 데이터 Insert & Update, query 시 더 많은 I/O가 요구됨
- 키 값을 알 때까지 레코드를 입력할 수 없음
Reference
https://www.mssqltips.com/sqlservertip/5431/surrogate-key-vs-natural-key-differences-and-when-to-use-in-sql-server/