DB설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 하며 정규화된 결과를 정규형이라고 한다.
제 1정규화가 필요한 테이블
| 고객기업ID | 고객기업명 | 주문번호 |
|---|---|---|
| 001 | A사 | 101 |
| 002 | B사 | 101, 102 |
| 003 | C사 | 101, 102 |
제 1정규형 테이블
| 고객기업ID | 고객기업명 | 주문번호 |
|---|---|---|
| 001 | A사 | 101 |
| 002 | B사 | 101 |
| 002 | B사 | 102 |
| 003 | C사 | 101 |
| 003 | C사 | 102 |
제 1정규화가 필요한 테이블에서 B사와 C사같은 경우에는 주문번호가 101, 102처럼 단일값이 아니므로 테이블의 구조를 수정해야 한다.
제 2정규화가 필요한 테이블
| 고객기업ID | 주문번호 | 주문접수일 | 고객기업명 | 고객기업 규모 |
|---|---|---|---|---|
| 001 | 101 | 12/20 | A사 | 대규모 |
| 002 | 101 | 12/25 | B사 | 중규모 |
| 002 | 102 | 12/25 | B사 | 중규모 |
| 003 | 101 | 12/27 | C사 | 소규모 |
| 003 | 102 | 12/31 | C사 | 소규모 |
제 2정규형 테이블
| 고객기업ID | 주문번호 | 주문접수일 |
|---|---|---|
| 001 | 101 | 12/20 |
| 002 | 101 | 12/25 |
| 002 | 102 | 12/25 |
| 003 | 101 | 12/27 |
| 003 | 102 | 12/31 |
| 고객기업명 | 고객기업 규모 |
|---|---|
| A사 | 대규모 |
| B사 | 중규모 |
| B사 | 중규모 |
| C사 | 소규모 |
| C사 | 소규모 |
제 2정규화가 필요한 테이블에서 기본키는 (고객기업ID+주문번호)이다. 주문접수일 (고객기업ID+주문번호)으로 값을 가져 올 수 있지만, 고객기업명과 고객기업 규모는 고객기업ID만으로도 값을 가져 올 수 있는 부분적 종속이 존재 하므로 테이블의 구조를 수정해야 한다.
제 3정규화가 필요한 테이블
| 고객기업ID | 고객기업명 | 고객기업 규모 | 업계코드 | 업계명 |
|---|---|---|---|---|
| 001 | A사 | 대규모 | 201 | 석유 |
| 002 | B사 | 중규모 | 202 | 건설 |
| 002 | B사 | 중규모 | 202 | 건설 |
| 003 | C사 | 소규모 | 203 | 바이오 |
| 003 | C사 | 소규모 | 203 | 바이오 |
제 3정규형 테이블
| 고객기업ID | 고객기업명 | 고객기업 규모 | 업계코드(FK) |
|---|---|---|---|
| 001 | A사 | 대규모 | 201 |
| 002 | B사 | 중규모 | 202 |
| 002 | B사 | 중규모 | 202 |
| 003 | C사 | 소규모 | 203 |
| 003 | C사 | 소규모 | 203 |
| 업계코드 | 업계명 |
|---|---|
| 201 | 석유 |
| 202 | 건설 |
| 202 | 건설 |
| 203 | 바이오 |
| 203 | 바이오 |
제 3정규화가 필요한 테이블에서는 업계코드 -> 업계명 이행 종속성이 존재하므로 테이블의 구조를 수정해야 한다.
BCNF가 필요한 테이블
| 학생번호 | 과목 | 지도교수 |
|---|---|---|
| 101 | JAVA | 김자바 |
| 102 | C++ | 박플플 |
| 103 | JAVA | 오자바 |
| 104 | C# | 조씨샵 |
| 105 | JAVA | 김자바 |
BCNF 테이블
| 학생번호 | 지도교수 |
|---|---|
| 101 | 김자바 |
| 102 | 박플플 |
| 103 | 오자바 |
| 104 | 조씨샵 |
| 105 | 김자바 |
| 지도교수 | 과목 |
|---|---|
| 김자바 | JAVA |
| 박플플 | C++ |
| 오자바 | JAVA |
| 조씨샵 | C# |
| 김자바 | JAVA |
(학생 번호, 과목)이 기본키로 지도교수를 알 수 있다. 하지만 같은 과목을 다른 교수가 가르칠 수도 있어서 과목-> 지도교수 종속은 성립하지 않는다. 그러나 지도교수가 어떤 과목을 가르치는지는 알 수 있으므로 지도교수-> 과목 종속이 성립하므로 테이블의 구조를 수정해야 한다.
이처럼 후보키 집합이 아닌 칼럼이 결정자가 되어버린 상황을 BCNF를 만족하지 않는다고 한다.
참고 문서 및 링크