티스토리 뷰
🔷 후보키란 무엇인가?
후보키(Candidate Key)란 데이터베이스 테이블 안에서 각 행(row)을 유일하게 식별할 수 있는 컬럼 또는 컬럼 조합의 집합을 뜻합니다.
다시 말해, 후보키는 "기본키로 삼을 수 있는 모든 키 후보"를 가리킵니다.
이 후보키들 중에서 하나를 선택하여 기본키(Primary Key)로 지정합니다.
선택되지 않은 나머지 후보키들은 나중에 대체키(Alternate Key)로 활용할 수 있습니다.
✅ 왜 후보키를 설정하는가?
데이터베이스에서 데이터를 관리할 때, 테이블에는 보통 수백, 수천, 때로는 수백만 개의 행이 존재합니다.
이럴 때, 각 행을 어떻게 구분할 것인가?가 문제입니다.
모든 데이터를 일일이 다 확인할 수는 없으니, "하나의 기준"이 있어야 합니다.
그 기준이 바로 후보키입니다.
후보키를 설정하면, 데이터베이스는 빠르고 정확하게 원하는 데이터를 찾을 수 있습니다.
또한 데이터의 중복 방지, 무결성 유지가 가능합니다.
✅ 후보키의 조건
후보키가 되기 위해서는 반드시 다음 두 가지 조건을 충족해야 합니다.
- 유일성(Unique): 후보키의 값은 테이블 안에서 반드시 중복되지 않아야 합니다.
- 최소성(Minimality): 후보키를 구성하는 컬럼은 꼭 필요한 최소한의 컬럼만 포함해야 합니다.
✅ 후보키 예시 (직관적 설명)
이 테이블에서는 학번과 주민등록번호 둘 다 후보키가 됩니다.
이름과 생년월일은 중복될 수 있으므로 후보키가 될 수 없습니다.
✅ 후보키 vs 기본키 vs 대체키 관계
✅ 후보키 중 무엇을 기본키로 고르는가?
- 간결성(Simplicity): 컬럼 수가 적을수록 좋습니다.
- 불변성(Immutability): 시간이 지나도 변하지 않는 키를 선택합니다.
- 의미성(Semantic Meaning): 의미가 적은 키를 선호합니다.
- 짧은 길이(Short Length): 짧을수록 검색 속도와 저장 효율이 높습니다.
- 시스템 관리 편의성(Manageability): 시스템이 쉽게 다룰 수 있어야 합니다.
✅ 기본키 잘못 선택 시 생기는 문제
- 기본키 값이 변하면 외래키 수정 필요
- 기본키가 길면 검색 성능 저하
- 비즈니스 의미가 많으면 유지보수 어려움
✅ 후보키 찾기 SQL 예시
CREATE TABLE Students (
student_id INT,
ssn CHAR(13),
name VARCHAR(100),
birth_date DATE,
PRIMARY KEY (student_id),
UNIQUE (ssn)
);
✅ 결론
후보키는 데이터베이스 설계에서 반드시 먼저 찾아야 할 핵심 개념입니다.
후보키를 정확히 찾고, 그 중 가장 적절한 기본키를 선택함으로써 데이터베이스를 안정적으로 관리할 수 있습니다.
후보키를 잘못 다루면 데이터 품질과 성능 모두에 심각한 문제가 생깁니다.
2025.04.26 - [자격증/정보처리기사] - 기본키란 무엇인가?
'자격증 > 정보처리기사' 카테고리의 다른 글
데이터베이스에서 키란 무엇인가? (기본키,후보키 등 총정리) (0) | 2025.04.26 |
---|---|
슈퍼키란 무엇인가? (후보키, 기본키와 차이점) (0) | 2025.04.26 |
기본키란 무엇인가? (0) | 2025.04.26 |
시스템 카탈로그란? (0) | 2025.04.25 |
데이터 사전(Data Dictionary) (0) | 2025.04.24 |
- Total
- Today
- Yesterday
- 정보처리기사
- 윤성우
- 뇌와행동의기초
- C/C++
- 데이터분석
- K-MOOC
- 심리학
- 회계
- 류근관
- 열혈프로그래밍
- 사회심리학
- Python
- C
- 보세사
- 인지부조화
- 일문따
- 통계
- 일본어문법무작정따라하기
- 통계학
- 여인권
- 코딩테스트
- 인프런
- 일본어
- 티스토리챌린지
- 파이썬
- 강화학습
- 오블완
- c++
- 백준
- stl
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |