[sql] 반정규화의 예시: 계산된 데이터 유지

소개

반정규화는 데이터베이스 설계에서 정규화된 데이터 모델을 중복, 반복 또는 혼합 형태로 변경하는 프로세스입니다. 이 글에서는 계산된 데이터를 유지하는데 반정규화를 사용하는 예시를 살펴보겠습니다.

계산된 데이터 유지를 위한 반정규화

대부분의 데이터베이스 시스템은 계산된 값을 유지하는 데에 적합한 방법을 제공합니다. 하지만 경우에 따라 계산된 값을 유지하는 것이 복잡하거나 성능에 영향을 미칠 수 있습니다. 이런 경우 반정규화를 사용하여 계산된 값을 미리 저장하고 필요할 때 가져오는 방법이 유용할 수 있습니다.

예를 들어, 주문 품목의 가격을 계산하는 경우를 살펴보겠습니다. 각 주문 품목의 가격은 단순히 단가와 수량의 곱으로 계산됩니다. 정규화된 데이터 모델에서는 주문 테이블과 품목 테이블이 별도로 관리되며, 주문 품목이 조회 될 때마다 필요한 시점에 가격을 계산해야 합니다.

SELECT o.order_id, i.item_id, i.item_name, i.unit_price, oi.quantity, i.unit_price * oi.quantity AS total_price
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
JOIN items i ON oi.item_id = i.item_id;

위 쿼리에서는 각 주문 품목의 가격이 필요할 때마다 계산됩니다. 이러한 계산을 반복하지 않고 데이터를 반정규화하여 주문 품목 테이블에 총 가격을 저장함으로써 성능을 향상시킬 수 있습니다.

CREATE TABLE order_items (
  order_id INT,
  item_id INT,
  quantity INT,
  total_price DECIMAL,
  FOREIGN KEY (order_id) REFERENCES orders(order_id),
  FOREIGN KEY (item_id) REFERENCES items(item_id)
);

위와 같이 total_price 컬럼을 추가하여, 총 가격을 미리 계산해 저장함으로써 필요할 때마다 다시 계산하지 않아도 됩니다.

결론

반정규화는 계산된 데이터를 유지하는데 유용한 도구로 활용될 수 있습니다. 이를 통해 데이터 접근 및 처리의 효율성을 향상시킬 수 있습니다.

참조: