각 행을 유일하게 식별할 수 있는 속성들의 집합이다.
서로 구분만 할 수 있다면 '슈퍼키'라고 할 수 있다.
학번 : 학번만 가지고 학생들을 구분할 수 있으므로 슈퍼키가 맞다.
주민등록번호 : 주민등록번호만 가지고도 학생들을 구분할 수 있으므로 슈퍼키가 맞다.
이름 : 이름은 서로 같을 수 있기 때문에 구분하지 못하므로 슈퍼키가 아니다.
생년월일 : 생년월일 역시 서로 같을 수 있기 때문에 슈퍼키가 아니다.
이름, 생년월일 : 이름과 생년월일의 조합으로 학생들을 구분할 수 있으므로 슈퍼키가 맞다.
이 외) [학번, 주민등록번호], [학번, 이름], [학번, 생년월일], [주민등록번호, 이름], [주민등록번호, 생년월일], [학번, 주민등록번호, 이름], [학번, 주민등록번호, 생년월일], [학번, 이름, 생년월일], [주민등록번호, 이름, 생년월일], [학번, 주민등록번호, 이름, 생년월일]
(O) : 구분할 수 있는 속성이 포함되기만 하면 각 행을 식별할 수 있으므로 슈퍼기라고 할 수 있다.
각 행을 유일하게 식별할 수 있는 "최소한의" 속성들의 집합이다.
서로 구분할 수 있으면서 불필요한 속성들이 없어야 '후보키'라고 할 수 있다.
이 외) [학번, 주민등록번호], [학번, 이름], [학번, 생년월일], [주민등록번호, 이름], [주민등록번호, 생년월일], [학번, 주민등록번호, 이름], [학번, 주민등록번호, 생년월일], [학번, 이름, 생년월일], [주민등록번호, 이름, 생년월일], [학번, 주민등록번호, 이름, 생년월일]
(X) : 마찬가지로 [학번] 하나 또는 [주민등록번호] 하나만 가지고도 구분할 수 있는데 불필요한 속성들이 붙어있으므로 후보키가 아니다.
-값 중복을 허용하지 않는다.
-NULL값을 허용한다.
-테이블에서 여러 개 생성 가능하다.
여러개의 튜플이 존재할 때 각각의 튜플을 서로 구분할 수 있어야 합니다. 한마디로 각각의 튜플을 유일해야 한다는 의미입니다. 예를 들어 (주민번호, 나이, 사는곳, 혈액형)이라는 속성이 있을 때 나이, 사는곳, 혈액형을 충분히 중복될 수 있는 속성입니다. 하지만 주민번호는 모두 다르기 때문에 각각의 튜플을 중복되는 속성 값이 존재할 수는 있지만 주민번호는 절대 중복할 수 없습니다. 이렇게 각각의 튜플을 구분할 수 있는 성질을 유일성이라고 합니다.
쉽게 설명하면 키를 구성하는 속성들이 진짜 각 튜플을 구분하는데 꼭 필요한 속성들로만 구성되어 있냐?를 의미합니다. 굳이 없어도 될 속성들을 넣지 말자는 말입니다. 예를 들어 다음과 같은 키(주민번호, 이름, 나이)가 있다면, 물론 현재의 키는 각 튜플을 구분할 수 있습니다. 주민번호, 이름, 나이가 모두 같은 사람을 없을 테니깐요. 근데 생각해보면 이름, 나이가를 빼고도 주민번호만으로 각 튜플을 유일하게 식별할 수 있습니다. 이때 이름, 나이를 빼면 해당 키는 최소성을 만족합니다.