합계, 개수, 평균처럼 다른 테이블이나 컬럼에서 계산된 값을 저장해 두는 패턴입니다. 대신 갱신 시점을 놓치면 원본과 저장값의 일관성이 깨집니다.
출발점
order_items 추가, 댓글 삭제, 리뷰 등록처럼 계산의 재료가 달라집니다.
상태 변화
증감이면 바로 반영하고, 평균·합계면 다시 계산해 저장합니다.
COUNT ±1 / SUM 재계산 / AVG 재계산읽기 결과
주문 합계 표시, 게시글 목록 정렬, 사용자 등급 판단이 즉시 가능합니다.
주문 합계
주문서가 열릴 때마다 다시 합산하지 않도록 저장
orders.total_amount = SUM(price * qty)order_items 변경 시 전체 금액을 다시 계산해 주문 행에 반영
결제 직전 화면, 주문 이력 조회에서 바로 사용
게시글 댓글 수
목록 화면에 필요한 개수를 미리 보관
posts.comment_count = COUNT(comments)댓글 INSERT/DELETE 때 +1 / -1 로 즉시 반영
게시글 목록 정렬과 요약 표시가 빨라짐
사용자 주문 횟수
사용자 단위 누적 행동을 저장
users.order_count = COUNT(orders)주문 생성 시 횟수를 증가시켜 최신 상태 유지
회원 등급, 혜택 조건 판단에 바로 사용
상품 평균 별점
리뷰 요약 값을 상품 행에 저장
products.avg_rating = AVG(reviews.rating)리뷰 등록/삭제 시 평균을 다시 계산
상품 목록과 검색 결과에서 즉시 노출 가능
나이
생년월일에서 계산되지만 시간이 지나면 의미가 바뀜
EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM birth_date)데이터 변경 없이도 해마다 값이 달라져 저장값이 쉽게 오래됨
이런 값은 저장형보다 Virtual Column 이 더 자연스러움