릴레이션에서 튜플을 유일하게 식별하기 위한 속성의 집합. 종류가 여럿인데 서로 포함 관계라서, 넓은 것부터 좁혀가며 보면 한 번에 정리된다.

예시로 이 두 릴레이션을 쓴다.

PLAYER(id, name, team_id, back_number, birth_date)
TEAM(id, name, manager)

슈퍼키에서 외래키까지

슈퍼키는 튜플을 유일하게 식별할 수 있는 속성 집합이면 무엇이든 해당한다. {id, name, team_id, back_number, birth_date}처럼 속성 전체도 슈퍼키다. 릴레이션은 중복 튜플을 가질 수 없으니 전체를 보면 반드시 구별되기 때문이다. {id, name}{name, team_id, back_number}도 슈퍼키다. 이렇게 너무 많아서 그 자체로는 쓸모가 적다.

후보키는 슈퍼키 중에서 속성을 하나라도 빼면 식별이 안 되는 것이다. 군더더기가 없는 최소한의 슈퍼키라서 minimal superkey라고도 부른다. {id}는 속성이 하나라 뺄 게 없으니 후보키다. {team_id, back_number}도 둘 중 하나만으로는 선수를 특정할 수 없으니 후보키다. 반면 {id, name}은 name을 빼도 되므로 후보키가 아니다.

기본키는 후보키 중에서 실제로 고른 것이다. 보통 속성 수가 적은 쪽을 고르므로 여기서는 {id}가 된다. 표기할 때는 밑줄을 긋는다.

유일키는 기본키로 뽑히지 못한 나머지 후보키다. 대체키라고도 한다. 여기서는 {team_id, back_number}다.

외래키는 다른 릴레이션의 기본키를 참조하는 속성 집합이다. PLAYER의 {team_id}가 TEAM의 {id}를 가리키는 것이 외래키다. 테이블끼리 관계를 맺는 유일한 수단이고, 조인이 이 관계를 따라간다. 참조 무결성 제약조건도 여기에 걸려서, 없는 팀 번호를 선수에게 적을 수 없게 한다.

포함 관계

앞의 셋은 포함 관계로 놓고 보면 헷갈리지 않는다.

슈퍼키 ⊃ 후보키 ⊃ 기본키
                 후보키 - 기본키 = 유일키

관련

출처