키 (Key)
데이터베이스에서 키는 테이블 간의 관계를 더 명확하게 하고 테이블 자체의 인덱스를 만들기 위해서 만든다.
키는 슈퍼키, 후보키, 기본키, 대체키, 외래키가 있다.
키에 대해 알아보기 전에 짚고 넘어가야 할 개념이 있다.
유일성과 최소성이다.
- 유일성
하나의 키 만으로 튜플을 유일하게 식별할 수 있는 성질
예를 들어, (주민번호, 나이, 사는 곳, 혈액형)이라고 하면 주민번호는 모두 다르기 때문에 유일성을 가진다.
- 최소성
키를 구성하는 속성 중에 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질
예를 들어, 사원 번호(유일성) + 주민등록번호(유일성)이면 두 키 중에 하나만 있어도 다른 튜플들과 구분이 가능하다. 그렇기 때문에 이 두 키의 조합은 최소성을 가지지 않는다.
위 두 개념을 가지고 키에 대해 하나하나 알아보자.

슈퍼키 (Super Key)
- 유일성을 만족하는 키
- 최소성을 만족하지는 않더라도 다른 튜플과의 중복은 없다
- 어떤 속성끼리 묶어도 중복만 안 나오면 된다
학번 + 이름
주민등록번호 + 학번
후보키 (Candidate Key)
- 유일성과 최소성을 만족하는 키
- 기본키가 될 수 있는 키들이기 때문에 후보키라고 불린다.
- 슈퍼키는 속성의 개수가 몇 개이든 간에 구별만 되면 되지만 후보키는 이 슈퍼키들 중에서 속성의 개수가 최소인 것들만 해당된다.
위에서 말한 학번 + 이름은 학번만으로도 구별을 할 수 있는 상황에서 속성의 개수를 두 개로 늘렸으니 후보키에 해당되지 못한다.
학번
주민등록번호
기본키 (Primary Key)
- 유일성과 최소키를 만족하는 키인 후보키 중에서 하나를 지정한 키
- 테이블에 오직 한 개만 존재할 수 있다.
- 절대 NULL 값을 가질 수 없고, 중복된 값을 가질 수 없다.
학번
대체키 (Alternate Key)
- 후보키가 두 개 이상일 경우 그 중에 하나는 기본키로 지정이 된다. 그러고 남은
후보키 - 기본키를 대체키라고 한다.
- 만약 기본키가 사라지게 된다면 대체키 중에서 기본키를 대체할 수 있다.
학번이 사라진다면? 주민등록번호로 대체하면 된다.
주민등록번호
외래키 (Foreign Key)
- 다른 테이블의 기본키를 그대로 참조하는 값으로 테이블과 개체의 관계를 식별하는 키이다.
- 외래키는 참조되는 기본키와 동일한 키 속성을 가져야 한다.
- 부모 테이블의 데이터가 생성된 후 자식 테이블의 데이터가 후에 생겨야 한다.
- 자식 테이블이 먼저 삭제될 수 없다. 부모 테이블이 먼저 삭제되어야 한다.
관계
관계형 데이터베이스에서는 여러 테이블의 관계가 정의가 되어 있다.

ERD에서는 관계 화살표들로 테이블과 테이블 사이를 연결하는 것이다.
이 관계는 1:1, 1:N, N:M가 있다.
하나하나씩 알아보도록 하자.
1:1 관계
- 하나의 레코드가 다른 테이블의 레코드 하나와 연결된 경우
- 유저 한 명 - 전화번호 하나
유저는 전화번호를 하나만 가질 수 있다
1:N 관계
- 하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우
- 유저 한 명 - 전화번호 여러 개
유저는 다른 사람의 전화번호를 여러 개 가질 수 있다.
하지만 여러 명의 유저가 하나의 전화번호를 가질 수는 없는 상황
N:M 관계
- 여러 개의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우
- 고객 여러 명 - 패키지 상품 여러 개
고객은 패키지 상품 여러 개를 구매할 수 있고,
패키지 상품도 여러 고객이 구매할 수 있다.
이것을 ERD에서 표현을 하자면
중간에 1:N 관계의 테이블을 끼워 넣어야 한다.
🦴 참고
https://ittrue.tistory.com/201
https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%ED%82%A4KEY-%EC%A2%85%EB%A5%98-%F0%9F%95%B5%EF%B8%8F-%EC%A0%95%EB%A6%AC