데이터베이스에서 자주 등장하는 키(Key)들의 개념을 보다 쉽게 설명하기 위해 작성한 글입니다.
슈퍼키, 후보키, 기본키, 대체키, 외래키, 복합키의 정의와 예시를 간단히 살펴볼 예정이니, DB 입문자분들께 도움이 되었으면 좋겠습니다.
유일성과 최소성
키(Key)를 이해하기 전에 반드시 알아야 할 두 가지 중요한 성질이 있습니다.
- 유일성(Unique): 하나의 키 값으로 튜플(레코드)을 유일하게 식별할 수 있어야 함.
- 즉, 키 값이 중복되지 않아야 합니다.
- 최소성(Minimality): 키를 구성하는 속성 중에 꼭 필요한 최소한의 속성만으로 구성되어 있어야 함.
- 즉, 불필요한 속성을 제거해도 여전히 유일성이 보장된다면, 그 불필요한 속성은 키 구성에서 빼야 합니다.
예시로 ‘학생 구별자’가 [학생번호, 이름, 성별] 세 속성이라 할 때,
- 이 세 속성을 모두 포함하면 유일성은 만족할 수 있으나, 학생번호 하나만으로도 해당 학생을 식별 가능하다면, 이때 [학생번호, 이름, 성별]은 최소성을 만족하지 못합니다.
- 바로 이런 점 때문에 학생번호만 사용하는 것이 키로서 더 적절하다고 볼 수 있습니다.
1. 슈퍼키(Super Key)
- 정의: 유일성을 만족하지만, 최소성은 필수 조건이 아님.
- 즉, “레코드를 유일하게 식별만 할 수 있다면” 슈퍼키입니다.
예시를 들어볼까요?
- [학생번호]: 중복되지 않는 값이므로 유일성을 만족 → 슈퍼키 가능
- [학생번호, 나이, 성별]: 사실 학생번호 하나만으로도 학생을 구별 가능하므로 유일성을 만족 → 슈퍼키 가능
- [이름, 나이, 성별]: 이 세 가지가 모두 같을 수 있는 학생(동명이인)들이 있을 수 있어 유일성을 만족하지 못함 → 슈퍼키 불가
결국, 중복 없는 식별자 역할만 한다면 다 슈퍼키에 해당합니다.
2. 후보키(Candidate Key)
- 정의: 슈퍼키 중에서도 유일성과 최소성을 모두 만족하는 키
- 후보키는 “가장 불필요한 속성이 없는 형태”라고도 할 수 있습니다.
예시)
- [학생번호, 나이, 성별]이 슈퍼키라면, 그 안에서 사실 학생번호만으로 구별이 가능하다면 [학생번호]가 후보키가 됩니다.
- 즉, 불필요한 속성(나이, 성별)을 제거해도 유일성이 유지된다면, [학생번호]가 최소성을 만족하기 때문에 후보키라고 할 수 있습니다.
3. 기본키(Primary Key)
- 정의: 후보키 중에 ‘대표 키’로 선택된 것.
- 즉, 유일성과 최소성을 모두 만족하는 후보키 중에서 가장 적절하게 선정된 키가 바로 기본키입니다.
기본키 선정 시 주의사항
- 값이 자주 변하면 안 된다. (PK값이 계속 바뀌면 참조 관계가 깨져 혼란스러워짐)
- NULL 값을 가질 수 있는 속성은 안 된다. (유일성 위배)
- 가장 단순하고 관리하기 쉬운 속성을 우선으로 사용한다.
하나의 테이블에는 반드시 하나의 기본키만 존재할 수 있습니다.
예시)
student_id (PK) name
1 | Scott |
2 | Will |
3 | Peter |
4 | Will |
- student_id는 중복되지 않는 값이므로 유일성을 만족, 필요 속성이 최소이므로 최소성도 만족 → 기본키 선정
- name은 중복(Will) 가능성이 있어 유일성 미충족 → 기본키가 될 수 없음
4. 외래키(Foreign Key)
- 정의: 다른 테이블의 기본키를 참조하는 키
- 어떤 테이블에서 A라는 컬럼이, 다른 테이블의 PK(기본키)를 참조한다면, A 컬럼은 외래키가 됩니다.
왜 외래키를 사용할까?
- 무결성(Integrity) 보장 때문입니다.
- 예를 들어, 왼쪽 테이블(Student)에서 student_id가 변경되거나 삭제되었는데, 오른쪽 테이블(Enrollment 등)에서 외래키 값이 그대로 남아 있으면 데이터 불일치 문제가 발생합니다.
- 외래키 설정을 해 두면, 연쇄적으로 삭제하거나(ON DELETE CASCADE), 변경을 막는 등 데이터를 일관성 있게 유지할 수 있습니다.
5. 복합키(Composite Key)
- 정의: 두 개 이상의 컬럼을 묶어 하나의 키로 사용하는 것
- 복합키도 결국 유일성과 최소성을 만족해야 합니다.
예를 들어,
- 테이블에서 (과목번호, 학번) 두 속성을 묶어서 하나의 키로 사용할 수 있습니다.
- 하나만으로는 유일하지 않을 수 있으나, 두 개를 조합하면 유일하게 식별 가능 → 복합키
- 복합키가 기본키가 될 수도 있고, 후보키가 될 수도 있습니다.
6. 대체키(Alternate Key)
- 정의: 후보키 중에서 기본키로 선정되지 않은 나머지 키들을 의미
- 쉽게 말해, 후보키가 여러 개 있을 때 기본키로 쓰지 않는 후보키들을 대체키라고 부릅니다.
마무리하며
정리하자면, 키(Key)는 데이터베이스에서 레코드를 식별하기 위한 중요한 도구입니다.
- 슈퍼키: 레코드를 유일하게 식별할 수 있는 모든 키(유일성만 만족)
- 후보키: 슈퍼키 중 최소성까지 만족한 키
- 기본키(PK): 후보키 중 하나를 ‘대표’로 채택한 키
- 외래키(FK): 다른 테이블의 기본키를 참조하는 키
- 복합키: 둘 이상의 컬럼을 묶은 키
- 대체키: 후보키 중 기본키가 아닌 나머지 키
위 키들 간의 개념적 구분을 이해한다면, 테이블 설계나 SQL 작성 시 훨씬 수월하게 접근하실 수 있을 것입니다.
'🗄️ Backend > SQL' 카테고리의 다른 글
PL/SQL (Procedural Language/SQL) (3) | 2024.10.15 |
---|---|
데이터베이스 모델링 가이드 (0) | 2024.10.15 |
SQL 권한 및 사용자 생성 가이드 (0) | 2024.10.15 |
SQL 인덱스 개요 (0) | 2024.10.15 |
뷰 생성, 관리 및 시퀀스 (4) | 2024.10.14 |