개요
DBMS는 데이터를 일관성 있게 관리할 수 있도록 데이터를 입력받을 때, 다양한 제약조건(Constraint)을 제공하고 있습니다. 오늘은 다양한 제약 조건 중 데이터를 식별하는 기준인 키(Key)에 대하여 알아보겠습니다.
키의 종류
- 키는 여러 가지 종류가 존재하나 크게 슈퍼키, 후보키, 기본키, 대체키, 외래키 5가지로 분류합니다.
슈퍼 키(Super Key)
- 테이블에서 각 행을 유일하게 식별할 수 있는 속성들의 집합
예시
- 고객의 정보가 있는 테이블을 예시로 들어보겠습니다.
- 고객 아이디 속성은 모든 고객 행마다 값이 달라야 하고 이를 통해 다른 행과 유일하게 구별이 가능하므로 슈퍼 키가 될 수 있습니다.
- 그러나 나이·직업·등급·적립금 속성은 값이 같은 고객이 있을 수 있으므로 유일성을 만족시키지 못해 슈퍼 키가 될 수 없습니다.
후보 키(Candidate Key)
- 테이블에서 각 행을 유일하게 식별할 수 있는 속성의 "최소" 집합
- 즉, 슈퍼 키 중에서 최소성을 만족하는 것이 후보 키가 됩니다.
- 최소성(minimality)은 키를 구성하고 있는 여러 속성 중에서 하나라도 없으면 행을 유일하게 구별할 수 없는, 꼭 필요한 최소한의 속성들로만 키를 구성하는 특성입니다.
예시
- 고객 테이블에 있는 슈퍼 키 중에서 고객 아이디 속성은 단독으로 고객 행을 유일하게 구별할 수 있으므로 후보 키가 될 수 있습니다.
- 하지만 (고객 아이디, 고객 이름)은 후보 키가 될 수 없습니다. 고객 이름 속성이 없어도 고객 아이디 속성만으로도 유일성을 만족할 수 있기 때문입니다.
- 후보 키가 되기 위해 만족해야 하는 유일성과 최소성의 특성은 새로운 행이 삽입되거나 기존 행의 속성 값이 바뀌어도 유지되어야 합니다.
기본키(Primary Key)
- 후보 키들 중에서 하나를 대표로 선택한 속성
예시
- 고객 테이블에 주소 속성이 추가된다면 고객 아이디 속성과 함께 (고객 이름, 주소) 속성 집합도 후보 키가 될 수 있습니다. 왜냐하면 일반적으로 같이 사는 가족의 주소는 같지만 이름까지 같은 경우는 없기 때문입니다.
대체키(Alternate key)
- 기본키로 선정되지 않은 후보 키들
예시
- 고객 아이디 속성을 기본키로 선택할 경우 기본키로 선택되지 못한 (고객 이름, 주소) 속성 집합이 대체키가 됩니다.
외래 키(Foreign key)
- 다른 테이블의 기본키를 그대로 참조하는 속성의 집합
예시
- 주문 테이블의 주문 고객 속성이 고객 테이블의 기본키인 고객 아이디 속성을 참조하면 주문 고객 속성을 외래 키라고 합니다.
- 외래 키를 통해 고객 테이블과 주문 테이블이 관계를 맺어 주문 테이블의 행과 연관성 있는 고객 테이블의 행을 연결시킬 수 있습니다.
키의 관계 정리
- 키들은 위의 그림과 같은 관계를 가집니다.
- 슈퍼 키는 유일성이 있고 그 안에 포함된 후보키는 최소성까지 갖춘 키입니다.
- 후보키 중에서 기본키로 선택되지 못한 키는 대체키가 됩니다.
마무리
오늘은 DB 설계를 하기 위한 기초 개념인 Key에 대하여 공부한 내용을 정리해봤습니다.
최근 DB 설계를 하던 중 과연 내가 기존에 알고 있는 개념이 맞을까? 어떤 기준으로 DB를 설계해야 좋을까? 이런 고민이 들어 공부를 진행했습니다. 공부를 해보니 DB를 설계함에 있어서 비즈니스에 대하여 얼마나 깊이 이해하며 설계를 하는가에 따라서 추후 기능 추가나 개선을 할 경우 불필요한 작업을 피할 수 있다는 걸 알게 되었습니다. 만약 설계를 제대로 안 할 경우 최악의 사태에는 다시 처음부터 DB 설계해야 하는 경우가 있을 수도 있겠구나라고 깨달았습니다.
아직 부족하거나 틀린 부분이 있을 수도 있으니 주의하시면 좋을 거 같습니다.
이번 포스팅은 마무리하면서 다음 포스팅에서 뵙겠습니다.
참고
'데이터베이스' 카테고리의 다른 글
[DB] 정규화란? (0) | 2022.07.28 |
---|---|
[DB] 관계(Relationship)란? (0) | 2022.06.26 |
인덱스(Index)란? (0) | 2021.11.10 |
트랜잭션이란? (0) | 2021.10.28 |