정규화란?
정규화는 관계형 데이터베이스에서 데이터의 중복을 최소화하고 이상현상을 제거하기 위한 목적이 있다.
이상 현상(Anomaly)
- 삽입 이상 : 불필요한 정보를 포함하지 않으면 데이터를 삽입하는 것이 불가능하다.
- 삭제 이상 : 삭제하고자 하는 데이터 외에 필요한 데이터가 함께 삭제된다.
- 갱신 이상 : 데이터 일부를 갱신하면 데이터 불일치가 발생한다.
1NF
제 1정규화는 모든 도메인 값이 원자 값(Atomic value)를 가져야함을 의미한다.
학생 테이블
학번 * | 이름 | 학과 | 전화번호 |
---|---|---|---|
2020105055 | SONG | 컴퓨터공학과 | 01012345678 |
2020037001 | PARK | 물리학과 | 01022223333, 023005123 |
하나의 전화번호 컬럼에 복수개의 데이터가 들어가 있다. 이러한 형태는 1정규형을 위반한 것이므로 나눠줘야 한다.
학생 테이블
학번 * | 이름 | 학과 | 전화번호 |
---|---|---|---|
2020105055 | SONG | 컴퓨터공학과 | 01012345678 |
2020037001 | PARK | 물리학과 | 01022223333 |
2020037001 | PARK | 물리학과 | 023005123 |
2NF
제 2정규화는 모든 속성이 PK에 완전 함수 종속(fully functional dependent)한 상태, 즉 모든 부분 함수 종속(partial functional dependent)를 제거한 상태를 의미한다.
수강 테이블
학번 * | 수강과목 * | 이름 | 성적 |
---|---|---|---|
2020105055 | COMP321 | SONG | D+ |
2020037001 | COMP321 | PARK | A+ |
2020037001 | STAT452 | PARK | A0 |
여기서 주식별자는 {학번, 수강과목}인데 학생의 이름 같은 경우는 주식별자의 부분인 학번만으로도 결정할 수 있다. 이러한 것을 부분 함수 종속이라고 하며, 테이블 분리를 하여 해결한다.
부분 함수 종속은 데이터에 여러 Anomaly 현상을 일으킬 수 있다. 예를 들어, ‘2020037001’의 이름을 바꾸고자 할 때, 하나의 튜플이라도 누락이 발생하게 된다면 해당 학번에는 이름이 여러 개가 되어버리는 갱신 이상이 발생할 수 있다.
학생 테이블
학번 * | 이름 |
---|---|
2020105055 | SONG |
2020037001 | PARK |
수강 테이블
학번 * | 수강과목 * | 성적 |
---|---|---|
2020105055 | COMP321 | D+ |
2020037001 | COMP321 | A+ |
2020037001 | STAT452 | A0 |
다음과 같이 수정하면 주 식별자 전체로만 다른 내용이 결정되는, 완전 함수 종속 상태를 만족시키는 2정규화 형태이다.
3NF
제 3정규화는 제 2정규형을 만족하면서 이행적 함수 종속을 제거한 상태를 의미한다.
학생 테이블
학번 * | 이름 | 학과 | 학과건물 | 전화번호 |
---|---|---|---|---|
2020105055 | SONG | 컴퓨터공학과 | 공대9호관 | 01012345678 |
2020037001 | PARK | 물리학과 | 제1과학관 | 01022223333 |
2020037001 | PARK | 물리학과 | 제1과학관 | 023005123 |
주식별자인 {학번}으로 모든 속성들을 결정할 수 있다.
하지만 학과건물 같은 경우는 학과에서 파생된 내용으로 ‘학번 -> 학과 -> 학과건물’의 형태로 식별되며, 이 때 학과건물은 학번에 이행적 함수 종속된 상태라고 한다.
학생 테이블
학번 * | 이름 | 학과 | 학과건물 | 전화번호 |
---|---|---|---|---|
2020105055 | SONG | 컴퓨터공학과 | 공대9호관 | 01012345678 |
2020037001 | PARK | 물리학과 | 제1과학관 | 01022223333 |
2020037001 | PARK | 물리학과 | 제1과학관 | 023005123 |
학과 * | 학과 건물 |
---|---|
컴퓨터공학과 | 공대9호관 |
물리학과 | 제1과학관 |
BCNF(Boyce-Codd Normal Form)
보이스-코드 정규형은 제 3정규형의 종류이다. 제 3규형을 만족하면서 추가적인 조건을 만족하는데 함수 종속성 X->Y에서 후보키가 아닌 X가 존재해서는 안된다는 조건이다.
수강 테이블
학번 * | 수강과목 * | 교수 |
---|---|---|
2020105055 | COMP321 | 최형배 |
2020037001 | COMP321 | 최형배 |
2020037001 | STAT452 | 김판호 |
여기서 ‘{학번, 수강과목} -> 교수’로 기본적으로 제 3정규형을 만족한다.
하지만 만약 교수 한 명이 하나의 과목만을 강의한다고 가정하면, ‘교수 -> 수강과목’이라는 종속성이 발생한다. 여기서 교수는 후보키가 아니므로, 이는 Boyce-Codd 정규형을 위반한다.
수강 테이블
학번 * | 교수 |
---|---|
2020105055 | 최형배 |
2020037001 | 최형배 |
2020037001 | 김판호 |
교수 테이블
교수 * | 수강과목 |
---|---|
최형배 | COMP321 |
김판호 | STAT452 |