데이터베이스 키(Key) 종류 총정리 - 슈퍼키·후보키·기본키·대체키·외래키 차이
안녕하세요, 유뿡뿡입니다.
데이터베이스나 SQLD를 공부하다 보면 반드시 만나게 되는 개념이 바로 키(Key)입니다.
처음에는 기본키인 PK(Primary Key)와 외래키인 FK(Foreign Key) 정도만 알면 될 것 같지만, 조금 더 공부하면 갑자기 용어가 많아집니다.
- 슈퍼키
- 후보키
- 기본키
- 대체키
- 외래키
- 복합키
이름도 비슷해서 각각 어떤 차이가 있는지 헷갈리기 쉽습니다.
특히
- 슈퍼키와 후보키는 뭐가 다르지?
- 후보키 중 하나가 기본키라는데 나머지는 어떻게 되는 거지?
- 외래키는 데이터를 구분하는 키인가?
같은 부분에서 많이 헷갈립니다.
이번 글에서는 하나의 회원 테이블을 가지고,
- 데이터베이스에서 키가 왜 필요한지
- 슈퍼키·후보키·기본키·대체키·외래키의 차이
- 각각의 키가 서로 어떤 관계를 가지고 있는지
초보자도 이해할 수 있도록 하나씩 정리해보겠습니다.
한눈에 보는 목차
- 데이터베이스의 키(Key)란?
- 키를 이해하기 위한 예시 테이블
- 슈퍼키(Super Key)란?
- 후보키(Candidate Key)란?
- 기본키(PK, Primary Key)란?
- 대체키(Alternate Key)란?
- 외래키(FK, Foreign Key)란?
- 복합키(Composite Key)란?
- 키들의 관계 한 번에 이해하기
- 기본키와 외래키의 관계
- 주의사항 및 참고사항
- 요약 정리
- FAQ
- 결론
- 내 글들 중 관련있는 정보
1. 데이터베이스의 키(Key)란?
데이터베이스에서 키(Key)는 데이터를 구분하거나 다른 데이터와 관계를 연결하기 위해 사용하는 하나 이상의 속성을 말합니다.
쉽게 생각하면 사람을 구분하기 위해 사용하는 번호표와 비슷합니다.
예를 들어 회원 테이블에 다음과 같은 데이터가 있다고 가정해보겠습니다.
[회원 테이블]
| 회원번호 | 이름 | 이메일 |
| 1001 | 홍길동 | hong@test.com |
| 1002 | 김철수 | kim@test.com |
| 1003 | 홍길동 | yoo@test.com |
이름만 보면 홍길동이라는 사람이 두 명 있습니다.
따라서 이름만 가지고는 어떤 홍길동인지 정확하게 구분하기 어렵습니다.
하지만 회원번호를 보면
- 1001번 홍길동
- 1003번 홍길동
처럼 정확하게 구분할 수 있습니다.
이처럼 각 데이터를 식별할 수 있도록 사용하는 값이 키를 이해하는 출발점입니다.
2. 키를 이해하기 위한 예시 테이블
이번 글에서는 아래 회원 테이블을 계속 사용하겠습니다.
[회원 테이블]
| 회원번호 | 이메일 | 이름 | 전화번호 |
| 1001 | a@test.com | 홍길동 | 010-1111-1111 |
| 1002 | b@test.com | 김철수 | 010-2222-2222 |
| 1003 | c@test.com | 홍길동 | 010-3333-3333 |
여기서는 이해를 쉽게 하기 위해 다음과 같이 가정하겠습니다.
- 회원번호는 회원마다 다르다.
- 이메일도 회원마다 다르다.
- 이름은 중복될 수 있다.
- 전화번호도 회원마다 다르다고 가정한다.
실제 시스템에서는 이메일이나 전화번호의 중복 허용 여부가 회사 정책에 따라 달라질 수 있습니다.
즉, 지금부터 설명하는 이메일과 전화번호의 고유성은 개념 설명을 위한 예시 조건입니다.
3. 슈퍼키(Super Key)란?
슈퍼키(Super Key)는 각 행을 유일하게 식별할 수 있는 하나 이상의 속성 집합입니다.
※ Super Key = 슈퍼키, 데이터를 유일하게 식별할 수 있는 속성 또는 속성들의 집합
예시 테이블에서 회원번호는 각각 다릅니다.
따라서
회원번호 만으로도 회원 한 명을 정확히 구분할 수 있습니다.
이메일도 중복되지 않는다는 조건이 있으므로
이메일 도 회원을 구분할 수 있습니다.
따라서 둘 다 슈퍼키가 될 수 있습니다.
그런데 슈퍼키의 중요한 특징이 하나 있습니다.
필요 없는 속성이 추가되어 있어도 데이터를 유일하게 구분할 수 있다면 슈퍼키가 될 수 있습니다.
예를 들어
회원번호 + 이름 을 생각해보겠습니다.
사실 회원번호 하나만 있어도 회원을 구분할 수 있습니다.
그런데 이름까지 붙여도 여전히 회원을 구분할 수 있습니다.
따라서 회원번호 + 이름 역시 슈퍼키가 될 수 있습니다.
같은 원리로
- 회원번호 + 이메일
- 회원번호 + 이름 + 이메일
등도 데이터를 유일하게 식별할 수 있다면 슈퍼키가 될 수 있습니다.
핵심
슈퍼키에서 중요한 것은 “최소인가?”가 아니라 “유일하게 구분할 수 있는가?” 입니다.
4. 후보키(Candidate Key)란?
후보키(Candidate Key)는 슈퍼키 중에서 데이터를 유일하게 식별하는 데 불필요한 속성을 제거한 최소한의 키라고 이해하면 쉽습니다.
※ Candidate Key = 후보키, 기본키가 될 수 있는 최소한의 키
예를 들어 회원번호 하나만 가지고도 회원을 구분할 수 있다면 후보키가 될 수 있습니다.
그런데 회원번호 + 이름 은 어떨까요?
회원번호만으로도 충분히 구분할 수 있기 때문에 이름은 필요하지 않습니다.
따라서 회원번호 + 이름 은 슈퍼키가 될 수 있지만 최소성을 만족하지 않으므로 후보키는 아닙니다.
이 차이가 슈퍼키와 후보키를 이해할 때 가장 중요합니다.
후보키의 핵심 조건 보통 다음 두 가지 개념으로 설명합니다.
- 유일성
- 최소성
[유일성]
각 데이터를 서로 구분할 수 있어야 합니다.
[최소성]
데이터를 식별하는 데 필요한 최소한의 속성만 사용해야 합니다.
※ 유일성 : 같은 키 값으로 두 개 이상의 데이터를 구분하지 못하는 상황이 없어야 한다는 의미
※ 최소성 : 키에서 속성 하나를 제거했을 때 더 이상 데이터를 유일하게 식별할 수 없어야 한다는 의미
예를 들어 회원번호, 이메일, 전화번호가 모두 각각 회원을 유일하게 구분할 수 있다고 가정하면
- 회원번호
- 이메일
- 전화번호
모두 후보키가 될 수 있습니다.
5. 기본키(PK, Primary Key)란?
기본키는 영어로 Primary Key라고 하며 일반적으로 PK라고 줄여서 표현합니다.
※ PK = Primary Key, 기본키
기본키는 여러 후보키 가운데 대표로 선택한 키입니다.
앞의 회원 테이블에서 후보키가 다음과 같이 있다고 가정해보겠습니다.
- 회원번호
- 이메일
- 전화번호
이 중에서 회원번호를 대표 식별자로 사용하기로 결정했다면
회원번호가 기본키(PK)가 됩니다.
즉,
후보키 여러 개
↓
그중 하나 선택
↓
기본키
라고 이해하면 쉽습니다.
기본키 특징
기본키는 크게 다음 특징을 갖습니다.
- 각 행을 유일하게 구분해야 한다.
- 중복될 수 없다.
- NULL 값을 가질 수 없다.
- 한 테이블에서 기본키는 하나만 지정한다.
- 하나 이상의 컬럼을 묶어 기본키로 만들 수도 있다.
※ NULL : 값이 없거나 알려지지 않은 상태를 나타내는 데이터베이스 표현
여기서 마지막 부분을 주의해야 합니다.
기본키가 하나라는 말과 기본키 컬럼이 반드시 하나라는 말은 다릅니다.
기본키 하나가 여러 컬럼으로 구성될 수도 있습니다.
이것이 뒤에서 설명할 복합키와 연결됩니다.
6. 대체키(Alternate Key)란?
대체키(Alternate Key)는 후보키 가운데 기본키로 선택되지 않은 나머지 키입니다.
※ Alternate Key = 대체키, 후보키 중 기본키로 선택되지 않은 키
앞의 예시로 다시 보겠습니다. 후보키가
- 회원번호
- 이메일
- 전화번호
3개 있다고 가정하겠습니다.
여기서 회원번호를 기본키로 선택했습니다.
그러면 남은
- 이메일
- 전화번호
는 대체키가 됩니다.
정리하면 다음과 같습니다.
| 구분 | 예시 |
| 후보키 | 회원번호, 이메일, 전화번호 |
| 기본키 | 회원번호 |
| 대체키 | 이메일, 전화번호 |
따라서 대체키를 이해할 때는
“기본키로 선택되지 않은 후보키”
라고 기억하면 이해하기 쉽습니다.
대체키라고 해서 데이터를 구분할 수 없는 키라는 뜻은 아닙니다.
여전히 데이터를 유일하게 식별할 수 있지만, 단지 대표 기본키로 선택되지 않은 것입니다.
7. 외래키(FK, Foreign Key)란?
외래키는 지금까지 설명한 키들과 역할이 조금 다릅니다.
※ FK = Foreign Key, 외래키
외래키는 다른 테이블과 관계를 연결하기 위해 사용하는 키입니다.
예를 들어 회원 테이블과 주문 테이블이 있다고 생각해보겠습니다.
[회원 테이블]
| 회원번호 (PK 기본키) | 이름 |
| 1001 | 홍길동 |
| 1002 | 김철수 |
[주문 테이블]
| 주문번호(PK) | 회원번호(FK) | 상품 |
| 5001 | 1001 | 노트북 |
| 5002 | 1001 | 키보드 |
| 5003 | 1002 | 모니터 |
주문 테이블의 회원번호를 보면
- 5001번 주문 → 회원번호 1001
- 5002번 주문 → 회원번호 1001
- 5003번 주문 → 회원번호 1002
라고 되어 있습니다.
회원번호를 이용하면 “이 주문을 누가 했는가?” 를 확인할 수 있습니다.
회원 테이블에서는 회원번호가 기본키(PK)이고,
주문 테이블에서는 회원 테이블과 연결하기 위해 사용하는 회원번호가 외래키(FK)가 됩니다.
[참조 무결성]
외래키를 이해할 때 같이 알아두면 좋은 개념이 참조 무결성(Referential Integrity)입니다.
※ Referential Integrity = 참조 무결성, 서로 관계가 있는 테이블 사이에서 잘못된 참조가 발생하지 않도록 관계를 유지하는 원칙
예를 들어 회원 테이블에 회원번호 9999가 존재하지 않는데 주문 테이블에서 회원번호 9999를 참조하도록 만드는 상황을 방지하는 개념입니다.
8. 복합키(Composite Key)란?
복합키(Composite Key)는 두 개 이상의 속성을 조합해서 만든 키입니다.
※ Composite Key = 복합키, 여러 컬럼을 결합해 사용하는 키
예를 들어 주문상품 테이블이 있다고 생각해보겠습니다.
[주문상품 테이블]
| 복합키(CK) | 주문번호 | 상품번호 | 수량 |
| 5001-A001 | 5001 | A001 | 1 |
| 5001-A002 | 5001 | A002 | 2 |
| 5002-A001 | 5002 | A001 | 1 |
여기서는 주문번호 하나만 가지고 데이터를 구분하기 어렵습니다.
5001이라는 주문 안에 상품이 두 개 있기 때문입니다.
상품번호만으로도 구분할 수 없습니다.
A001이라는 상품은 여러 주문에 들어갈 수 있기 때문입니다.
하지만 주문번호 + 상품번호 를 같이 사용하면 각 행을 구분할 수 있습니다.
예를 들어
- 5001 + A001
- 5001 + A002
- 5002 + A001
처럼 구분할 수 있습니다.
따라서 주문번호 + 상품번호 두 컬럼을 묶어 하나의 키로 사용할 수 있습니다.
9. 키들의 관계 한 번에 이해하기
여기가 가장 중요합니다.
슈퍼키, 후보키, 기본키, 대체키는 완전히 별개의 개념이 아닙니다.
서로 포함 관계를 가지고 있습니다.
쉽게 표현하면 다음과 같습니다.
슈퍼키
데이터를 유일하게 구분할 수 있는 모든 키
↓
후보키
슈퍼키 중 불필요한 속성을 제거한 최소한의 키
↓
후보키 중 하나를 선택
↓
기본키(PK)
↓
기본키로 선택되지 않은 나머지 후보키
↓
대체키
예를 들어 후보키가
- 회원번호
- 이메일
- 전화번호
라고 가정하면
- 회원번호 → 기본키
- 이메일 → 대체키
- 전화번호 → 대체키
가 됩니다.
반면 회원번호 + 이름 은 회원번호 하나만으로 이미 식별할 수 있으므로 슈퍼키는 될 수 있지만 후보키는 아닙니다.
[핵심 관계]
- 기본키는 후보키다.
- 대체키도 후보키다.
- 후보키는 슈퍼키다.
- 모든 슈퍼키가 후보키인 것은 아니다.
마지막 문장이 중요한 이유는 최소성 때문입니다.
불필요한 속성이 포함되어 있으면 슈퍼키는 될 수 있어도 후보키는 될 수 없습니다.
10. 기본키와 외래키의 관계
SQL이나 ERD를 공부할 때 가장 많이 보게 되는 것은 PK와 FK입니다.
PK - 이 데이터가 누구인지 구분
FK - 다른 데이터와 어떻게 연결되는지 표현
이라고 생각하면 쉽습니다.
예를 들어
[회원 테이블]
회원번호(PK)
↓
주문 테이블
회원번호(FK)
로 연결할 수 있습니다.
회원 한 명이 여러 주문을 할 수 있다면 관계는 회원 : 주문 = 1:N 이 됩니다.
※ 1:N (One-to-Many) : 하나의 데이터가 여러 데이터와 연결될 수 있는 관계
예를 들어 회원번호 1001번 회원이
- 주문 5001
- 주문 5002
- 주문 5003
을 했다면 회원 1명과 주문 3건이 연결됩니다.
따라서 회원과 주문 사이에 1:N 관계가 만들어집니다.
11. 주의사항 및 참고사항
키를 공부할 때 가장 주의해야 할 부분은 키와 실제 DB 제약조건을 완전히 같은 개념으로 생각하지 않는 것입니다.
후보키와 슈퍼키는 데이터 모델링과 관계형 데이터베이스 이론에서 사용하는 논리적 개념입니다.
반면 실제 DBMS에서는
- 기본키 (PRIMARY KEY) - 각 행을 유일하게 식별하기 위해 사용하며, 중복값과 NULL 값을 허용하지 않습니다.
- 외래키 (FOREIGN KEY) - 다른 테이블의 키를 참조하여 테이블 사이의 관계를 연결하고, 존재하지 않는 값을 잘못 참조하지 않도록 관리하는 데 사용합니다.
- 중복방지 UNIQUE - 특정 컬럼 또는 컬럼 조합의 값이 중복되지 않도록 제한하는 제약조건입니다.
등의 제약조건을 이용해 이를 구현합니다.
※ DBMS = Database Management System, 데이터베이스 관리 시스템
※ UNIQUE Constraint = 유일성 제약조건, 지정된 컬럼 또는 컬럼 조합의 값이 중복되지 않도록 제한하는 규칙
또한 외래키가 반드시 다른 테이블의 기본키만 참조한다고 단순하게 외우는 것도 주의해야 합니다.
DBMS에 따라 기본키뿐만 아니라 유일성이 보장되는 컬럼 집합을 외래키가 참조할 수도 있습니다.
초보 단계에서는 PK는 행을 식별하고, FK는 테이블 사이의 관계를 연결한다 는 핵심부터 정확하게 이해하는 것이 좋습니다.
12. 요약 정리
키 종류를 한 번에 정리하면 다음과 같습니다.
| 키 | 핵심 |
| 슈퍼키 | 유일하게 구분 |
| 후보키 | 유일성 + 최소성 |
| 기본키 | 대표 후보키 |
| 대체키 | 남은 후보키 |
| 외래키 | 테이블 연결 |
| 복합키 | 여러 컬럼 조합 |
조금 더 쉽게 외우면 다음과 같습니다.
- 슈퍼키 - 누군지만 알아낼 수 있으면 됩니다.
- 후보키 - 불필요한 것은 빼고 최소한으로 누군지 알아내야 합니다.
- 기본키 - 후보키 중 대표를 하나 뽑습니다.
- 대체키 - 대표로 뽑히지 않은 나머지 후보키입니다.
- 외래키 - 다른 테이블의 데이터와 연결합니다.
- 복합키 - 컬럼 하나가 아니라 여러 컬럼을 묶어서 사용합니다.
13. FAQ
Q1. 기본키와 후보키는 같은 건가요?
완전히 같은 의미는 아닙니다.
후보키는 기본키가 될 수 있는 키들이고, 이 후보키들 가운데 실제 대표 키로 선택된 하나가 기본키입니다.
예를 들어 회원번호와 이메일이 모두 후보키라면 그중 회원번호를 기본키로 선택할 수 있습니다.
Q2. 한 테이블에 후보키가 여러 개 있을 수 있나요?
있을 수 있습니다.
예를 들어 회원번호, 이메일, 전화번호가 모두 각각 회원을 유일하게 식별할 수 있고 후보키 조건을 충족한다면 세 개 모두 후보키가 될 수 있습니다.
이 중 하나를 기본키로 선택합니다.
Q3. 기본키는 한 테이블에 몇 개까지 있나요?
하나의 테이블에는 기본키를 하나 지정합니다.
다만 그 기본키가 반드시 컬럼 하나로만 구성되는 것은 아닙니다.
예를 들어 주문번호 + 상품번호 두 컬럼을 묶어 하나의 기본키로 사용할 수도 있습니다.
Q4. 기본키에는 NULL이 들어갈 수 있나요?
기본키에는 NULL을 사용할 수 없습니다.
기본키는 각 행을 유일하게 식별해야 하기 때문입니다.
Q5. 외래키에는 같은 값이 여러 번 들어가도 되나요?
관계 구조에 따라 가능합니다.
예를 들어 회원번호 1001번 회원이 주문을 여러 번 했다면 주문 테이블의 회원번호 FK에는 1001이 여러 행에 반복될 수 있습니다.
예)
- 5001 / 1001
- 5002 / 1001
- 5003 / 1001
이렇게 회원 1명과 여러 주문이 연결되면 1 관계가 됩니다.
Q6. 슈퍼키와 후보키의 가장 큰 차이는 무엇인가요?
최소성입니다.
슈퍼키는 데이터를 유일하게 식별할 수만 있으면 불필요한 속성이 포함되어 있어도 됩니다.
후보키는 불필요한 속성을 제거한 최소한의 키여야 합니다.
예를 들어 회원번호만으로 회원을 구분할 수 있다면 회원번호 + 이름은 슈퍼키가 될 수 있지만 후보키는 아닙니다.
Q7. 대체키는 데이터를 식별할 수 없는 키인가요?
아닙니다.
대체키도 원래 후보키이므로 데이터를 식별할 수 있습니다.
단지 여러 후보키 중 기본키로 선택되지 않았을 뿐입니다.
예를 들어 회원번호와 이메일 모두 후보키인데 회원번호를 PK로 선택했다면 이메일이 대체키가 될 수 있습니다.
Q8. 복합키와 후보키는 같은 것인가요?
다른 기준으로 구분하는 용어입니다.
후보키는 키의 자격을 말하고,
복합키는 몇 개의 컬럼으로 구성됐는가를 말합니다.
따라서 두 개 이상의 컬럼으로 구성된 복합키가 후보키가 될 수도 있고, 그 복합 후보키가 기본키로 선택될 수도 있습니다.
Q9. 외래키는 반드시 다른 테이블의 기본키만 참조하나요?
반드시 그렇지는 않습니다.
DBMS와 제약조건 구성에 따라 기본키 외에도 유일성이 보장되는 컬럼 집합을 참조할 수 있습니다.
Q10. 키 종류를 가장 쉽게 외우는 방법은 무엇인가요?
다음 순서로 기억하면 쉽습니다.
슈퍼키 → 후보키 → 기본키 / 대체키
슈퍼키 중 최소성을 만족하는 것이 후보키이고,
후보키 가운데 대표로 선택한 것이 기본키,
선택되지 않은 나머지가 대체키입니다.
외래키는 이 흐름과 별도로 테이블 간 관계를 연결하는 키라고 생각하면 이해하기 쉽습니다.
14. 결론
데이터베이스의 키는 처음 보면 종류가 많아 복잡해 보이지만 관계를 연결해서 이해하면 생각보다 어렵지 않습니다.
가장 중요한 흐름은 슈퍼키 → 후보키 → 기본키 또는 대체키 입니다.
슈퍼키는 데이터를 구분할 수 있는 모든 키이고, 그중 불필요한 속성을 제거해 최소성을 만족하면 후보키가 됩니다.
여러 후보키 가운데 대표로 선택된 하나가 기본키(PK), 선택되지 않은 후보키가 대체키입니다.
그리고 외래키(FK)는 다른 테이블과 관계를 연결하는 역할을 합니다.
SQLD나 데이터 모델링을 공부한다면 각각의 정의만 외우기보다는
회원번호 하나로 구분 가능 → 후보키 → 그중 대표로 선택 → 기본키 → 주문 테이블에서 참조 → 외래키
처럼 실제 데이터가 움직이는 과정으로 이해해보는 것이 좋습니다.
키를 제대로 이해하면 이후에 배우는 ERD, 식별자, 관계, 정규화, JOIN을 이해하기도 훨씬 쉬워집니다.
15. 내 글들 중 관련있는 정보
데이터 모델링의 전체 개념부터 보고 싶다면 아래 글을 먼저 읽어보는 것도 좋습니다.
SQLD 데이터 모델링 총정리 - 초보자를 위한 개념과 예시
https://yobb.tistory.com/200
SQLD 데이터 모델링 총정리-초보자를 위한 개념과 예시 (정리 完)
SQLD 데이터 모델링 총정리 (정리 完) 안녕하세요, 유뿡뿡입니다.SQLD 시작하면 SQL 문법부터 배울 것 같지만, 생각보다 먼저 이해해야 하는 내용이 있습니다.바로 데이터 모델링입니다.처음 접하면
yobb.tistory.com
'기획 > SQLD 관련' 카테고리의 다른 글
| 데이터베이스 모델링 3단계 총정리 - 개념적 · 논리적 · 물리적 모델링 차이(SQLD) (0) | 2026.09.17 |
|---|---|
| 데이터 모델링 총정리-초보자를 위한 개념과 예시 (SQLD 정리 完) (0) | 2026.09.16 |