키는 모든 허용 데이터에서 행을 유일하게 구별하는 속성 집합이다. 지금 우연히 값이 다르다는 사실만으로 키가 되지는 않는다.
books에서는 book_id가 기본키다. 제목이 같은 복본을 허용하므로 title을 키라고 가정하지 않는다. book_id와 title을 함께 써도 행을 구별하지만 title을 빼도 충분하다.
행을 유일하게 구별하는 속성 집합이 슈퍼키다. 후보키는 최소 슈퍼키다. 속성을 하나라도 빼면 유일성이 깨진다. 후보키 중 대표로 고른 것이 기본키이며 다른 후보키는 대체키다. 최소성은 글자 수나 값의 길이가 짧다는 뜻이 아니다.
- 01 →
허용할 중복을 정한다
- 02 →
유일성을 확인한다
- 03 →
속성을 빼 본다
- 04
대표 키를 고른다
같은 상황에서 비교하기
| 개념 | 기준 | 확인할 점 |
|---|---|---|
| 슈퍼키 | 유일성 | 불필요한 속성을 포함할 수 있다 |
| 후보키 | 유일성·최소성 | 여러 개일 수 있다 |
| 기본키 | 선택한 후보키 | SQL PRIMARY KEY는 유일성과 NOT NULL을 강제한다 |
| 대체키 | 선택하지 않은 후보키 | 예시의 title은 해당하지 않는다 |
도서관 예제로 따라가기
book_id만으로 유일한 현재 설계에서 {book_id, title}은 슈퍼키이지만 최소성이 없어 후보키는 아니다. 별도의 관리번호도 항상 유일하고 NULL이 없도록 정한다면 후보키를 더 둘 수 있다.
공통 예제 데이터 보기
| book_id | title | shelf_code | pages |
|---|---|---|---|
| 1 | SQL 입문 | DB | 120 |
| 2 | 설계 노트 | SW | 200 |
| 3 | 관계 모델 | DB | NULL |
| 4 | 분산 읽기 | NULL | 160 |
| loan_id | book_id |
|---|---|
| 11 | 1 |
| 12 | 1 |
| 13 | 2 |
내 말로 설명해 보기
{book_id, title}이 후보키가 아닌 이유를 최소성으로 설명해 보자.
설명 예시 확인
book_id만 남겨도 행을 구별하므로 title이 불필요하다. 유일성은 만족하지만 최소성을 만족하지 않는다.
참고한 자료
이전 개념 자료와의 연결
이전 자료에서 다룬 주제를 이어받아 설명과 예시를 다시 썼어요.
- 슈퍼키·후보키·기본키·대체키