정규화 (Normalization)
- 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최소한의 데이터 유연성을 위해 데이터를 분해하는 과정이다.
- 정규화된 모델은 분해된 테이블 (ex. 직원 테이블과 부서 테이블) 간에 부서코드로 조인(join)을 수행하며 하나의 합집합으로 만들 수 있다.
- 정규화를 하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
정규화 절차
-
제1정규화
릴레이션의 속성 값이 모두 원자값(Atomic Value) 만으로 구성되어야 한다.
-
제2정규화
기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성 을 제거한다.
-
제3정규화
기본키를 제외한 컬럼 간의 종속성을 제거한다. 이행적 함수 종속성 을 제거한다.
-
BCNF
기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다.
-
제4정규화
여러 컬럼들이 하나의 컬럼을 종속시키는 경우, 분해하여 다중값 종속성(다치 종속성) 을 제거한다.
-
제5정규화
조인에 의해서 종속성 이 발생하는 경우 분해한다.
정규화와 반정규화의 성능 이슈
- 정규화는 데이터 조회 시에 조인 연산을 유발하기 때문에 CPU, 메모리를 많이 사용한다.
- 조인으로 인하여 성능이 저하되는 문제를 반정규화로 해결할 수 있다.
- 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생시킨다.
반정규화 (De-Normalization)
- 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발(Development)과 운영(Maintenance)의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법
- 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미한다.
- 반정규화는 조회(select) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.
반정규화를 수행하는 이유
- 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되는 경우
- 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우
반정규화 절차
-
반정규화 대상조사
- 범위 처리 빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
-
성능 향상을 위한 다른 방법 유도 검토
- 조회 작업이 많은 경우 뷰(VIEW) 테이블을 생성한다.
- 대량의 데이터 처리에 클러스터링을 적용하거나 인덱스를 조정한다.
- 응용 애플리케이션에서 로직을 구사하는 방법을 변경한다.
-
반정규화 적용
- 반정규화의 대상으로는 테이블, 속성, 관계가 있다.
테이블과 칼럼의 반정규화는 데이터 무결성에 영향을 미치게 되나 관계의 반정규화는 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 데이터처리의 성능을 향상시킬 수 있는 반정규화의 기법이 된다.
데이터 모델 전체가 관계로 연결되어 있고 관계가 서로 먼 친척간에 조인관계가 빈번하게 되어 성능저하가 예상이 된다면 관계의 반정규화를 통해 성능향상을 도모할 필요가 있다.
참고