더북(TheBook)

BETTER WAY 5 왜 계산 데이터를 저장하면 좋지 않은지 이해하자

가끔씩 자동 계산되는 데이터를 저장하고 싶은 유혹에 빠질 것이다. 특히 이 데이터가 관련 테이블에 있는 데이터를 기준으로 할 때는 더욱 그럴 것이다. 코드 1-5를 살펴보자.

코드 1-5 예제 테이블 생성 SQL

CREATE TABLE Orders (

  OrderNumber int NOT NULL,

  OrderDate date NULL,

  ShipDate date NULL,

  CustomerID int NULL,

  EmployeeID int NULL,

  OrderTotal decimal(15,2) NULL

);


 

얼핏 보면 Orders 테이블에 OrderTotal 컬럼(모르긴 해도 Order_Details 테이블의 수량 * 가격의 합일 것이다)을 두는 것이 좋은 생각인 것 같다. 모든 주문과 주문 금액을 원할 때마다 관련 로우를 가져와서 계산할 필요가 없기 때문이다. 하지만 이런 계산 필드는 데이터 웨어하우스 시스템에서는 좋을지 몰라도 운영 중인 데이터베이스 성능에는 심각한 영향을 미칠 수 있다(‘BETTER WAY 9. 데이터 웨어하우스에는 역정규화를 사용하자’를 참고한다). 또 Order_Details 테이블의 로우가 변경·삽입·삭제될 때마다 값을 재계산해야 하므로 데이터 무결성을 유지하기가 어렵다는 사실을 알게 될 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.