![](https://blog.kakaocdn.net/dn/buBTs7/btsL3iMSlrz/WxOKe9O02uXTyeIjIqWLd0/img.png)
정규화(Normalization)
데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정.
(1) 제1정규형
: 모든 속성은 반드시 하나의 값만 가져야 한다.
원자값이 아닌 도메인을 분해한다.
(2) 제2정규형
: 엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다. 주식별자가 단일식별자가 아닌 복합식별자인 경우 일반속성이 주식별자의 일부에만 종속될 수 있는데 이런 경우 데이터 이상 현상 발생할 수 있다. (입력 이상 현상, 수정 이상 현상)
부분 함수 종속성을 제거한다.
(3) 제3정규형
: 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.
이행 함수 종속성을 제거한다.
이행 함수 종속성이란 컬럼 A가 컬럼 B를 결정하고, 컬럼 B가 컬럼 C를 결정할 때 발생한다. 이를 제거하기 위해 컬럼 A가 직접적으로 컬럼 C를 결정하도록 관계를 분리해야 한다.
(4) 제4정규형
: 다중값 종속성을 제거한다.
다중값 종속성이란 하나의 컬럼 값에 대해 다른 여러 값이 독립적으로 종속되는 경우를 의미한다.
테이블 반정규화
테이블 병합 | 1:1 관계 테이블 병합 | |
1:M 관계 테이블 병합 | 중복된 데이터가 생길 수 있음 | |
슈퍼 서브 타입 테이블 병합 | 슈퍼타입 : 여러 관련 엔터티가 공통적으로 가지는 속성이나 개념을 포함하는 상위 개념. (예 : Employee) 서브타입 : 슈퍼타입에서 파생된 특정한 세부 엔터티로, 슈퍼타입의 속성에 추가적인 속성을 가질 수 있음. (예 : Manager, Engineer) | |
테이블 분할 | 테이블 수직 분할 (속성 분할) | 자주 사용하는 속성이 아니거나 대부분의 인스턴스가 해당 속성값을 NULL로 갖고 있을 때 고려 |
테이블 수평 분할 (인스턴스 분할, 파티셔닝) | 파티션 기능을 사용하여 주문일자에 따라 데이터를 물리적으로 분리 | |
테이블 추가 | 중복 테이블 추가 | 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 변도의 엔터티를 추가 |
통계 테이블 추가 | ||
이력 테이블 추가 | ||
부분 테이블 추가 |
※ 단순히 같은 데이터를 여러 테이블에 저장하는 것은 데이터 정합성에 위배되는 상황을 발생시길 수 있다.
성능 데이터 모델링의 순서
(1) 데이터 모델에 맞게 정규화를 수행한다.
(2) 데이터베이스의 용량 및 트랜잭션 유형을 파악하여 성능 저하를 일으키는 부분이 없는지 검토한다.
(3) 용량과 트랜잭션 유형에 맞게 반정규화를 수행한다.
(4) 성능 향상을 위한 이력모델의 조정, PK/FK 조정(인덱스 반영), 슈퍼/서브타입 조정 등을 수행한다.
(5) 데이터 모델의 성능을 검증한다.
※ 한 테이블에 속성의 개수가 과도하게 많을 경우 조회 성능을 향상시키기 위해 자주 쓰이는 속성과 그렇지 않은 속성을 나누어 수식 분할할 수 있다. 수직 분할은 반정규화 기법 중 하나이며 분할된 테이블은 1:1 관계를 이루게 된다.
파생 컬럼(Derived Column)
기존 데이터 컬럼을 기반으로 계산, 변환 또는 조작하여 생성된 새로운 컬럼을 의미한다. 이는 원본 데이터에 없는 정보를 추가적으로 제공하거나 데이터를 가공하여 분석 또는 활용도를 높이는 데 사용된다.
중복 관계 추가
중복 관계 추가는 관계의 반정규화 기법 중 하나로 데이터 무결성을 깨뜨릴 위험성 없이 데이터 처리 성능을 향상시킬 수 있는 기법이다.
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] 유선배 SQL 개발자 1.1 오답노트 및 개념정리 (1) | 2025.01.19 |
---|