본문 바로가기
👨‍💻개발/sql

정규화와 반정규화

by 하루하루 나아가기 2023. 4. 16.
반응형

1. 정규화(Normaliztion)

데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정이다. 

 

1) 제1정규형 - 모든 속성은 반드시 하나의 값만 가져야 한다. 

2) 제2정규형 - 엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다. 

3) 제3정규형 - 주식별자가 아닌 모든 속성 간에는 서로 종속이 될 수 없다. 

 

생각! 

정규화를 공부하던 중 제2정규형과 제3정규형이 헤깔렸다. 조금 차이점이 있었다. 

제2정규형을 만족하는 경우는 일반속성이 주식별자에 종속이 되어야 한다.

근데! 주식별자에 모두 종속이 되더라도 일반속성들끼리 서로 종속관계가 될 수도 있다. 

그래서 제3정규형이 필요한 것이다!

 

정규화를 할 경우 데이터 조회성능은 처리조건에 따라 향상되는 경우도 있고 저하되는 경우도 있자만 입력, 수정, 삭제 성능은 일반적으로 향상된다고 볼 수 있다. 

 

2. 반정규화(De-Normalization) 

반정규화 과정은 정규화가 끝난 후에 거치는 과정이다. 데이터의 조회 성능을 항샹시키기 위해서 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정이다. 

 

1) 테이블 반정규화

(1) 테이블 병합 - 업무 프로세스상  JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려한다.

 

(2) 테이블 분할

★테이블 수직 분할 : 엔터티의 일부 속성을 별도의 엔터티로 분할(1:1 관계 성립)

★테이블 수평 분할 : 엔터티의 인스턴스를 특정 기준으로 별도의 엔터티로 분할(파티셔닝)

 

(3) 테이블 추가

★중복 테이블 추가 : 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔터티를 추가

★통계테이블 추가

★이력테이블 추가

★부분 테이블 추가 

 

2) 컬럼 반정규화

(1) 중복 컬럼 추가 - 업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려

(2) 파생 컬럼 추가 - 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식으로 상품의 재고나 프로모션 적용 할인가 등이 이에 해당할 수 있다. 

(3) 이력 테이블 컬럼 추가 - 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될  것으로 판단되는 컬럼을 미리 추가해 놓는 방식이다. 최신 데이터 여부 등이 이에 해당할 수 있다.

 

3) 관계 반정규화(중복관계 추가)

업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려 

반응형

'👨‍💻개발 > sql' 카테고리의 다른 글

[SQL] DML 기초가 핵심  (0) 2023.04.11

댓글