SQLD 자격증 공부하면서 정리한 내용들을 작성한 글입니다.
2. 정규화와 성능
(1) 정규화(Normalization)란?
- 데이터 모델을 좀 더 구조화하고 개선시키는 절차
- 테이블 간에 중복된 데이터를 허용하지 않는 것이 목표
→ 무결성(Integrity)을 유지할 수 있고, DB 저장 용량을 줄일 수 있음
- 정규화는 이상현상(Anomaly)이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다.
- 이상현상이 존재하는 릴레이션을 분해해 여러 개의 릴레이션을 생성하게 된다.
- 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어든다.
(2) 정규화 특징
- 중복 제거, 무결성을 지킴
- 성능은 조회와 삽입, 수정, 삭제 두 가지 측면을 모두 고려해야 함
- 정규화가 잘 되어 있으면, 삽입, 수정, 삭제 성능 향상됨
→ 잘 쪼개져서
- 반정규화가 잘 되어 있으면, 조회 성능 향상됨
→ 중복 만들어서 조인할 필요 없음
(3) 정규화 과정
(출처) https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99461C395E5FC1A30B
- 제 1 정규화
- 테이블의 컬럼이 원자값(Atomic Value,하나의 값)을 갖도록 테이블을 분해하는 것
- 모든 값이 원자값을 가짐
- 중복된게 많아 보이면 1차 정규화 대상
- 제 2 정규화
- 제 1 정규화를 진행한 테이블에 완전 함수 종속을 만족하도록 테이블을 분해하는 것
- 부분함수종속 제거
- 중복된게 안보이면 2차 정규화 대상
- 제 3 정규화
- 제 2 정규화를 진행한 테이블에 이행적 종속을 없애도록 테이블을 분해하는 것
- 이행함수종속 제거
- 식별자가 아닌 속성(주식별자의 일부 또는 일반속성)이 결정자 역할을 하는 함수 종속 제거
- BCNF 정규화
- 제 3 정규화를 진행한 테이블에 모든 결정자가 후보키가 되도록 테이블을 분해하는 것