<aside> 📖
학습 목표
| 구분 | 정규화 | 역정규화 |
|---|---|---|
| 목적 | 데이터 무결성, 중복 최소화 | 성능 개선, 조인 최소화 |
| 특징 | 테이블 분리, 관계 명확 | 일부 데이터 중복 허용 |
| 주 용도 | 데이터 정합성 유지 우선 | 조회 성능 최적화, 복잡한 보고서 등 |
| 데이터 일관성 | 자동 보장 (제약조건) | 수동 유지 필요 (트리거, 배치 등) |
| 사례 | 설명 | 효과 |
|---|---|---|
| 1 | 회원 테이블에 최근 주문일자 추가 | 주문 조인 없이 조회 가능 |
| 2 | 게시판 테이블에 댓글 수 컬럼 추가 | 매 조회 시 COUNT() 방지 |
| 3 | 상품 테이블에 브랜드명 중복 저장 | 조인 감소, 가독성 향상 |
| 4 | 판매 통계 테이블에 월/일자별 합계 컬럼 추가 | 집계 성능 향상 |
| 5 | 결제 이력에 회원 나이 그룹(20대/30대 등) 캐시 | 빠른 분석용 집계 가능 |
| 6 | 주문 상세에 카테고리명, 상품명 중복 저장 | 보고서, 검색 속도 개선 |
ALTER TABLE posts ADD COLUMN comment_count INTEGER DEFAULT 0;
-- 댓글 작성 시 UPDATE
UPDATE posts SET comment_count = comment_count + 1 WHERE post_id = 10;
-- 댓글 삭제 시 UPDATE
UPDATE posts SET comment_count = comment_count - 1 WHERE post_id = 10;
이처럼, 조회 속도 향상 / JOIN 감소 목적으로 컬럼을 추가하는 사례가 많습니다.
| 구분 | 장점 | 단점 |
|---|---|---|
| 성능 | JOIN 감소, 조회 속도 향상 | 갱신 복잡성 증가 (INSERT, UPDATE 추가 작업 필요) |
| 유지보수 | 데이터 구조가 단순, 특정 쿼리에서 편리 | 데이터 중복으로 정합성 문제 발생 위험 |
| 활용성 | 통계, 보고서 등 반복 조회 시 성능 유리 | 스키마 변경 시 영향 범위가 넓음 |
| 트레이드오프 | 읽기 성능 ↑, 쓰기 복잡도 ↑ | 읽기 속도 ↔ 유지보수 비용 판단 필요 |