408. 대체 키 (Alternate Key)

⚠️ 이 문서는 데이터베이스 설계 시 한 줄(Tuple)을 식별할 수 있는 똑똑한 후보들이 여러 명 있었으나, **'기본 키(Primary Key)'라는 1인자 자리를 두고 벌인 경쟁에서 밀려나 2인자(보조)로 남게 된 '대체 키'**를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 대체 키는 테이블의 '후보 키(Candidate Key)' 중에서 '기본 키(Primary Key)'로 선택되지 못한 나머지 키들을 말한다.
  2. 가치: 기본 키 오디션에서 탈락하긴 했지만, 여전히 각 행을 완벽하게 구별할 수 있는 유일성(Uniqueness)과 최소성(Minimality)을 갖춘 훌륭한 키다.
  3. 실무 적용: 기본 키 대신 검색 조건으로 자주 쓰일 수 있으므로, 실무에서는 대체 키에 UNIQUE 제약 조건을 걸고 보조 인덱스(Secondary Index)를 생성하여 검색 속도를 높인다.

Ⅰ. 개요: 1인자와 2인자 (Context & Necessity)

우리가 '국민 테이블'을 설계한다고 치자. 각 국민을 완벽하게 구별(식별)할 수 있는 속성을 찾아보니 두 개가 나왔다.

  • [주민등록번호] (유일성, 최소성 만족 $\rightarrow$ 후보 키!)
  • [여권번호] (유일성, 최소성 만족 $\rightarrow$ 후보 키!)

이제 이 테이블의 진정한 1인자(기본 키, PK)를 뽑아야 한다.

  • 주민번호는 모든 국민이 다 가지고 있고 잘 변하지 않는다.
  • 반면 여권은 없는 사람도 있다.
  • 결정: 주민번호를 기본 키(Primary Key)로 임명한다!

그렇다면 경쟁에서 밀린 여권번호는 어떻게 되는가? 버리기엔 너무 아까운 능력치(식별 가능)를 가지고 있다. 이렇게 **기본 키로 뽑히지 못한 비운의 후보 키들을 묶어서 '대체 키(Alternate Key)'**라고 부른다.

📢 섹션 요약 비유: 대체 키는 **'대통령 선거에서 떨어진 2등 후보'**와 같습니다. 비록 대통령(기본 키)이 되지는 못했지만, 언제든지 나라를 이끌어갈 수 있는 완벽한 자격(유일성과 최소성)을 갖춘 훌륭한 인물(속성)입니다.


Ⅱ. 대체 키의 핵심 특징 ★

시험에 자주 나오는 개념적인 특징들이다.

1. 후보 키의 부분집합이다

  • 대체 키 = 후보 키 집합 - 기본 키
  • 즉, 대체 키가 되려면 애초에 '유일성'과 '최소성'이라는 깐깐한 조건을 통과한 정예 요원(후보 키)이어야만 한다. 뚱뚱한 '슈퍼 키' 따위는 대체 키가 될 자격조차 없다. (407번 문서 참고)

2. 항상 존재하는 것은 아니다

  • 만약 테이블에 후보 키가 딱 1개밖에 없었다면?
  • 그 1개가 무조건 기본 키가 되므로, 이 테이블에는 대체 키가 존재하지 않는다. (대체 키는 0개일 수도 있고, 여러 개일 수도 있다.)

Ⅲ. 실무 활용: UNIQUE 제약조건과 보조 인덱스

이론적인 '대체 키' 개념을 실제 데이터베이스(MySQL, Oracle)에서는 어떻게 다룰까?

  • 문제: 사용자들이 기본 키인 '주민번호'로만 검색하는 게 아니다. 공항 시스템과 연동되면 '여권번호'로도 엄청나게 검색을 한다.
  • 해결책: 대체 키인 여권번호 컬럼에 UNIQUE 제약조건을 건다.
    CREATE TABLE Citizens (
        주민번호 VARCHAR(13) PRIMARY KEY,  -- 기본 키
        여권번호 VARCHAR(9) UNIQUE,        -- 대체 키 (유니크 인덱스 자동 생성됨)
        이름 VARCHAR(20)
    );
    
  • 이렇게 하면 DB 엔진이 여권번호에도 똑똑한 책갈피(Secondary Index)를 만들어 주어, 1인자인 기본 키 못지않게 초고속으로 데이터를 찾아낼 수 있게 된다.
┌──────────────────────────────────────────────────────────────┐
│           후보 키, 기본 키, 대체 키의 포함 관계와 역할 시각화            │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ [ 🏃‍♂️ 후보 키 (Candidate Keys) ]                                │
│    [ 주민등록번호 ]         [ 여권번호 ]          [ 운전면허번호 ]      │
│           │                   │                    │         │
│           ▼ (선택!)             ▼ (탈락)              ▼ (탈락)    │
│    ┌────────────┐     ┌────────────────────────────────┐     │
│    │ 👑 기본 키   │     │ 🥈 대체 키 (Alternate Keys)    │     │
│    │ (Primary)  │     │                                │     │
│    │ 주민등록번호  │     │ 여권번호, 운전면허번호              │     │
│    └────────────┘     └────────────────────────────────┘     │
│                                                              │
│ ★ 특징: 만약 '주민번호' 시스템이 망가져도, 즉시 '대체 키' 중 하나를 골라      │
│       새로운 '기본 키'로 승격시킬 수 있다. (그래서 '대체' 키임)            │
└──────────────────────────────────────────────────────────────┘

Ⅳ. 결론

"1인자는 하나지만, 훌륭한 식별자는 여러 개일 수 있다." 데이터베이스 설계 단계에서 '기본 키'를 정하는 것은 가장 중요한 의사결정이다. 하지만 그 과정에서 탈락한 대체 키들을 그냥 무시해서는 안 된다. 이 대체 키들은 시스템이 확장될 때 외부 시스템과의 연동 고리가 되거나, 가장 빈번하게 사용되는 검색 조건이 된다. 훌륭한 데이터베이스 설계자는 기본 키를 확정함과 동시에, 식별력을 갖춘 모든 대체 키들에 UNIQUE 제약조건을 걸어 데이터의 무결성을 빈틈없이 방어한다.


📌 관련 개념 맵

  • 관련 무결성: 개체 무결성 (405번 문서)
  • 키의 종류: 슈퍼 키 (407번 문서), 후보 키, 기본 키, 외래 키
  • 물리적 구현: UNIQUE Index, Secondary Index (보조 인덱스)
  • 핵심 조건: 유일성 (Uniqueness) O, 최소성 (Minimality) O

👶 어린이를 위한 3줄 비유 설명

  1. 반장을 뽑는 선거에 똑똑한 후보 3명(후보 키)이 나왔어요.
  2. 투표를 해서 가장 표를 많이 받은 1명이 '반장(기본 키)'이 되었죠.
  3. 반장 선거에서 아쉽게 떨어진 나머지 똑똑한 2명의 친구들이 바로 '대체 키'랍니다. 반장이 아파서 결석하면 언제든지 반장 역할을 대신(대체)할 수 있죠!