정규화를 하지 않으면 테이블에 중복된 데이터가 많아지고 데이터의 삽입, 삭제, 수정 등을 하기 어려워진다. 이를 이상현상(anomaly)이라고 한다.
이러한 이상현상을 제거하기 위해서 정규화가 필요하다.
예를 들어 고객 테이블에 다음과 같은 컬럼이 있다고 가정하면
고객번호 | 고객명 | 전화번호 | 등급 | 할인율
삽입 이상: 테이블에 새로운 레코드를 삽입할 때, 필요한 컬럼의 값이 없어서 레코드를 삽입하지 못하는 경우를 말한다.
삭제 이상: 데이터의 삭제 시 의도하지 않았던 전혀 다른 데이터가 삭제되는 현상을 말한다.
수정 이상: 하나의 테이블이 불필요한 중복 레코드들을 포함하여 데이터베이스의 일관성이 훼손되는걸 말한다.
이상 현상 외에도 다음과 같은 목적이 있다.
고객번호 | 고객명 | 전화번호 | 등급 | 할인율 |
---|---|---|---|---|
c1 | 홍길동 | 010-1234-5678 | GOLD | 5% |
c2 | 김철수 | 010-4567-1234 | VIP | 10% |
c3 | 이영희 | 010-8794-5651 | NEW | 3% |
c4 | 윤봉길 | 010-5443-5678 | GOLD | 5% |
c5 | 안창호 | 010-3633-5678 | VIP | 10% |
c6 | 김구 | 010-6766-5678 | NEW | 3% |
{등급} -> {할인율}
임의의 릴레이션 스키마 R의 인스턴스에 포함되는 서로 다른 두 레코드 r1, r2와 속성(컬럼)집합 X와 Y에 대해, r1[X]=r2[X]일 때, r1[Y]=r2[Y]이면 함수적 종속성 X -> Y가 성립한다.
{고객번호} → {고객명}
과 {고객명} → {전화번호}
가 성립하면 추론 규칙을 통해 {고객번호} → {전화번호}
도 성립한다는 걸 유추할 수 있다.F+
로 표기한다.카노니컬 커버(canoical cover)
를 구해야 한다.F+
(F의 클로저)에 포함되면 E의 모든 함수적 종속성들이 F로부터 추론될 수 있으며, 이때 F가 E를 커버한다고 표현한다.F+
에 존재하는 모든 함수적 종속성을 커버할 수 있는 최소한의 함수적 종속성들로만 이루어진 집합이다.비정규형
(Unnormalized form, UNF): 아직 정규화 되지 않은 상태를 말한다. 어떤 정규형의 조건도 만족하지 않는다.제1정규형(1NF)
: 각 열(속성)은 원자적인 값만을 가져야 되고 각 행은 유일한 식별자(Primary Key)를 가져야 한다.제2정규형(2NF)
: 제1정규형에서 부분적 함수 종속 제거제3정규형(3NF)
: 제2정규형에서 이행적 함수 종속 제거기본 키 정규형(Elementary key normal form, EKNF)
: 제3정규형을 약간 개선한 것보이스-코드 정규형(BCNF)
: 제3정규형에서 결정자이면서 후보키가 아닌 것 제거제4정규형(4NF)
: 보이스-코드 정규형에서 다중값 종속성 제거ETNF(Essential tuple normal form)
: 모든 조인 종속성에 슈퍼키 구성 요소가 있음제5정규형(5NF 또는 PJNF(projection–join normal form))
: 모든 조인 종속성에는 수퍼키 구성 요소만 있음도메인-키 정규형(Domain-key normal form, DKNF)
: 도메인 제약 조건 및 키 제약 조건 이외의 제약 조건이 없음제6정규형(6NF)
: 사소한 조인 종속성만 충족2NF
이다.점수id | 학생번호 | 과목번호 | 점수 | 교수
점수id | 학생번호 | 과목번호 | 점수
과목번호 | 과목명 | 교수
3NF
가 된다.X → Y
이고 Y → Z
이면 X → Z
이다. 여기서 Z는 X에 이행적으로 함수 종속(transitive dependency)되어있다고 한다.고객번호 | 등급 | 할인율
고객번호 | 등급
등급 | 할인율
BCNF
이다.학번 | 과목 | 강사
{학번, 과목} → 강사
이고 강사 → 과목
이다. 하지만 강사는 후보키가 아니다.학번 | 강사
강사 | 과목
4NF
이다.A | B | C
3개의 컬럼이 있고, 하나의 A값이 B의 여러 값에 영향을 미치면서, B와 C컬럼이 서로 독립적이면, 다중값 종속성이 있다고 할 수 있다.학번 | 과목 | 취미
학번 | 과목
학번 | 취미
5NF
이다.판매자 | 제품 | 고객
판매자 | 제품
판매자 | 고객
고객 | 제품
DKNF
이다.부자 이름 | 부자 등급 | 달러 순자산 |
---|---|---|
Steve | 백만장자 | 124,543,621 |
Roderick | 억만장자 | 6,553,228,893 |
Katrina | 억만장자 | 8,829,462,998 |
Gary | 백만장자 | 495,565,211 |
부자 이름 | 달러 순자산 |
---|---|
Steve | 124,543,621 |
Roderick | 6,553,228,893 |
Katrina | 8,829,462,998 |
Gary | 495,565,211 |
부자 등급 | 최소 | 최대 |
---|---|---|
백만장자 | 1,000,000 | 999,999,999 |
억만장자 | 1,000,000,000 | 999,999,999,999 |