데이터베이스에서 키(key)는 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 기준이 되는 속성(attribute) 또는 속성들의 집합이다.
- 유일성(uniqueness)
하나의 릴레이션에서 모든 튜플은 서로 다른 키 값을 가져야 한다
- 최소성(minimality)
꼭 필요한 최소한의 속성들로만 키를 구성한다
(ex. 학생은 학번만 있어도 구별 가능)
키의 종류에는 슈퍼키, 후보키, 기본키, 대체키, 외래키가 있다.
다음은 키의 종류를 설명하기 위해 사용할 고객 릴레이션이다.
- 유일성을 만족하는 속성 또는 속성들의 집합
슈퍼키는 유일성을 만족해야 하므로 속성 또는 속성들이 서로 다른 키 값을 가져야 한다. 예를 들어, 고객 릴레이션의 나이는 같은 값이 존재할 수 있으므로 유일성을 만족하지 않는다.
고객 릴레이션의 슈퍼키로는 고객아이디, (고객아이디, 고객이름), (고객이름, 주소) 등이 있다.
- 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
후보키는 유일성과 최소성을 모두 만족한다. 따라서 속성 또는 속성들이 서로 다른 키 값을 가지면서 꼭 필요한 최소한의 속성들로만 구성되어야 한다.
고객 릴레이션의 후보키로는 고객아이디, (고객이름, 주소) 등이 있다.
- 후보키 중에서 기본적으로 사용하기 위해 선택한 키
후보키는 유일성과 최소성을 모두 만족하기 때문에 튜플들을 구별하는 데에 효율적으로 사용할 수 있다. 이때, 후보키 중 주로 사용할 키를 선택하여 기본키라고 한다. 따라서 후보키는 기본키에 대한 후보라고도 할 수 있다.
고객 릴레이션의 후보키 중 하나의 속성으로만 이루어진 고객아이디를 기본키로 선택할 수 있다.
- 기본키로 선택되지 못한 후보키
후보키 중 기본키를 제외한 것들이 해당한다.
고객 릴레이션의 대체키로는 (고객이름, 주소)가 있다.
이때까지 설명한 4개의 키는 다음과 같은 관계성을 가진다.
- 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
릴레이션을 구성하는 속성 또는 속성들의 집합 중 다른 릴레이션의 기본키가 있는 경우, 그것을 외래키라고 한다.
- 릴레이션들 간의 관계를 표현
- 참조하는 릴레이션 : 외래키를 가진 릴레이션
- 참조되는 릴레이션 : 외래키가 참조하는 기본키를 가진 릴레이션
다음과 같이 주문 릴레이션에서 고객 릴레이션의 기본키를 참조할 수 있다.
- 외래키 속성과 그것이 참조하는 기본키 속성의 이름은 달라도 되지만 도메인은 같아야 한다.
즉, 참조하는 기본키 속성에 존재하지 않는 키 값은 외래키 속성의 키 값이 될 수 없다.
예를 들어, 고객아이디에 apple, banana, carrot, orange가 있으면 주문고객은 apple, banana, carrot, orange로만 이루어져야 한다.
- 하나의 릴레이션에는 외래키가 여러 개 존재할 수도 있고, 외래키를 기본키로 사용할 수도 있다.
상담 릴레이션은 학생 릴레이션의 기본키와 교사 릴레이션의 기본키를 참조하여 외래키가 총 2개이고, 외래키인 학번과 상담교사가 기본키로 쓰이고 있다.
- 같은 릴레이션의 기본키를 참조하는 외래키도 정의할 수 있다.
- 외래키 속성은 NULL 값을 가질 수도 있다.
따라서 다음과 같은 릴레이션이 성립할 수 있다.