CS 지식/데이터베이스

Surrogate key vs Natural Key (대체 키 vs 자연 키)

Zin0_0 2022. 7. 29. 15:20
반응형

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/

반응형