- 정규화는 데이터의 일관성을 지키고 중복을 최소화하기 위하여 데이터를 분해하는 과정이다.
- 데이터베이스 변경시의 이상현상을 제거하고, 구조를 확장하기 쉽도록 하는 것이 목표이다.
정규형 | 설명 |
---|---|
제1정규형 | 속성이 원자성을 가진다. 한 속성이 여러 개의 속성값을 갖거나 같은 유형의 속성이 여러 개 인 경우 해당 속성을 분리한다. |
제2정규형 | 복합 후보키가 있을때, 후보키에 속하지 않는 속성을 결정하기 위해서 후보키의 전체를 참조해야한다. 부분 함수 종속성을 제거한다. |
제3정규형 | 일반 속성들 간의 함수 종속 관계가 존재하지 않는다. 이행 함수 종속성을 제거한다. |
BCNF | 식별자로 쓰이는 속성이 일반속성에 종속되지 않는다. 후보키가 기본키를 종속시키면 분해한다. |
제4정규형 | 여러 칼럼들이 하나의 칼럼을 종속시키지 않는다. 다치종속성을 제거한다. |
제5정규형 | 조인에 의한 종속성이 발생되지 않는다. |
- 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다.
- 반정규화는 조회(select) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.
기법 | 설명 |
---|---|
테이블 통합 | 조인으로 연결되어 있는 두 테이블이 자주 묶여서 사용될때 고려한다. |
테이블 수평분할 | 레코드별로 사용 빈도의 차이가 클때 사용빈도에 따라 테이블을 분할한다. |
테이블 수직분할 | 하나의 테이블에 속성이 너무 많을때 속성을 기준으로 테이블을 분할한다. |
중복 테이블 추가 | 다른 업무나 서버에서 같은 데이터를 써야할때 똑같은 테이블을 여러개 만들어서 조인 횟수를 줄인다. |
통계테이블 추가 | SUM, AVG등 자주 쓰이는 값을 미리 계산해서 저장한다. |
이력 테이블 추가 | 변경 이력, 발생 이력 정보를 위한 최신 정보 컬럼을 추가한다. |
부분 테이블 추가 | 자주 이용되는 칼럼들을 모아놓은 별도의 테이블을 생성한다. |
기법 | 설명 |
---|---|
중복 컬럼추가 | 갱신보다 조회 성능이 더 중요할때 중복된 데이터를 추가한다. |
파생 컬럼추가 | 자주 계산되는 SUM이나 AVG값들을 미리 칼럼에 보관한다. |
이력테이블 컬럼추가 | 대량의 이력 데이터를 처리할때의 성능 저하를 예방하기 위해 기능성 컬럼(최근값 여부, 시작과 종료일자 등)을 추가한다. |
PK에 의한 컬럼 추가 | PK안에 데이터가 존재하더라도 성능향상을 위해 일반속성으로 같이 저장한다. |
응용시스템 오작동 대비 컬럼 추가 | 데이터 처리 중 원래 값으로 복구하기를 원할 경우를 대비하여 이전 데이터를 임시적으로 중복으로 보관한다. |
기법 | 설명 |
---|---|
중복관계 추가 | 여러 경로를 거쳐 조인이 가능하지만 추가적인 관계를 더 맺어 빠르게 접근할 수 있게 한다. |