Skip to content

정규화와 반정규화

💾 정규화(Normalization)란?

  • 정규화는 데이터의 일관성을 지키고 중복을 최소화하기 위하여 데이터를 분해하는 과정이다.
  • 데이터베이스 변경시의 이상현상을 제거하고, 구조를 확장하기 쉽도록 하는 것이 목표이다.

정규형

정규형설명
제1정규형속성이 원자성을 가진다. 한 속성이 여러 개의 속성값을 갖거나 같은 유형의 속성이 여러 개 인 경우 해당 속성을 분리한다.
제2정규형복합 후보키가 있을때, 후보키에 속하지 않는 속성을 결정하기 위해서 후보키의 전체를 참조해야한다. 부분 함수 종속성을 제거한다.
제3정규형일반 속성들 간의 함수 종속 관계가 존재하지 않는다. 이행 함수 종속성을 제거한다.
BCNF식별자로 쓰이는 속성이 일반속성에 종속되지 않는다. 후보키가 기본키를 종속시키면 분해한다.
제4정규형여러 칼럼들이 하나의 칼럼을 종속시키지 않는다. 다치종속성을 제거한다.
제5정규형조인에 의한 종속성이 발생되지 않는다.

💾 반정규화(De-Normalization)란?

  • 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다.
  • 반정규화는 조회(select) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.

가. 테이블 반정규화

기법설명
테이블 통합조인으로 연결되어 있는 두 테이블이 자주 묶여서 사용될때 고려한다.
테이블 수평분할레코드별로 사용 빈도의 차이가 클때 사용빈도에 따라 테이블을 분할한다.
테이블 수직분할하나의 테이블에 속성이 너무 많을때 속성을 기준으로 테이블을 분할한다.
중복 테이블 추가다른 업무나 서버에서 같은 데이터를 써야할때 똑같은 테이블을 여러개 만들어서 조인 횟수를 줄인다.
통계테이블 추가SUM, AVG등 자주 쓰이는 값을 미리 계산해서 저장한다.
이력 테이블 추가변경 이력, 발생 이력 정보를 위한 최신 정보 컬럼을 추가한다.
부분 테이블 추가자주 이용되는 칼럼들을 모아놓은 별도의 테이블을 생성한다.

나. 컬럼 반정규화

기법설명
중복 컬럼추가갱신보다 조회 성능이 더 중요할때 중복된 데이터를 추가한다.
파생 컬럼추가자주 계산되는 SUM이나 AVG값들을 미리 칼럼에 보관한다.
이력테이블 컬럼추가대량의 이력 데이터를 처리할때의 성능 저하를 예방하기 위해 기능성 컬럼(최근값 여부, 시작과 종료일자 등)을 추가한다.
PK에 의한 컬럼 추가PK안에 데이터가 존재하더라도 성능향상을 위해 일반속성으로 같이 저장한다.
응용시스템 오작동 대비 컬럼 추가데이터 처리 중 원래 값으로 복구하기를 원할 경우를 대비하여 이전 데이터를 임시적으로 중복으로 보관한다.

다. 관계 반정규화

기법설명
중복관계 추가여러 경로를 거쳐 조인이 가능하지만 추가적인 관계를 더 맺어 빠르게 접근할 수 있게 한다.