채채
[면접을 위한 CS 전공지식 노트] 정규화 과정 본문
4.2.3 정규화 과정
삽입/삭제/갱신 이상을 제거하기 위해 릴레이션을 여러 개로 분리하는 과정
제 1정규형

릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자값으로 구성되어야한다.
위의 사진에서 수정되기 전에는 수강명과 성취도에 {C++코딩테스트, 프런트 특강}과 같이 집합이 적재되어있다.
이를 각각 다른 행으로 나누어 수정하면 제 1정규형을 만족하게 된다.
제 2정규형

릴레이션이 제 1정규형이며 부분 함수의 종속성을 제거한 형태이다.
즉 모든 속성이 기본키에 완전 함수 종속적인 것을 의미한다.
예시 사진에서 유저번호를 통해 유저ID를 알 수 있고, 유저ID와 수강명을 통해 성취도를 알 수 있다. 이러한 부분 함수 종속을 완전 함수 종속을 만족하도록 각각의 릴레이션을 분해한다.
제 3정규형

제2정규형이고 이행적 함수 종속을 제거한 상태이다.
이행적 함수 종속이란 속성 X를 알 때 Y를 알 수 있고, Y를 알 때 Z를 알 수 있으면. X를 통해 Z를 알 수 있다는 것이 성립한다. 이때 속성 Z가 X에 이행적으로 함수 종속이 되었다고 한다. (X->Y, Y->Z 일 때, X->Z성립)
유저ID를 알 때 등급을 알 수 있고, 등급을 알 때 할인율을 알 수 있다. 이때 유저ID를 알면 할인율을 알 수 있는데.
이러한 이행적 함수 종석을 제거하기 위해 각각의 릴레이션으로 분할한다.
보이스/코드 정규형(BCNF)

제3정규형이고 결정자가 후보키가 아닌 함수 종속 관계를 제거한다.