데이터는 중복 데이터를 제거하고 아노말리를 최소화하기 위하여 정규화를 사용하는 편이 일반적이다.
각 속성값은 원자여야함.
다가 속성과 복합 속성일 때 분리한다.
기본키에는 모든 어트리뷰트값이 종속되어야 한다. PK가 복합키인 #A와
#B가 있을 때, 어트리뷰트값 c,d는 A 혹은 B에만 종속되는 것이 아닌 A,B 모두 종속되어야 한다. 만약 부분 함수 종속이 된다면 그 속성을 릴레이션에서 분리한다. 2정규화는 후보 식별자를 구성하는 속성이 두 개 이상일 때만 대상이 된다.
Fully Functional Dependency

일반 속성이 결정자와 종속자 역할을 하는 이행적 종속성이 3정규화의 대상이다.
"모든 결정자가 후보키여야 한다"
결정자: 다른 속성의 값을 유일하게 결정할 수 있는 속성 또는 속성의 집합
후보키: 튜플을 유일하게 식별할 수 있는 속성 또는 속성의 집합
예를 들어, 학생의 학점을 관리하는 릴레이션이 있다. 학생은 여러 과목 수강 가능하며 교수는 한 과목만을 강의한다. 여러 교수는 동일 과목을 강의할 수 없다.자바 수업을 ㄱㅇㅎ와 ㅂㅅㅇ이 같이 할 수 없는 것이다
FD1:(학생번호, 과목명) -> (교수번호, 학점)
FD2:교수번호 -> 과목명
교수번호는 일반 속성이 되는데 FD2의 종속자인 과목명 속성이 주 식별자에 포함되었으므로 보이스코드(BCNF) 정규형에 어긋난다. 어긋난 모델은 다음과 같다.
수강과목 -> #학생번호 #과목명 교수번호 학점
BCNF 변경 시 다음과 같은 모델을 갖는다.
수강과목 -> #학생번호 #교수번호(FK) 학점
교수 -> #교수번호 과목명
함수 종속으로 1~BCNF 설계를 관통하고 4정규형은 다가 종속 개념이 기반이 된다!
1정규화와 비슷한 점은 1정규화는 다가 속성을 엔터티로 분해하는 것이고 4정규화는 서로 관련이 없는 다가 속성을 개별 엔터티로 분해하는 것이다.
만약 유경민이라는 사원이 특기로 브레이크댄스, 랩, 담넘기, 임창정 성대모사를 할 수 있고 기술은 자바, 파이썬, C++, 코틀린이 있다고 가정하자. (실제로 특기는 두 가지만 할 수 있다)
이 모델은 사원재능이라는 한 릴레이션 주변으로 1:N의 사원, 특기, 기술 릴레이션이 구성되어 있을 것이다. 이는 중복 데이터를 만들고 릴레이션의 인스턴스 개수와 데이터 값을 의미하는 셀이 방대해진다.
따라서 이걸 해결하기 위하여 붙어있는 릴레이션을 분리한다.
특기와 기술은 서로 관계성이 없으므로 이 둘을 분리시키는 것이다.