정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러개의 릴레이션을 생성하게된다. 이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다.
정규화의 장점
정규화의 단점
정규화를 알아보기 전에, 이상현상과 함수 종속성에 대해서 꼭 알아야 한다. 아래 포스팅을 참고하자.
이상현상(anonaly), 함수 종속성(Functional Dependency)이란?
제1 정규형은 다음과 같은 규칙을 만족해야 한다.
예시를 통해 알아보자.
(그림 1) 1정규화가 필요한 테이블1번 규칙을 불만족하므로 이를 고치기 위해서는 아래와 같이 분해하면 된다.
(그림 2) 1NF를 만족한 테이블위와 같이 각 컬럼이 원자값을 갖도록 테이블을 분해하면 1정규형을 만족하게 바꿀 수 있다.
제2 정규형은 다음과 같은 규칙을 만족해야 한다.
부분적 종속이란 기본키 중에 특정 컬럼에만 종속되는 것이다.
완전 함수 종속이란 기본키의 부분집합이 결정자가 되어서는 안된다는 것이다.
위와 같은 테이블과 FD 다이어 그램을 보자.
성적의 특정 값을 알기 위해서는 학생번호+과목이 있어야한다.(ex: 102번의 자바 성적 70)
하지만 특정 과목의 지도교수는 과목명만 알면 지도교수가 누군지 알 수 있다.(ex: 자바의 지도교수 박자바)
위 테이블에서 기본키는(학생번호, 과목)으로 복합키이다.
그런데 이때 지도교수 컬럼은 (학생번호, 과목에) 종속되지 않고 (과목)에만 종속되는 부분적 종속이다.
따라서 제2 정규화를 만족하지 않으므로 아래와 같이 분해해야 한다.
(그림 4) 2NF위와 같이 분해하면 제2 정규형을 만족한다.
제3 정규형은 다음과 같은 규칙을 만족해야 한다.
위와 같은 테이블을 보자. ID를 알면 등급을 알 수 있고 등급을 알면 할인율을 알 수 있다. 따라서 ID를 알면 할인율을 알 수 있다. 결과적으로, 이행 종속성이 존재하므로 제3 정규형을 만족하지 않는다.
3정규형을 만족하기 위해서는 아래와 같이 분해해야 한다.
(그림 6) 3NFBCNF는 제3 정규형을 좀 더 강화한 버전으로 다음과 같은 규칙을 만족해야 한다.
모든 결정자가 후보키 집합에 속해야 한다는 뜻은, 후보키 집합에 없는 칼럼이 결정자가 되어서는 안된다는 뜻이다.
(그림 7) BCNF가 필요한 테이블위와 같은 테이블을 보자.(학생 번호, 과목)이 기본키로 지도교수를 알 수 있다. 하지만 같은 과목을 다른 교수가 가르칠 수도 있어서 과목->지도교수 종속은 성립하지 않는다. 하지만 지도교수가 어떤 과목을 가르치는지 알 수 있으므로 지도교수->과목 종속이 성립한다.
이처럼 후보키 집합이 아닌 컬럼이 결정자가 되어버린 상황을 BCNF를 만족하지 않는다고 한다.(참고로 위 테이블은 제3 정규형까지는 만족하는 테이블이다.)
BCNF를 만족하기 위해서는 아래와 같이 분해하면 된다.
(그림 8) BCNF참고로 위에서 학생 번호와 지도교수는 다치 종속성이 발생하게 되는데, 이는 제4 정규형에서 다뤄진다.
제4 정규형은 다음과 같은 규칙을 만족해야 한다.
1. BCNF를 만족해야 한다.
2. 다치 종속(Multi-valued Dependency)이 없어야 한다.
여기서 다치 종속이란 다음과 같은 조건들을 만족할 때를 뜻한다.
A->B 일 때 하나의 A값에 여러 개의 B값이 존재하면 다치 종속성을 가진다고 하고 A->B라고 표시한다
최소 3개의 컬럼이 존재한다.
R(A,B,C)가 있을 때 A와 B 사이에 다치 종속성이 있을 때 B와 C가 독립적이다.
위와 같은 테이블을 보자. 101번 학생은 자바와 C++과목을 수강하고, 노래와 게임을 취미로 가진다.
이렇게 되면 학생 번호 하나에 과목 여러개와 위미 여러개가 종속된다. 이런 경우 학생 번호를 토대로 값을 조회하면 아래와 같이 중복이 발생하게 된다.
(그림 10) 다치 종속성의 문제점 과목과 취미는 관계가 없는 독립적인 관계이다. 하지만 같은 테이블의 학생 번호라는 컬럼에 다치 종속되어버려 중복이 발생하는 문제가 생겼다. 4NF를 만족하기 위해서는 아래와 같이 분해하면 된다. (그림 11) 4NF위 2개의 테이블은 여전히 다치 종속성을 가지지만, 2개 이상의 컬럼이 하나의 컬럼에 다치 종속되지는 않기 때문에 제4 정규형을 만족한다.
제5 정규형은 중복을 제거하기 위해 분해할 수 있을 만큼 전부 분해하는 것이다. 이러한 5NF는 Project Join Normal Form(PJNF)라고도 불린다. 이러한 제5 정규형은 다음과 같은 규칙을 만족해야 한다.
조인 종속은 다치 종속의 좀 더 일반화된 형태이다. 만약 하나의 릴레이션을 여러 개의 릴레이션으로 무손실 분해했다가 다시 결합할 수 있다면 조인 종속이라고 한다.
(그림 11) 조인 종속예를 들어 A라는 릴레이션을 B와 C로 분해했다가 다시 조인했을 때 그대로 A가 된다면, A는 조인 종속성이 있다고 한다.
제5 정규형의 경우 예시를 들기 복잡하기 때문에 생략하겠다.
일반적으로 현실의 데이터베이스에서는 5 정규형을 사용하지 않는다.