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 |
---|
댓글