본문 바로가기
데이타베이스

정규화(Normalization) 개념과 정규화 과정(4NF, 5NF)

by minimax95 2020. 6. 10.

이번 포스팅에서는 정규화(Normalization) 개념과 정규화 과정 두 번째 시간으로 고급 정규화 과정인 제4 정규형(Four Normal Form : 4NF)과 제5 정규형(Five Normal Form : 5NF)에 대해서 알아보겠습니다.

 

제 4정규형(Four Normal Form : 4NF)은 릴레이션 R에 다중치 종속(Multi Value Dependency : MVD) A ->>B가 존재할 때 R의 모든 속성도 A에 함수 종속이면 릴레이션 R은 제4 정규형에 속합니다. 다시말해 릴레이션 R에 A, B, C 세 개의 속성이 속해 있을 때 속성(A, C)의 도메인 값에 대응되는 B의 도메인 값 집합이 C 값에 독립이면, B는 A에 다중치 종속이라 하고 기호로는 A ->>B로 표시합니다.

예를 들어서 살펴보겠습니다.

[강의 릴레이션]

과   목 교수 코드 교재 코드
물리학 A1 Z1
물리학 A2 Z1
물리학 A1 Z2
물리학 A2 Z2
데이터베이스 A3 Z3
데이터베이스 A3 Z4
데이터베이스 A3 Z5

위 강의 릴레이션에서 물리학 과목의 담당 교수는 A1, A2이고 교재 코드가 Z1, Z2라면 [강의 릴레이션]에는 4개의 튜플이 포함되어야 합니다. 이렇게 릴레이션이 구성되면 많은 데이터의 중복이 초래되고 이상현상이 발생합니다.

따라서 [강의 릴레이션]에서는 MVD 과목 ->> 교수코드|교재코드가 존재하므로 두 개의 릴레이션 과목 교수(과목, 교수 코드)와 과목 교재(과목, 교재 코드)로 아래와 같이 무손실 분해를 할 수 있습니다.

[과목 교수]

과   목 교수 코드
물리학 A1
물리학 A2
데이터베이스 A3

[과목 교재]

과   목 교재 코드
물리학 Z1
물리학 Z2
데이터베이스 Z3
데이터베이스 Z4
데이터베이스 Z5

위에서 함수 종속이란 용어를 사용했는데 함수 종속(FD : Functional Dependency)은 좋은 릴레이션 설계를 위한 정형적 기준으로 속성의 의미와 속성 상호 간의 관계에서 유도되는 일종의 제약 조건을 말합니다.

참고로 함수 종속의 정의는 어떤 릴레이션 R에서 A, B가 릴레이션 R의 부분 속성(Attribute)이라고 할 때 속성 A의 도메인 값(속성 값, 원자 값) 각각에 대해 시간에 관계없이 속성 B의 도메인 값이 오직 한 개만 연관된다면 B는 A의 함수 종속이라 하고, A -> B로 표기합니다. 여기서 A는 결정자, B는 종속자라고 합니다.

 

제5 정규형(Five Normal Form : 5NF)은 릴레이션 R에 존재하는 모든 조인 종속(JD)이 릴레이션 R의 후보키를 통해서만 성립된다면 릴레이션 R은 제5 정규형 또는 PJ/NF(Projection-Join Normal Form)에 속합니다.

예를 들어 {A, B, C}를 릴레이션 R의 부분집합이라고 할 때, 릴레이션 R에서 {A, B, C}를 프로젝션한 것들을 조인한 것과 원래의 릴레이션 R이 같다면 릴레이션 R은 조인 종속(JD : Join Dependency)을 만족시킬 수 있습니다.

이를 표로 정리하자면 아래와 같습니다.

위에서 프로젝션이란 속성을 구하는 연산으로 수직적 부분 집합을 취하는 연산을 말하고 조인이란 2개 이상의 릴레이션을 조건에 따라 접속하는 연산을 말합니다.

 

지난 포스팅에서 기본 정규형인 1NF, 2NF,3NF, BCNF에 대해서 알아보았고 이번 포스팅에서는 고급 정규형인 4NF와 5NF에 대해 살펴보았습니다.

 

정규형에 대한 개념은 이해가 어렵지만 실무에서도 많이 사용되는 부분인 만큼 정리가 필요한 부분입니다.

감사합니다.

반응형

댓글1

  • 양초임 2021.02.27 18:22

    제 4정규화 예시는 잘못된 케이스 아닌가요? 분리된 과목교제 테이블과 과목교수 테이블만 가지고 A1 교수의 물리학 과목 교재가 Z1 이란거를 알 수 없을것같은데요. 애초에 과목교재 테이블의 기본키가 과목-교재 이구 과목교수 테이블의 기본키가 과목-교수 인데 두 테이블의 조인은 불가능하지 않나요?
    답글