정규화
정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 발생해서 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정이다.
이상 현상이란 한 개의 값을 가져야 하는 컬럼이 여러 값을 갖거나, 삽입 또는 삭제 시 문제가 발생하는 현상을 말한다.
정규화 과정은 정규화 원칙을 거쳐서 진행되며 정규형(NF, Normal Form)으로 표현한다. 정규화 원칙에는 제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형, 제4정규형, 제5정규형 등이 있다. 제1 정규형 ~ 보이스/코드 정규형 까지를 다뤄보자.
제1 정규형
제1 정규형 : 릴레이션의 모든 속성은 하나의 도메인을 갖고 있는 형태
- 현재 릴레이션은 도메인 값이 여러 개인 속성이 있다. 제1 정규형에 의해릴레이션의 모든 도메인은 더 이상 분해될 수 없는 원자 값으로 구성되어야 한다.
- 다음과 같이 여러 도메인을 가진 속성을 분리하여 저장했다.
제2 정규형
제 2 정규형 : 제1 정규형을 만족하며, 부분 함수의 종속성을 제거한 형태
부분 함수의 종속성 제거란 기본 키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 형태를 의미한다.
현재의 PK는 {유저 ID, 수강명}이다. 테이블을 살펴보면 성취도는 PK에 완전 함수 종속적이지만, 유저번호는 유저ID에만 종속적이다. 이때 발생할 수 있는 문제점은 유저를 생성하고 싶을 때 불필요한 수강명, 성취도가 필요하다. (삽입 이상), 유저를 삭제할 때 유저를 모두 찾아야한다.(삭제 이상) 등이 있다.
- 다음과 같이 릴레이션을 분리하는 것으로 제2 정규화를 만족할 수 있다.
제3 정규형
제3 정규형 : 제2 정규형을 만족하며, 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족한 형태
이행적 함수 종속이란 A가 B이고, B가 C이면 A는 C이다가 성립하는데, 이때 C가 A에 이행적으로 함수 종속이 되었다고 한다.
- 다음과 같이 릴레이션을 분리하는 것으로 제3 정규화를 만족할 수 있다.
보이스/코드 정규형
보이스/코드 정규형 : 제3 정규화 형태이면서, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여, 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태
결정자란 함수 종속 관계에서 'A이면 B이다' 라면 A는 결정자, B는 종속자가 된다.
- 다음과 같은 예시를 보면 {학번,수강명} 또는 {학번,강사}가 후보키가 된다. 여기서의 문제점은 강사를 통해 수강명이 결정되므로 강사 속성이 결정자이지만, 후보키가 아니므로 강사 속성을 분리해야된다.
- 다음과 같이 분리하면 보이스/코드 정규화를 만족하며 삽입 이상도 해결할 수 있다.
정규화를 거치면서 테이블을 나눈다고 해서 성능이 100% 좋아지는 것은 아니다. 조인 과정에서 오히려 성능이 안좋아 질 수 있으므로 서비스에 따라 정규화 또는 반정규화 작업을 진행한다.
REFERENCES