본문 바로가기
Quality control (Univ. Study)/Database Design

Normalization (2)

by 생각하는 이상훈 2023. 11. 9.
728x90

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

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

 

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


 

728x90

'Quality control (Univ. Study) > Database Design' 카테고리의 다른 글

Query Optimization  (0) 2023.11.16
INDEX 실습  (0) 2023.11.14
Normalization (1)  (0) 2023.11.07
Relation schema design protocol and Functional Dependencies  (1) 2023.10.31
Login page  (0) 2023.10.31