[DB] 데이터베이스 키(Key) 완전 정복: Super Key부터 Primary Key의 중요성까지

sammy·2026년 1월 26일

Dev Knowledge

목록 보기
2/12

데이터베이스 설계의 기초이자 핵심인 '키(Key)'.
단순히 "ID 값"이라고만 생각하고 넘어가기엔 그 종류와 역할이 매우 다양합니다. 이번 글에서는 헷갈리기 쉬운 키의 종류를 명확히 정리하고, "도대체 왜 Primary Key(기본키)는 반드시 있어야 하는가?" 에 대해 심도 있게 알아봅니다.


1. 키(Key)의 종류와 포함 관계

키의 종류를 이해하려면 먼저 유일성(Uniqueness)최소성(Minimality) 이라는 두 가지 개념을 알아야 합니다.

  • 유일성: 하나의 튜플(행)을 유일하게 식별할 수 있는 성질.
  • 최소성: 튜플을 식별하는 데 꼭 필요한 속성만으로 구성된 성질.

🔑 키의 포함 관계

Super Key ⊃ Candidate Key ⊃ Primary Key

1.1 슈퍼키 (Super Key)

  • 정의: 유일성을 만족하는 키. (최소성은 만족하지 않아도 됨)
  • 특징: 어떤 속성끼리 조합하든 중복만 없으면 슈퍼키가 됩니다.
  • 예시: (학번), (주민번호), (학번 + 이름), (주민번호 + 이름 + 주소)

1.2 후보키 (Candidate Key)

  • 정의: 유일성과 최소성을 동시에 만족하는 키.
  • 특징: 슈퍼키 중에서 없어도 되는 속성을 뺀, "군더더기 없는" 식별자들의 집합입니다. 기본키가 될 수 있는 '후보'들입니다.
  • 예시: (학번), (주민번호)
  • (학번 + 이름)은 이름을 빼도 학번만으로 식별 가능하므로 최소성 위배 -> 후보키 탈락

1.3 기본키 (Primary Key, PK)

  • 정의: 후보키 중에서 데이터베이스 관리자(DBA)가 선택한 단 하나의 대표 키.
  • 특징: NULL 값을 가질 수 없으며, 중복될 수 없습니다.

1.4 대체키 (Alternate Key)

  • 정의: 후보키 중에서 기본키로 선택받지 못한 나머지 키들.
  • 예시: 학번을 기본키로 정했다면, 주민번호는 대체키가 됩니다.

1.5 외래키 (Foreign Key, FK)

  • 정의: 다른 테이블의 기본키를 참조하는 컬럼.
  • 특징: 테이블 간의 관계(Relationship)를 연결하는 연결고리 역할을 하며, 참조 무결성(Referential Integrity) 을 보장합니다.

2. 그렇다면 왜 Primary Key는 반드시 필요한가? ⭐️

개발을 하다 보면 "그냥 데이터만 들어가면 되지, 굳이 PK를 설정해야 하나?"라는 의문이 들 수 있습니다. 하지만 RDBMS에서 PK는 선택이 아닌 필수에 가깝습니다. 그 이유는 크게 3가지입니다.

2.1 데이터 무결성 (Entity Integrity)

가장 본질적인 이유입니다. PK가 없다면 중복된 데이터(Row) 를 구분할 방법이 없습니다.
예를 들어, 동명이인이 가입했을 때 PK(User ID)가 없다면 시스템은 두 사람을 구분하지 못해 데이터를 덮어쓰거나 엉뚱한 사람의 정보를 조회하는 치명적인 버그를 낳게 됩니다.

2.2 검색 성능 향상 (Clustered Index) 🚀

이것이 개발자 입장에서 가장 중요한 이유일 수 있습니다. MySQL의 InnoDB 스토리지 엔진을 기준으로 설명하자면

  • PK는 클러스터드 인덱스(Clustered Index)가 됩니다.
  • 클러스터드 인덱스는 데이터를 물리적으로 정렬해서 저장합니다.
  • 따라서 PK를 조건으로 검색(WHERE id = 100)할 때, 별도의 정렬 과정 없이 매우 빠른 속도로 데이터에 접근할 수 있습니다.
  • 만약 PK가 없다면, DB는 내부적으로 숨겨진 컬럼(Gen_Clust_Index)을 만들어 관리하므로 비효율적입니다.

2.3 관계(Relationship)의 기준점

데이터베이스 정규화 과정에서 테이블을 쪼개고 연결할 때, FK(외래키)가 참조할 대상이 바로 PK입니다.
부모 테이블에 식별자가 없다면 자식 테이블은 누구에게 연결되어야 할지 알 수 없습니다. PK는 데이터 세계의 '주소'와 같습니다.


3. 그럼 어떤 값을 PK로 써야 할까?

❌ 자연키 (Natural Key) 사용 시 주의

주민등록번호, 이메일, 전화번호처럼 비즈니스적으로 의미가 있는 값을 PK로 사용하는 경우입니다.

  • 단점: 개인정보보호법에 따라 주민번호를 암호화하거나 저장하지 못하게 되면 PK를 변경해야 하는 대공사가 발생합니다. 이메일도 변경될 수 있는 값입니다.

✅ 대리키 (Surrogate Key) 추천

비즈니스와 무관한 임의의 값을 PK로 사용하는 것입니다.

  • 예시: Auto Increment (MySQL), Sequence (Oracle), UUID
  • 장점: 비즈니스 로직이 변해도 PK는 영원히 변하지 않습니다. 일반적으로 BIGINT 타입의 Auto Increment 값을 가장 많이 사용합니다.

4. 마치며

데이터베이스에서 Key는 단순한 컬럼 하나가 아니라, 데이터의 품질(무결성)성능(인덱스) 을 책임지는 중추적인 역할을 합니다.

  • 테이블을 설계할 때는 반드시 PK를 정의하세요.
  • 가능하면 비즈니스 로직과 분리된 대리키(ID) 를 사용하세요.
profile
누군가에게 도움을 주기 위한 개발자로 성장하고 싶습니다.

0개의 댓글