정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 있는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계별로 구분하여 정규형이 높아질 수록 이상현상이 줄어든다.
- 삽입 이상 : 튜플 삽입 시, 특정 속성에 해당하는 값이 없어 NULL을 입력해야하는 상황
- 삭제 이상 : 튜플 삭제 시, 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
- 갱신 이상 : 튜플 갱신 시, 중복된 데이터의 일부만 갱신되어 일어나는 데이터 불이치 현상
- 데이터베이스 변경 시 이상현상을 제거할 수 있다.
- 정규화된 데이터베이스 구조에서 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
- 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킨다.
- 릴레이션의 분해로 인해 릴레이션 간의 조인연산이 많아진다.
- 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있다.
- 만약 조인이 많이 발생하여 성능 저하가 나타나면 반정규화를 적용할 수도 있다.
- 각 칼럼이 하나의 속성만을 가져야 한다.
- 하나의 칼럼은 같은 종류나 타입을 가져야 한다.
- 각 칼럼이 유일한(유니크)한 이름을 가져야함.
- 칼럼의 순서는 상관 없어야 한다.
예를 들면,
| 학생번호 | 이름 | 과목 |
|---|---|---|
| 101 | 아이유 | 운영체제,DB |
| 102 | 한지민 | 자바 |
| 103 | 한효주 | C,C++ |
위 도표에서
1. 각 칼럼이 하나의 속성만을 가져야 한다. -> 만족 x 하나의 칼럼에 두 개의 값을 가지고 있기 때문이다.
2. 하나의 칼럼은 같은 종류나 타입을 가져야 한다. -> 만족
3. 각 칼럼이 유일한(유니크)한 이름을 가져야함. -> 만족
4. 칼럼의 순서는 상관 없어야 한다. -> 만족
1번 규칙이 불만족하니 이를 고치게 된다면,
| 학생번호 | 이름 | 과목 |
|---|---|---|
| 101 | 아이유 | 운영체제 |
| 101 | 아이유 | DB |
| 102 | 한지민 | 자바 |
| 103 | 한효주 | C |
| 103 | 한효주 | C++ |
위와 같이 각 칼럼이 원자 값을 갖도록 테이블을 분해하면 1 정규형을 만족하게 바꿀 수 있다.
- 1 정규형을 만족해야 한다.
- 모든 칼럼이 부분적 종속이 없어야 한다. (모든 칼럼이 완전 함수 종족을 만족해야 한다.)
부분적 종속이라 하면 기본키 중에 특정 칼럼에만 종속되는 것이며,
완전 함수 종속은 기본키의 부분집합이 결정자가 되어선 안된다는 것이다.
| 학생번호 | 과목 | 지도교수 | 성적 |
|---|---|---|---|
| 101 | 운영체제 | 정주현 | 100 |
| 101 | DB | 심지혜 | 40 |
| 102 | 자바 | 진명인 | 50 |
| 103 | C | 위진영 | 40 |
| 103 | C++ | 조민정 | 30 |
위와 같은 테이블이 있을때, 성적을 알기 위해선 학생번호+과목이 있어야한다.(101번학색의 운영체제 점수 100점)
하지만, 특정 과목의 지도교수는 과목명만 알게 되어도 지도교수명을 알 수 있게 된다.(운영체제의 지도 교수는 정주현)
위 테이블에선 기본키는 (학생번호+과목)이다.
그런데 이때 지도교수 칼럼은 (학생번호+과목)에 종속되는 것이 아닌, (과목)에만 종속이 되는 부분적 종속이다. 이는 제 2정규형을 만족하지 않기에 분해해야 한다.
| 학생번호 | 과목 | 성적 |
|---|---|---|
| 101 | 운영체제 | 100 |
| 101 | DB | 40 |
| 102 | 자바 | 50 |
| 103 | C | 40 |
| 103 | C++ | 30 |
\
| 과목 | 지도교수 |
|---|---|
| 운영체제 | 정주현 |
| DB | 심지혜 |
| 자바 | 진명인 |
| C | 위진영 |
| C++ | 조민정 |
위와 같이 분해를 하게된다면 제 2정규형은 맞게된다.
- 2 정규형을 만족해야 한다.
- 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.
이행 종속성이란 A->B, B->C일때 A->C가 성립할 시 이행 종속이라고 한다.

위 사진을 보면 ID를 알면 등급을 알 수 있다. 등급을 알면 할인율을 알 수 있다. 따라서 ID를 알면 할인율을 알 수 있다. 이행 종속성이 존재하므로 제 3 정규형을 만족하지 않는다.
| ID | 등급 |
|---|---|
| 101 | Vip |
| 102 | Gold |
| 102 | Bronze |
\
| ID | 등급 |
|---|---|
| Vip | 40% |
| Gold | 20% |
| Bronze | 10% |
위와 같이 분해하면 제 3정규형을 만족한다.
- 3정규형을 만족해야 한다.
- 모든 결정자가 후보키 집합에 속해야 한다.
모든 결정자가 후보키 집합에 속해야 한다는 뜻은, 후보키 집합에 없는 칼럼이 결정자가 되어선 안된다는 뜻이다 예를 들자

위와 같은 테이블을 보자. (학생 번호, 과목)이 기본키로 지도교수를 알 수 있다. 하지만 같은 과목을 다른 교수가 가르칠 수도 있어서 과목-> 지도교수 종속은 성립하지 않는다.
하지만 지도교수가 어떤 과목을 가르치는지는 알 수 있으므로 지도교수-> 과목 종속이 성립한다.
이처럼 후보키 집합이 아닌 칼럼이 결정자가 되어버린 상황을 BCNF를 만족하지 않는다고 한다.
BCNF를 만족하기 위해서는 아래와 같이 분해하면 된다.
| 학생번호 | 지도교수 |
|---|---|
| 101 | 김자바 |
| 101 | 박플플 |
| 102 | 오자바 |
| 103 | 조씨샵 |
| 104 | 김자바 |
| 지도교수 | 과목 |
|---|---|
| 김자바 | 자바 |
| 박플플 | C++ |
| 오자바 | 자바 |
| 조씨샵 | C# |
이렇게 하면 정규화가 완료된다.
4정규형 이상도 있으나, 그 이상 정규화하면 정규화의 단점이 나타날 수도 있다고 한다.ㅊ