[sql] 반정규화를 사용한 실제 사례: e커머스 플랫폼

e커머스 플랫폼은 많은 양의 거래 데이터와 상품 정보를 다루기 때문에 반정규화가 도움이 될 수 있습니다. 반정규화는 데이터베이스의 성능을 향상시키고 데이터 모델을 단순화하는 데 도움이 됩니다. 이를테면, e커머스 플랫폼의 제품 카탈로그 데이터베이스를 살펴보면, 다음과 같은 반정규화 사례를 발견할 수 있습니다.

1. 카테고리와 제품 정보

기본적으로 정규화된 데이터베이스 설계에서는 제품과 카테고리 정보를 따로 저장합니다. 그러나 e커머스 플랫폼에서는 자주 함께 사용되는 제품과 카테고리 정보를 하나로 결합하여 저장함으로써 성능을 향상시킬 수 있습니다.

예시:

CREATE TABLE Products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(255),
    category_id INT,
    ...
);

CREATE TABLE Categories (
    category_id INT PRIMARY KEY,
    category_name VARCHAR(255),
    ...
);

반정규화된 방식:

CREATE TABLE Product_Category (
    product_id INT,
    product_name VARCHAR(255),
    category_id INT,
    category_name VARCHAR(255),
    ...
);

2. 주문 정보와 제품 정보

주문 정보와 제품 정보도 자주 함께 사용되기 때문에 이를 하나의 테이블로 결합하여 저장함으로써 조인 연산을 줄일 수 있습니다.

예시:

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    ...
);

CREATE TABLE Order_Details (
    order_id INT,
    product_id INT,
    quantity INT,
    ...
);

CREATE TABLE Products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(255),
    ...
);

반정규화된 방식:

CREATE TABLE Order_Items (
    order_id INT,
    customer_id INT,
    order_date DATE,
    product_id INT,
    product_name VARCHAR(255),
    quantity INT,
    ...
);

반정규화는 적절하게 사용될 경우 성능 향상을 가져올 수 있지만, 지나치게 사용할 경우 데이터의 무결성이 줄어들고 중복 데이터가 발생할 수 있으므로 신중한 고려가 필요합니다.

참고 자료