정규화란 데이터의 중복을 최소화하고 무결성을 향상 시키는 등 여러 목적을 달성하기 위해 관계형 데이터베이스를 정규화된 형태로 재디자인하는 것을 말한다.
이전 포스팅에서는 BCNF까지 다루었고, 이번엔 제 4정규화(4NF)와 제 5정규화(5NF)에 대해 다룰 것이다.
제 4정규형은 다음과 같은 규칙들을 만족해야 한다.
- BCNF를 만족해야 한다.
- 다치 종속(Multi-valued Dependency)이 없어야 한다.
다치 종속이란 다음과 같은 조건들을 만족할 때를 뜻한다.
위 테이블에는 두 가지 다치 종속성이 {Restaurant} 컬럼에 존재한다는 문제점이 있다.
아래와 같은 다치 종속들이 존재한다.
Pizza Varieity와 Delivery Area는 관계가 없는 독립적인 관계이다. 하지만 같은 테이블의 {Restaurant} 컬럼에 다치 종속되어버려 중복이 발생하게 된다.
따라서, 4NF를 만족하기 위해서 테이블을 아래와 같이 분해하면 된다.
위 테이블들은 여전히 다치 종속성을 가지지만, 2개 이상의 컬럼이 하나의 컬럼에 다치 종속되지는 않으므로 4NF를 만족한다.
제 5정규형은 중복을 제거하기 위해 분해할 수 있을 만큼 전부 분해하는 것이다. 제 5정규형은 다음과 같은 규칙들을 만족해야 한다.
- 제 4정규형을 만족해야 한다.
- 조인 종속(Join Dependency)이 없어야 한다.
- 조인 연산을 했을 때 손실이 없어야 한다.
조인 종속은 다치 종속의 조금 더 일반화된 형태이다. 만약 하나의 릴레이션을 여러 개의 릴레이션으로 무손실 분해했다가 다시 결합할 수 있다면 조인 종속이라과 한다.
예를 들어 A라는 릴레이션을 B와 C로 분해했다가 다시 조인했을 때 그대도 A가 된다면, A는 조인 종속성이 있다고 한다.