목차
반정규화
데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정이다.
반정규화 과정은 거치면 조회 성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있으며 데이터 정합성 이슈가 발생할 수 있다는 점이다.
정합성(整合性, Data Integrity) 데이터가 일관성 있고, 정확하며 신뢰할 수 있는 상태를 유지하는 것을 말한다. 즉, 데이터베이스에 저장된 데이터들이 논리적으로 모순 없이 서로 잘 들어맞고, 데이터의 상태가 시스템이 기대하는 규칙과 조건들을 잘 만족하고 있다는 뜻이다. 만약 정합성이 무너진다면??? - 고객의 계좌 잔액이 실제보다 더 많거나 적게 표시됨. - 주문 내역은 있는데 사용자 정보가 없음. - 중복 데이터, 누락된 데이터 발생. - 잘못된 통계를 바탕으로 비즈니스 의사 결정이 이루어질 수 있음. |
테이블 반정규화
테이블 병합 | 1:1 관계 테이블 병합 |
1:M 관계 테이블 병합 | |
슈퍼 서브 타입 테이블 병합 | |
테이블 분할 | 테이블 수직 분할(속성 분할) |
테이블 수평 분할(인스턴스 분할, 파티셔닝) | |
테이블 추가 | 중복 테이블 추가 |
통계 테이블 추가 | |
이력 테이블 추가 | |
부분 테이블 추가 |
1:1 관계 테이블 병합 | ||||
회원 | + | 회원상세 | = | 회원 |
회원번호(PK) 아이디 회원이름 집번호 |
회원번호(FK) 생년월일 이메일 주소 기혼여부 |
회원번호(PK) 아이디 회원이름 집번호 생년월일 이메일 주소 기혼여부 |
1:M 관계 테이블 병합 | ||||
주문 | + | 주문상세 | = | 주문 |
주문번호 주문일자 회원번호 결제수단 |
주문번호(FK) 주문상품코드 주문수량 상품가격 |
주문번호 주문상품코드 주문수량 상품가격 주문일자 회원번호 결제수단 |
||
중복된 데이터가 생길 수 있음(주문일자, 회원번호, 결제수단) |
테이블 수직 분할 | |||
회원 | / | 회원 | 회원가족 |
회원번호 아이디 회원명 핸드폰번호 가족명 가족번호 |
회원번호 아이디 회원명 핸드폰번호 |
회원번호(FK) 가족명 가족번호 |
|
자주 사용되는 속성이 아니거나 대부분의 인스턴스가 NULL로 갖고 있을 경우. |
테이블 수평 분할 | |||
주문 | 주문(2024) | 주문(2025) | |
주문번호 주문일자 회원번호 결제가격 배송지 |
/ | 주문번호 주문일자 회원번호 결제가격 배송지 |
주문번호 주문일자 회원번호 결제가격 배송지 |
파티션 기능을 사용해 주문일자에 따라 데이터를 물리적으로 분리. |
테이블 추가 | |||
1.중복 테이블 추가 : 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔터티 추가. | |||
2.통계 테이블 추가 | |||
주문 | -> | 지점별 월매출 | |
주문번호 주문일자 지점코드 회원번호 결제가격 |
지점코드 매출년월 매출액 |
||
3.이력 테이블 추가 | |||
상품 | 상품가격 이력 | ||
상품코드 상품명 상품가격 카테고리코드 |
-> | 상품코드 변경일자 상품가격 변경관리사원번호 (과거 상품가격에 대한 이력 데이터) |
|
4. 부분 테이블 추가 | |||
회원 | -> | 회원 | 회원이메일 |
회원번호 아이디 회원명 핸드폰번호 주소 이메일 |
회원번호 아이디 회원명 핸드폰번호 주소 이메일 |
회원번호(FK) 회원명 이메일 (회원 대상 다량 메일 발송건으로 메일 발송에 필요한 정보만 부분 테이블로 생성) |
컬럼 반정규화
1. 중복 컬럼 추가
업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측며네서 유리한 경우 고려.
2. 파생 컬럼 추가
프로세스 수행 시 부하가 염려되는 계산 값에 대해 미리 컬럼을 추가하여 보관해두는 방식(상품의 재고, 프로모션 할인)
3. 이력 테이블 컬럼 추가
대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회의 기준이 될 것으로 보이는 컬럼을 미리 추가해 놓는 것.
관계 반정규화(중복 관계 추가)
업무 프로세스상 JOIN이 필요한 경우가 많다. 그더라보니 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려한다.
728x90
'SQL > SQLD' 카테고리의 다른 글
#9 SQL (0) | 2025.04.07 |
---|---|
#8 트랜잭션과 NULL (0) | 2025.04.07 |
#6 정규화(Normalization) (2) | 2024.12.06 |
#5 데이터 모델링(식별자) (0) | 2024.07.15 |
#4 데이터 모델링(관계) (0) | 2024.07.09 |