정규화란?
- 데이터의 일관성, 최소한의 데이터 중복, 최소한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정
- 정규화된 모델은 테이블이 분해된다.
- 정규화를 하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
정규화 절차
제 1정규화 :
- 속성(Attribute)의 원자성을 확보한다
- 중복값을 제거한다.
- 기본키를 설정한다.
제 2정규화 :
- 기본키가 2개 이상의 속성으로 이루어진 경우, 부분함수 종속성을 제거한다.
- 부분함수 종속성이란, 기본키가 2개 이상인 칼럼으로 이루어진 경우에 발생한다. 기본키가 1개이면 이 과정을 스킵한다.
- 복합 인스턴스에 대해 각 인스턴스의 종속적 중복을 삭제한다.
제 3정규화 :
- 기본키를 제외한 칼럼 간에 종속성을 제거한다.
- 즉 이행 함수 종속성을 제거한다.
- 일반 속성의 종속성을 제거한다
BCNF :
- 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이어야 한다.
- 기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해한다.
- BCNF는 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며 서로 중첩되어야 한다
제 4정규화 :
- 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다치종속을 제거한다
- 다치 종속성을 제거한다
제 5정규화:
- 조인에 의해서 종속성이 발생되는 경우 분해한다.
반정규화
- 데이터베이스의 성능 향상을 위하여 데이터 중복을 혀용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다.
- 반정규화는 조회 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다
반정규화 수행 이유
- 정규화에 충실하여 종속성, 활용성은 향상 되었지만 수행속도가 느려진 경우
- 다량의 번위를 자주 처리해야하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
반정규화 절차
대상 조사 및 검토
- 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사
다른 방법 검토
- 반정규화를 수행하기 전에 다른 방법이 있는지 검토
- 예를 들어 클러스터링, 뷰, 인덱스, 튜닝, 응용 프로그램, 파티션을 검토한다
반정규화 수행
[Clustering?]
- 클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때, 물리적으로 정렬해서 저장하는 방법이다.
- 따라서 조회 인접 블록을 연속적으로 읽기 때문에 성능이 향상된다.
반정규화 기법
계산된 칼럼 추가
- 배치 프로그램으로 계산이 필요한 칼럼을 미리 계산하고 그 결과를 특정 칼럼에 추가한다.
테이블 수직 분할
- 하나의 테이블의 두 개 이상의 테이블로 분할한다 즉, 칼럼을 분할하여 새로운 테이블을 마드는 것이다.
테이블 수평 분할
- 하나의 테이블에 있는 값을 기준으로 테이블을 분할하는 방법
슈퍼타입 및 서브타입 변환 방법
OneToOneType
- 슈퍼타입과 서브타입을 개별 테이블로 도출
- 테이블 수가 많아서 조인이 많이 발생하고 관리하기 어려움
Plus Type
- 슈퍼타입과 서브타입 테이블로 도출
- 조인이 발생하고 관리가 어렵다.
Single Type
- 슈퍼타입과 서브타입을 하나의 테이블로 도출한다
- Join 성능이 좋고 관리가 편하다, 입출력 성능이 나쁘다