정규화 (제 1정규화 ~ 제 3정규화)
과거 정보처리기사를 공부하면서는 도부이결다조로 외웠지만, 그렇게 외운 것은 까먹기 일수였고
당시 제대로 이해하지 못했어서 다시 한번 정리해보고자 한다.
1. 제 1정규화 (릴레이션에 속한 모든 속성의 도메인이 원자 값(atomic value)으로만 구성)
[표 9-5] 다중값 속성을 포함하는 이벤트참여 릴레이션 (제 1 정규화 위배)
고객아이디 | 이벤트번호 | 당첨여부 | 등급 | 할인율 |
apple | E001, E005, E010 | Y, N, Y | gold | 10% |
banana | E002, E005 | N, Y | vip | 20% |
carrot | E003, E007 | Y, Y | gold | 10% |
orange | E004 | N | silver | 5% |
apple이란 고객 아이디는 여러 개의 이벤트번호를 가지기에 모든 속성의 도메인이 원자값으로 구성됐다고 볼 수 없다.
[표 9-6] 제1정규형에 속하는 이벤트참여 릴레이션
고객아이디 | 이벤트번호 | 당첨여부 | 등급 | 할인율 |
apple | E001 | Y | gold | 10% |
apple | E005 | N | gold | 10% |
apple | E010 | Y | gold | 10% |
banana | E002 | N | vip | 20% |
banana | E005 | Y | vip | 20% |
carrot | E003 | Y | gold | 10% |
carrot | E007 | Y | gold | 10% |
orange | E004 | N | silver | 5% |
이제는 모든 도메인이 원자값을 가지므로, 제 1 정규형을 만족한다고 할 수 있다.
2. 제 2정규화 (부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되게 한다.)
함수적 종속에 대해서 먼저 정리해보고자 한다.
2-1. 부분 함수 종속이란?
어떤 속성 Y가 다른 복합 속성 X의 부분집합에 종속하는 관계
이벤트 참여 테이블에 고객아이디에 종속되는 등급과, 그에 따른 할인율이 함께 보이는 것은 제 2정규형을 이룬다고 할 수 없다. 그래서 고객 정보에 종속되는 정보와 그렇지 않은 정보를 나누어 정규화를 할 수 있다.
여기에서 할인율은 등급에 종속되는데, 고객 릴레이션 또한 제 2 정규형을 완전히 만족할 수 없다. 또한 이벤트 참여 릴레이션 역시 고객의 아이디와 이벤트 번호만 알면 당첨여부를 알 수 있다.
이렇게 되면 제 2 정규형은 만족시킬 수 있으나, 또 다른 의문이 들 수 있다.
고객의 정보에 따라 등급이 결정되지만 이 등급이 곧 할인율을 결정한다.
이렇게, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3정규형에 속한다.
3. 제 3정규화 (제2 정규형을 만족하고, 테이블 내의 모든 속성이 기본 키에만 의존하며, 다른 후보 키에 의존하지 않는다. )
3-1. 이행적 함수 종속이란?
릴레이션에서 X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립될 때 이행적 함수 종속이라고 한다.
아까 봤던 앞선 예시에서 고객아이디에 따라 등급을 알 수 있고 그 등급에 따라 할인율이 결정되므로, 이것에 맞게 정규화를 하면 아래와 같게 된다.