: 주 식별자가 되는 것으로 선택이 아니라 필수로 있어야한다.
(단, 테이블 당 하나만 존재해야한다.)
NULL 값을 가질 수 없으며, 수정을 할 수 없다.
식별성과 동시에 최소성을 가진다.
이때, 최소성이란 최소한의 정보를 구별하기 위해 필요한 열들을 말한다.
주key가 된다는 것은 그 어느 누구나 볼 수 있고 사용할 수 있다는 의미이다.
⇒ 즉, 주key는 노출이 된다는 의미이다.(노출될 수 밖에 없다.)
: 식별할 수 있는 것들을 말한다.
⇒ 식별하는 것을 위에서 주key라고 했다.
즉, 후보키는 주key를 뽑기 위해 존재한다.(후보키에서 주key를 결정한다.)

→ 위와 같은 학생 테이블이 있을 때,
이름은 동명이인이 있을 수 있고, 전화번호는 변경될 수 있거나 없는 사람이 존재할 수 있으므로 주key가 될 수 없다.
학번과 주민번호로 식별이 가능하므로 이 2가지가 후보키가 된다.
그리고 주key의 노출된다는 특성을 생각한다면 개인 정보인 주민번호는 주key가 될 수 없다. 결국 위 그림에서는 학번이 주key가 된다.
: 후보키에서 주key로 설정되고 남은 key
(후보키 중에 주key 대신에 쓸 수 있는 key)
예를 들어 위에서 주key가 된 학번을 제외하고 주민번호를 얘기한다.
: 식별이 가능한 모든 열의 집합을 말한다.
유일성은 만족하지만 최소성을 고려하지 않는다.
(이때, 최소성을 만족하지 않는다고 할 수는 없다.)
예를 들어 위에서 학번+이름, 학번+전화번호 등등 이 가능하다.
그리고 개념상 존재하는 것이지 꼭 사용해야하는 것은 아니다.
: 다른 테이블의 주key를 가져와서 사용하는 것을 말한다.
반대로 말하면 외래키는 그 테이블에서 반드시 주key로 사용되야 한다.

→ 위 그림에서 외래키는 학생 테이블에 있는 교수 id를 말하며, 외래키인 교수 id는 교수 테이블에서 주key로 사용한다.
: 하나의 열로 주key를 설정할 수 없을 때, 식별성을 나타낼 수 있는 여러열을 묶어서 주key로 설정하거나 식별성을 가지는 인공 열을 추가해서 주key를 설정할 수 있다.
⇒ 그러면 최소성이 깨지는 것이 아닌가?
: 깨지는 것이 아니라 단지 최소한의 열이 하나가 아니게 될 뿐이다.
즉, 주key가 반드시 하나의 열을 가지는 것이 아니다.
: 동일한(똑같은) 값을 가질 수 없다.
주key와 다르게 NULL 값을 가질 수 있고, 테이블 당 여러개를 가질 수 있다.
결점이 없는 데이터가 되기 위한 최소한의 조건을 말하며, 필수적이다.
: 개체가 많아져도 내가 원하는 개체 하나를 찾아내는 성질을 말한다.
이를 위해서는 식별자(key)가 있어야 한다.
모든 테이블에는 주key가 있어야 한다.
: 각 열마다 제약 조건에 맞게 유효한 값이 들어가야 한다.
유효값을 보장해준다.

→ 위 그림에서 학생 테이블에서 나이는 0이 될 수 없고 이러면 도메인 무결성이 깨지는 것이다.
: 외래키로 사용되는 해당 테이블에서 그 값을 주key로 사용되야 하며, 값을 가지고 있어야 한다.
예를 들어서 학생 테이블에서 외래키로 가지고 있는 교수 id가 교수 테이블에서 주key로 가지고 있어야한다. 이때, 없는 값을 참조한다면 참조 무결성이 깨졌다고 말한다.
(값이 없는 것을 NullPointExption이라 할 수 있다.)