※ 반정규화
1. 반정규화란? - 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정으로 입력, 수정, 삭제 성능이 저하되거나 정합성 이슈가 발생할 수 있다. 정규화가 끝난 후 일정한 규칙에 따라 반정규화 단계를 진행한다.
2. 반정규화 절차
2-1) 테이블 반정규화
㉮ 테이블 병합 - 업무 프로세스 중 JOIN이 필요한 경우가 많아 엔터티를 통합하는 것이 성능 향상에 도움 될 경우 고려함
㉠ 1:1 관계 테이블 병합 - 비교적 판단하기 수월하며 부작용도 적다
㉡ 1:M 관계 테이블 병합 - 데이터가 중복될 수 있고 많이 중복될 경우 테이블 병합이 적절하지 못함
㉢ 슈퍼/서브 타입 테이블 병합 - 테이블을 통합하여 성능 향상
* 예를 들어 주문 엔터티는 의류 주문이나 신발 주문으로 분류되므로 주문 엔터티는 슈퍼 타입이 되고 의류 주문이나 신발 주문은 서브 타입이 된다.
㉯ 테이블 분할
㉠ 테이블 수직 분할(속성 분할) - 엔터티의 속성 중 자주 사용되지 않거나 대부분의 인스턴스가 해당 속성값을 NULL로 갖고 있을 때 해당 속성을 별도의 엔터티로 분할하는 것을 고려한다. (1:1 관계 성립)
㉡ 테이블 수평 분할(인스턴스 분할, 파티셔닝) - 엔터티의 특정 인스턴스를 특정 기준으로 서로 간의 관계가 없는 별도의 엔터티로 분할한다. (파티셔닝)
㉰ 테이블 추가
㉠ 중복 테이블 추가 - 데이터의 중복을 감안하더라도 성능 향상을 위해 필요한 경우 중복된 데이터를 가진 별도의 엔터티를 추가
㉡ 통계 테이블 추가 - 데이터의 통계치를 미리 계산하여 저장한 별도의 엔터티를 추가
㉢ 이력 테이블 추가 - 이력 데이터를 가진 별도의 엔터티를 추가
㉣ 부분 테이블 추가 - 특정 범위의 많은 데이터를 자주 사용하는 경우 이를 저장한 별도의 엔터티를 추가
2-2. 컬럼 반정규화
㉮ 중복 컬럼 추가
㉯ 파생 컬럼 추가
㉰ 이력 테이블 컬럼 추가
2-3. 관계 반정규화(중복관계 추가)
※ 트랜잭션(Transaction)
1. 트랜잭션이란? - 데이터를 조작하기 위한 하나의 논리적인 작업 단위
Ex) 이벤트 응모 시 쿠폰을 발행해주는 이벤트가 있을 경우 '이벤트 응모 이력 저장'과 '쿠폰 발행'을 논리적으로 하나의 단위로 묶는다. 쿠폰이 소진되어 쿠폰 발행이 실패할 경우 이벤트 응모 이력 또한 롤백된다.
※ NULL
1. NULL이란? - 아직 정의되지 않은 값을 의미하며 0을 의미하진 않는다. 테이블 연산 시 가로 연산에 NULL이 포함되어 있으면 결괏값이 NULL이 되고 세로 연산에 NULL이 포함되어 있으면 연산식에서 NULL을 제외시키고 연산한다.
'자격증 > SQLD' 카테고리의 다른 글
[ SQLD 자격증 ] SQL 기본 및 활용 - 2. 함수(Function) (0) | 2023.05.19 |
---|---|
[ SQLD 자격증 ] SQL 기본 및 활용 - 1. SQL 기본 (0) | 2023.05.18 |
[ SQLD 자격증 ] 데이터 모델과 SQL - 1. 정규화(Nomalization) (0) | 2023.05.15 |
[ SQLD 자격증 ] 데이터 모델링의 이해 - 5. 식별자(Identifier) (0) | 2023.05.13 |
[ SQLD 자격증 ] 데이터 모델링의 이해 - 4. 관계(Relationship) (0) | 2023.05.13 |