정규화
이상 현상을 막도록, 릴레이션을 관련 있는 속성으로만 구성하기 위해 릴레이션을 분해하는 과정.
정규화는 함수의 종속성을 판단하여 수행한다.
릴레이션을 분해할 때는 손실이 없어야 하는데, 자연 조인을 하면 원래 상태로 복원이 가능해야한다.
X가 Y를 함수적으로 결정한다
예시)
고객 아이디: apple | 고객 이름: 정소화 | 등급: gold
고객 아이디 -> 고객 이름
고객 아이디 -> 등급
고객 아이디 ->(고객 이름,등급)
기본 정규형
- 제 1정규형
- 제 2정규형
- 제 3정규형
- 보이스/코드 정규형
고급 정규형
- 제 4정규형
- 제 5정규형
제 1정규형을 만족하면 DB 릴레이션이 될 자격을 갖는다.
제 1정규형 + 부분 함수 종속 삭제
제 2정규형 + 이행적 함수 종속 삭제
강한 제 3정규형
예) 후보키가 아닌 속성이 결정자 역할을 하는 경우
보이스/코드 정규형 + 다치 속성 제거
제 4정규형 + 조인 속성 제거
마지막 단계의 정규형인 제 5정규형을 만족하는 것이 가장 좋은 방법은 아니다.
제 3정규형, BCNF까지 분해해도 이상 현상이 해결되는 경우가 많다.