본문 바로가기

Dev-/자료구조, 알고리즘

정규화란?

정규화를 이해하려면, 

우선 이상(Anomaly)에 대해 알 필요가 있습니다.



이상: 릴레이션에서 일부 속성들의 함수적 종속으로 인해 데이터의 중복이 발생하는 것

- 삽입, 삭제, 갱신 이상이 존재


다시말해, 

자료가 (객체지향 프로그래밍이 피해야할) 종속성을 가지고 있어

데이터 처리시 모순이 발생하는 것이상이라고 합니다.


여기서 함수적 종속이란, 한 속성이 다른 속성의 값을 유일하게 결정하는 것을 말합니다.

(X -> Y: Y는 X에 종속)






정규화는 바로 이러한 자료의 이상을 해결하기 위해 고안된 방법입니다.

각각의 정규형에 대해 알아보겠습니다.


- 제 1 정규형(1NF)

: 모든 속성의 도메인원자값으로 구성

(원자값단일값을 말하며, 즉, 복합값, 다중값 아닌 값을 말합니다.)


(출처: http://myeonguni.tistory.com/210)


- 제 2 정규형(2NF)

: 제 1정규형을 만족하고, 모든 속성의 부분적 함수적 종속을 제거

(부분적 함수적 종속: 한 릴레이션에 존재하는 여러 키값에 대해 부분적으로 종속된 상태)

(즉, 모든 속성이 완전 함수적 종속을 만족하는 상태를 말합니다.)


- 제 3 정규형(3NF)

: 제 2정규형을 만족하고, 모든 속성의 이행적 함수적 종속제거

(이행적 함수적 종속: X -> Y, Y -> Z)


- Boyce-codd 정규형(BCNF)

제 3정규형을 만족하고, 후보키가 아 결정자제거

(결정자: X -> Y에서 X를 가리킴)


각 정규형은 그보다 앞선 정규형을 만족하며, 더욱 엄격한 조건을 같습니다.




위 정규형 이외에도 다치 종속성을 제거한 제 4정규형(4NF), 조인 종속성을 제거한 제 5정규형(5NF)

등 수많은 정규형이 존재하지만,,


관계형 데이터베이스의 설계목표는 각 릴레이션이 3NF, BCNF를 갖게 하는 것입니다.