포스트

논리적 모델링 - 키

논리적 모델링 - 키

키 종류

기본 키(Primary Key - PK)

  • 테이블의 모든 행을 유일하게 식별하는 대표 키
  • 기본 키가 반드시 지켜야 하는 3가지 규칙
    • NULL 값을 가질 수 없다.(NOT NULL)
    • 반드시 유일해야 한다.(UNIQUE)
    • 값이 변하지 않아야 한다.(불변성)

후보 키(Candidate Key)

  • 기본 키가 될 수 있는 후보 키
  • 기본 키가 될 수 있는 자격
    • 유일성(UNIQUE): 모든 행을 서로 구분할 수 있어야 함
    • 최소성(Minimality): 행을 유일하게 식별하는 데 꼭 필요한 최소한의 컬럼만 포함해야 함

대체 키(Alternate Key)

  • 후보 키 중에서 기본 키로 선택되지 않은 나머지 키

외래 키

  • 테이블 간의 관계를 연결하는 역할
  • 한 테이블의 컬럼이 다른 테이블의 기본 키를 참조하는 것

자연 키

  • 자연 키(Natural Key)는 주민등록번호, 이메일 처럼 비즈니스 로직에서 자연스럽게 발생하는 의미 있는 데이터를 기본 키로 사용하는 것
  • 자연 키의 치명적 약점은 변경 가능성
  • 자연 키를 기본 키로 사용하면 해당 값이 변경 될 때 참조 무결성 제약조건 위반, 연쇄 업데이트로 인한 시스템 부하, 데이터 역사성 훼손, 외부 시스템 연동 문제 등의 심각한 문제가 발생할 수 있음

대리 키

  • 대리 키(Surrogate Key)는 비즈니스 로직과 무관한, 오직 데이터 식별을 위해 시스템이 자동 생성하는 값을 기본 키로 사용하는 것 (Auto Increment, UUID 등)
  • 대리 키는 절대 변하지 않으므로, 비즈니스 로직이 변경되어도 데이터 구조의 안정성이 유지 됨
  • 현대 DB 설계의 표준 패턴
    • 대리 키를 기본키
    • 자연 키는 UNIQUE 제약조건을 적용

자연 키 vs 대리 키 - 성능 트레이드 오프

  • 자연 키는 일부 상황에 JOIN 없이 조회가 가능해 단순 조히에 유리할 수 있지만, 이래 키의 크기가 커져 공간을 낭비하고 인덱스 단편화로 쓰기 성능을 저하시키는 단점이 있음
  • 대리 키는 추가적인 JOIN이 발생할 수 있으나, 외래 키 크기가 작아 효율적이고 순차적으로 값이 증가하여 쓰기 성능이 매우 뛰어남
  • 성능 관점에서도 데이터 모델의 안정성, 유연성, 쓰기 성능의 이점이 더 크기 때문에 대부분 대리 키를 기본 키로 선택

현대 적인 설계

  • 대리 키 사용을 강력하게 권장
  • 데이터 식별자를 비즈니스 로직으로부터 완전히 분리하여 느슨한 결합을 유지하기 위함

복합 키 설계

  • 복합 키(Composite Key)는 두 개 이상의 컬럼을 묶어서 하나의 기본 키로 사용하는 것
  • 자연 키를 복합키로 사용하면 변경 가능성, 외래 키 참조의 복잡성 및 크기 증가, ORM 사용의 어려움 등 여러 문제가 발생
  • 대리 키를 기본 키로 사용하고, 비즈니스적 유일성이 필요한 복합 컬럼들에는 UNIQUE 제약조건을 설정하는 것이 좋음

다대다 관계와 복합키

  • M:N 관계는 두 테이블을 직접 연결할 수 없어, 중간에 연결 테이블을 만들어 해소함
  • 두 테이블의 외래 키를 묶은 복합 키로 사용하면 복합 키의 단점을 그대로 가짐
  • 권장되는 방식은 연결 테이블에도 별도의 대리 키를 만들고, 두 외래 키의 조합에는 복합 UNIQUE 제약조건을 설정하는 것

💡 간단 요약

  • 대리 키: PK
  • 자연 키: UNIQUE

사실 상 표준

참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.