소피it블로그
[DB] 정규화(Normalization) 본문
1. 정규화의 목적
중복을 제거하여 삽입, 삭제, 갱신 이상이 발생할 가능성을 줄이는 것.
- 삽입 이상: 테이블에 데이터 삽입 시 원하지 않은 값들도 함께 삽입되는 현상
- 삭제 이상: 하나의 튜플을 삭제할 때 의도하지 않은 값들도 함께 삭제되는 현상
- 갱신 이상: 값을 갱신할 때 일부 튜플만 갱신되어 정보에 불일치가 발생하는 현상
2. 정규화 과정
정규화 과정: 정규형 원칙을 기반으로 테이블을 무손실 분해하여 정규형을 만들어나가는 것
- 제1정규형: 릴레이션의 모든 도메인이 원자값으로만 되어 있는 정규형
- 제2정규형: 제1정규형이면서 (부분적 함수 종속을 제거하여) 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 정규형
- 완전 함수 종속이란? 기본키의 부분집합이 결정자가 되어서는 안 됨, 즉 기본키의 특정 컬럼에만 종속된 컬럼이 없어야 함을 의미
- 제3정규형: 제2정규형이면서 (이행적 함수 종속을 제거하여) 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수 종속을 만족하지 않는 정규형
- 이행적 함수 종속이란? A → B, B → C인 경우 A → C가 성립하는데, 이 경우 집합 C가 집합 A에 이행적으로 함수 종속되었다고 함
- BCNF(보이스코드 정규형): 제3정규형이면서 (결정자이면서 후보키가 아닌 것 제거하여) 모든 결정자가 후보키인 정규형
3. 주의할 점
정규화가 성능의 향상을 무조건 보장하는 것은 아니다. 조인이 많이 발생하여 성능이 나빠질 경우 반정규화(Denormalization)가 필요하기도 하다.
참고자료:
http://www.yes24.com/Product/Goods/108887922
http://www.yes24.com/Product/Goods/107477760
'CS > 데이터베이스' 카테고리의 다른 글
[DB] 조인(Join) (0) | 2022.11.13 |
---|---|
[DB] 트랜잭션(Transaction) (0) | 2022.11.13 |
[DB] 인덱스(Index) (0) | 2022.11.13 |
[DB] 데이터베이스 기본 (0) | 2022.11.13 |
[SQL] 프로그래머스 SQL 고득점 Kit -String, Date (MySQL) (0) | 2022.11.04 |