1-1. 데이터베이스 설계 3단계와 키의 위치

데이터베이스를 설계할 때는 보통 다음 3단계를 거친다.

  1. 개념적 모델링 (Conceptual Modeling)

    현실 세계의 비즈니스 요구 사항을 누구나 이해하기 쉬운 그림으로 단순화해서 표현하는 단계이다.

  2. 논리적 모델링 (Logical Modeling)

    개념적 모델링에서 만든 ERD를 관계형 데이터베이스 구조에 맞게 바꾸는 단계이다.

  3. 물리적 모델링 (Physical Modeling)

    논리 모델을 실제 DBMS(MySQL, PostgreSQL 등)에 맞춰 세부 설정까지 포함하는 단계이다.

이 글에서 다루는 키 설계는 바로 이 중간 단계인 논리적 모델링에서 핵심이 되는 주제이다. 키를 어떻게 잡느냐에 따라 성능, 확장성, 유지보수 난이도가 크게 달라진다.


1-2. 키(Key)의 기본 개념

키(Key) 는 테이블 안에서 행(ROW)을 식별하거나 행 사이의 관계를 표현하기 위해 사용하는 특별한 컬럼(또는 컬럼들의 묶음)이다.

키의 핵심 역할은 두 가지이다.

  1. 한 행을 유일하게 식별한다. (식별자)
  2. 다른 테이블과의 관계를 안전하게 연결한다. (외래 키)

이를 위해 데이터베이스에서는 여러 종류의 키를 사용한다.


1-3. 다양한 키의 종류 정리

아래는 논리적 모델링에서 자주 등장하는 키들의 종류와 특징이다.

키 종류 설명
슈퍼 키(Super Key) 테이블의 행을 유일하게 식별할 수 있는 컬럼(또는 컬럼 집합). 후보 키, 기본 키, 대리 키, 복합 키 모두 넓게 보면 슈퍼 키이다.
후보 키(Candidate Key) 그 자체로 최소한의 컬럼으로 유일성을 만족하는 키. 이 중에서 하나를 기본 키로 선택한다.
기본 키(Primary Key, PK) 후보 키 중에서 테이블의 대표 식별자로 선택된 키. NOT NULL + UNIQUE 제약을 가진다. 다른 테이블에서 외래 키로 참조한다.
대체 키(Alternate Key) 후보 키였지만 기본 키로 선택되지 않은 나머지 키. 일반적으로 UNIQUE 제약으로 구현한다.
외래 키(Foreign Key, FK) 다른 테이블의 기본 키(또는 UNIQUE 키)를 참조해 두 테이블 간 관계를 표현하는 키. 참조 무결성을 보장한다.
자연 키(Natural Key) 현실 세계의 비즈니스 의미를 그대로 담고 있는 키. 예: 주민등록번호, 사업자등록번호, 이메일, 상품코드 등.
대리 키(Surrogate Key) 비즈니스와 무관하게 데이터베이스 내부에서 인위적으로 부여하는 키. 보통 BIGINT AUTO_INCREMENTUUID 등으로 구현한다.
복합 키(Composite Key) 두 개 이상의 컬럼을 묶어서 하나의 키(주로 기본 키 또는 UNIQUE)로 사용하는 것. 예: (movie_id, screening_dt, seat_no)

논리적 모델링 단계에서 가장 많이 고민하게 되는 부분이 바로 기본 키에 자연 키를 쓸 것인가, 대리 키를 쓸 것인가, 복합 키를 쓸 것인가 이다. 이 글의 나머지 부분은 이 선택의 기준을 자연 키 vs 대리 키, 그리고 복합 키 설계 관점에서 정리한다.