제4정규형(4NF)이란?
제4정규형(Fourth Normal Form, 4NF)은 1NF(제1정규형), 2NF(제2정규형), 3NF(제3정규형), 그리고 보이스-코드 정규형(BCNF)에 이어지는 정규화 단계입니다. 4NF는 1977년 로널드 페이긴(Ronald Fagin)에 의해 처음 소개되었습니다.
어떤 릴레이션이 4NF를 만족하려면 먼저 BCNF를 만족해야 하며, 동시에 서로 독립적인 다치 속성(multi-valued attribute)이 하나의 테이블 안에 공존해서는 안 됩니다. 즉, 두 개 이상의 독립적인 다치 종속(multivalued dependency)이 존재하면 안 된다는 의미입니다.
4NF 위반 예제
다음 예제를 통해 4NF를 살펴보겠습니다.
<Movie>
| 영화명(Movie_Name) | 촬영지(Shooting_Location) | 상영 장르(Listing) |
| 영화1 | 영국 | 코미디 |
| 영화1 | 영국 | 스릴러 |
| 영화2 | 호주 | 액션 |
| 영화2 | 호주 | 범죄 |
| 영화3 | 인도 | 드라마 |
위 테이블은 4NF를 만족하지 않습니다. 그 이유는 다음과 같습니다.
- 동일한 장르(리스팅)를 여러 영화가 가질 수 있습니다.
- 하나의 영화가 여러 촬영지에서 촬영될 수 있습니다.
즉, '영화명 → 촬영지'와 '영화명 → 상영 장르'라는 두 개의 독립적인 다치 종속이 한 테이블에 함께 존재하고 있어, 데이터 중복과 갱신 이상(anomaly)이 발생할 수 있습니다.
4NF로 변환하기
위 테이블을 두 개의 테이블로 분해하여 4NF 형태로 만들어 보겠습니다.
<Movie_Shooting>
| 영화명(Movie_Name) | 촬영지(Shooting_Location) |
| 영화1 | 영국 |
| 영화2 | 호주 |
| 영화3 | 인도 |
<Movie_Listing>
| 영화명(Movie_Name) | 상영 장르(Listing) |
| 영화1 | 코미디 |
| 영화1 | 스릴러 |
| 영화2 | 액션 |
| 영화2 | 범죄 |
| 영화3 | 드라마 |
테이블을 두 개로 분리함으로써 다치 종속의 위반 문제가 해결되었으며, 이제 두 테이블 모두 4NF를 만족합니다. 이처럼 4NF는 서로 독립적인 다치 종속을 별도의 릴레이션으로 분해함으로써 데이터 중복을 줄이고 데이터베이스의 무결성을 높이는 데 기여합니다.