키의 종류 — 기본키·후보키·슈퍼키·외래키

정처기 2026-08-14 15:21:28 정처기데이터베이스기본키외래키후보키

글 목록 →

관계형 데이터베이스에서 한 릴레이션(테이블)의 튜플(행)을 서로 구별하려면 어떤 속성으로 유일하게 짚어낼 수 있어야 한다. 이 역할을 하는 속성 또는 속성 집합을 키(key)라 하고, 성격에 따라 슈퍼키·후보키·기본키·대체키·외래키로 나눈다.

슈퍼키와 후보키

슈퍼키(Super Key)는 튜플을 유일하게 식별할 수 있는 모든 속성 집합이다. 조건은 유일성뿐이라 식별에 불필요한 속성이 섞여 있어도 슈퍼키다. 학생 릴레이션에서 (학번)도, (학번, 이름)도 슈퍼키다.

후보키(Candidate Key)는 슈퍼키 중 최소성(minimality)까지 만족하는 것이다. 속성을 하나라도 빼면 유일성이 깨지는, 더는 줄일 수 없는 집합만 후보키가 된다. (학번, 이름)은 이름을 빼도 학번만으로 유일성이 유지되므로 후보키가 아니고, (학번)만 후보키다. 즉 슈퍼키 ⊇ 후보키이고, 후보키의 조건은 유일성 + 최소성이다.

기본키·대체키·외래키

기본키(Primary Key)는 여러 후보키 중 테이블을 대표하도록 뽑힌 하나이고, 나머지 후보키는 대체키(Alternate Key)다. 학생 테이블에 학번과 주민등록번호가 각각 유일값이라 둘 다 후보키라면, 관리 편의상 학번을 기본키로 정하고 주민등록번호는 대체키로 남긴다.

외래키(Foreign Key)는 다른 릴레이션의 기본키를 참조하는 속성이다. 두 테이블을 연결해 관계를 표현하고, 참조받는 값이 실제로 존재하도록 강제한다. 조직도 테이블처럼 상위 부서 ID가 같은 테이블의 기본키를 가리키는 자기참조 외래키도 가능하다.

두 개 이상의 속성을 묶어야 유일성이 성립하면 복합키(Composite Key)라 한다. 수강 테이블이 (학번, 과목번호, 성적)로 이루어져 학번과 과목번호를 함께 써야 한 학생의 한 과목 수강 기록이 유일해진다면, (학번, 과목번호)가 복합키이자 기본키다. 이때 학번은 동시에 학생 테이블을 가리키는 외래키이기도 하다 — 한 속성이 기본키의 일부이면서 외래키일 수 있다.

무결성 제약과의 관계

개체 무결성(Entity Integrity)은 기본키가 NULL이 될 수 없다는 규칙이다. 값이 없으면 애초에 그 행을 식별할 수 없기 때문이다. 참조 무결성(Referential Integrity)은 외래키 값이 참조 테이블의 기본키 값과 일치하거나, 관계가 선택적이라면 NULL이어야 한다는 규칙이다. 즉 외래키가 NULL인 것 자체는 참조 무결성 위반이 아니고, 존재하지 않는 값을 가리킬 때만 위반이다.

시험에 자주 나오는 포인트

슈퍼키·후보키·기본키의 포함 관계(슈퍼키가 가장 넓고 기본키가 그 안에서 하나로 좁혀짐)를 순서대로 묻는 문제가 자주 나온다. 후보키의 두 조건인 유일성과 최소성 중 하나만 언급하고 나머지를 틀리게 서술한 보기를 골라내는 유형도 흔하다. 외래키는 참조 테이블과 같은 테이블일 필요가 없고, 데이터 타입은 같아야 하지만 속성명이 같을 필요는 없다는 점, NULL 허용 여부는 참조 무결성 위반과 별개라는 점도 헷갈리기 쉽다. 복합키는 “두 속성을 합친 새 속성”이 아니라 “속성들의 조합 자체가 하나의 키”임을 기억해 둔다.

댓글

이 글에 대한 의견은 아래 댓글로 남겨주세요 (GitHub 계정 필요). 로그인 없이 남기고 싶다면