정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정
이다.
이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다.
이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다.
각 컬럼이 하나의 속성만을 가져야 한다.
하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야 한다.
각 컬럼이 unique한 이름을 가져야 한다.
컬럼의 순서가 상관 없어야 한다.
제 1정규형을 만족해야 한다.
모든 컬럼이 부분적 종속이 없어야 한다. (완전 함수 종속을 만족해야 한다)
부분적 종속이란 기본키 중에 특정 컬럼에만 종속되는 것을 말한다.
완전 함수 종속이란 기본키의 부분집합이 결정자가 되어서 안된다는 것이다.
예를 들면 기본기(PK)가 A, B 인데 C는 A에만 종속적이고 D는 A,B에 종속적이라면
C는 부분적 종속이기 때문에 분해해주어야 한다.
A,B -> D 와 A -> C 로 말이다.
제 2정규형을 만족해야 한다.
기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.
이행 종속성이란 A -> B, B -> C일 때 A -> C가 성립하면 이행 종속이라고 한다.
한 테이블의 컬럼들이 저렇게 이행 종속이라면, 이를 분해하여 주어야 한다.
A -> B테이블과 B -> C 테이블로 말이다.
제 3정규형을 만족해야 한다.
모든 결정자가 후보키 집합에 속해야 한다.
이 말은 후보키 집합에 없는 컬럼이 결정자가 되어서는 안된다는 뜻이다.
예를 들어 기본키 (A,B)가 있다. 이 기본키(A,B)는 C를 결정한다.
근데 C가 B를 결정한다면 후보키 집합(A,B)이 아닌 C가 다른 컬럼을 결정하기에 BCNF를 만족하지 않는다.
참고로 이 상황은 제3 정규형까지는 만족한다.
BNCF를 만족해야 한다.
다치 종속이 없어야 한다.
다치 종속이란 A->B일 때 하나의 A값에 여러 개의 B값이 존재하면 다치 종속성을 가진다고 한다.
제 4정규형을 만족해야 한다.
조인 종속이 없어야 한다.
조인 연산을 했을 때 손실이 없어야 한다.
조인 종속은 다치 종속의 좀 더 일반화된 형태이다.
만약 하나의 릴레이션을 여러 개의 릴레이션으로 무손실 분해 했다가 다시 결합할 수 있다면 조인 종속이라고 한다.
요약 : 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 제 1정규형부터 제5 정규형까지 있다.
순서를 외운다면
도메인이 원자값
부분 종속성 제거
이행 종속성 제거
결정자가 후보키
다치 종속 제거
조인 종속 제거
이렇게 앞글자를 외우면 머릿속에 잘 남는 것 같다.