Normalization (2)
ERD의 정규화 분석
우선 실무에서는 이전글에서 다룬 3NF까지만 정규화를 시켜도 충분하다고 한다. 따라서 3NF까지의 분석과정을 우선 살펴보면 아래와 같다.
ㅇ1NF를 만족하고 있는지 분석
- 1NF : 중복된 행(repeating groups)이 없고, 모든 속성은 원자값(atomic value)
- ERD에 있는 모든 entity가 PK가 있는지 확인
- 1NF를 만족하고 있는지 판단
ㅇ2NF를 만족하고 있는지 분석
- 2NF : 부분적 함수 종속을 제거
- PK가 1개이면 무조건 2NF를 만족
- PK가 2개 이상의 속성으로 이루어진 entity에서 PK속성일부와 나머지 속성들이 종속 관계가 있는지 일일이 체크해야함
ㅇ3NF를 만족하고 있는지 분석
- 3NF : 이행적 함수종속을 제거
- PK가 아닌 속성들 중에서 종속관계가 있는지 일일이 체크해야 한다.
Boyce-Codd Normal Form
BCNF( Boyce-Codd Normal Form)은 3NF를 넘어서서 더 엄격한 기준을 적용할때 이용하는 정규형이다.
BCNF는 릴레이션 R의 모든 결정자가 후보키이면 릴레이션 R은 BCNF에 속한다고 정의한다.
이때 BCNF를 strong 3NF라고도 한다.
이전에 다뤘던 예시를 통해 알아보자.
제약 조건
• 각 과목에 대한 한 학생은 오직 한 교수의 강의만 수강
• 각 교수는 한 과목만 담당
• 한 과목은 여러 교수가 담당할 수 있음
- 수강과목 (학번,과목,교수)
- 후보키 : {학번,과목}, {학번,교수}
- 기본키 : {학번,과목}
- 함수종속 : {학번,과목} -> 교수
교수 -> 과목


위 상태는 3NF를 만족하지만 아래와 같은 3NF(수강과목 릴레이션)에서의 이상이 존재한다.
① 삽입이상
• 교수 P5가 자료구조를 담당한다는 사실의 삽입은 학번(수강 학생)이 있어야 가능
② 삭제이상
• 100번 학생이 자료구조를 취소하여 투플을 삭제하면 P2가 담당교수 라는 정보도 삭제됨
③ 갱신이상
• P1이 프로그래밍 과목 대신 자료구조를 담당하게 되면 P1이 나타난 모든 투플을 변경하여야 함
교수가 결정자이지만 후보키가 아닌 것이 핵심 문제이다. 3NF 조건에 의해서는 문제가 없었으나 BCNF의 조건에 맞추려면 아래와 같이 수정해야한다.

수강교수(학번, 교수)
기본 키 : {학번, 교수}
외래키 : {교수} 참조 : 과목교수
과목교수(교수, 과목)
기본 키 : {교수}
4NF
여기부터는 거의 쓰이지 않는 과하게 strict한 정규형이다. 따라서 간단하게만 다루고 넘어가도록 하자.
4NF는 함수적 종속성은 하나의 공통된 형태의 제약조건을 명기하기 위해서 사용되며, 함수적 종속성 만에의해서 명기될 수 없는 다른 형태의 제약조건들이 존재한다. 추가적인 종속성에는 다치 종속성(multi-valued dependency)이 있으며, 이에 기반한 정규형이 제4정규형(4NF)이다.
예시를 통해 살펴보자.
조건
각 과목은 명세된 교수 중에서 어떤 교수도 가르칠 수 있다.
하지만, 명세된 교재 전부를 사용한다 는 조건이 필요하다.

5NF
다른 추가적 종속성으로 조인 종속성(Join Dependency)이 있으며, 이에 기반한 정규형이 제5정규형이다.
함수적 종속성, 다치 종속성, 조인 종속성을 모두 고려하는 정규형으로, 프로젝트-조인 정규형(Project-Join NF: PJNF)이라고도 한다. 조인 종속성을 발견하는 것은 매우 어려운 일로, 실제로 제5정규형은 거의 쓰이지 않는다.

Conclusion
최종적으로 정규화 과정을 살펴보면 아래와 같다.

정규형들 간의 포함 관계는 아래와 같다.
