온라인 쇼핑몰 ERD

쇼핑몰 ERD는 주문상세가 주문과 상품 사이의 축이다

회원은 주문을 만들고, 주문은 상품을 직접 품지 않는다. 수량과 주문 당시 단가는 order_item에 남겨 주문과 상품의 M:N 관계를 안전하게 푼다.

기준 개체: 회원, 주문, 상품, 카테고리
교차 테이블: M:N 관계와 이력 속성 보존
선택 관계: 주문 뒤에 생길 수 있는 배송
users 회원 1명이 여러 주문과 리뷰를 만든다.
1:N
orders 주문은 회원에 속하지만 상품을 직접 품지 않는다.
1:N
order_item 주문과 상품의 M:N을 풀고 수량, 당시 단가를 보존한다.
N:1
product 상품은 카테고리에 속하고 여러 주문상세에서 참조된다.
category parent_id로 상위·하위 계층을 표현한다.
shipping 주문 뒤에 선택적으로 생기는 1:0..1 관계다.
review 구매 검증 정책에 따라 users와 product 또는 order_item을 잇는다.
교차 테이블 상품은 주문에 직접 넣지 않고 order_item으로 분리한다.
이력 속성 unit_price는 현재 상품 가격이 아니라 주문 당시 가격이다.
선택 관계 배송은 주문 생성 뒤 생길 수 있어 0..1로 읽는다.
검증 지점 리뷰가 구매한 상품만 허용되는지 업무 규칙을 추가한다.
users 1:N orders 1:N order_item N:1 product
shipping orders 기준 1:0..1 review rule 구매 검증 규칙
회원-주문 1:N orders.user_id FK로 회원 주문을 묶는다.
주문-주문상세 1:N 주문 행은 상품 목록을 직접 품지 않는다.
주문상세-상품 N:1 수량과 주문 당시 단가가 교차 테이블에 남는다.
주문-배송 1:0..1 order_id UNIQUE로 한 주문 한 배송을 만든다.
review 검증 규칙 구매자만 리뷰 가능하면 order_item 경유를 검토한다.

구매 흐름의 핵심 축

주문과 상품 사이에 교차 테이블을 두어 수량·단가를 잃지 않는다.

users 회원 1
PK id
속성 name, email, phone
주소 address
1:N
orders 주문 N
PK id
FK user_id
상태 status, total_amount
1:N
order_item 주문상세
PK id
FK order_id, product_id
이력 quantity, unit_price
규칙 UNIQUE(order_id, product_id)
N:1
product 상품 1
PK id
FK category_id
속성 name, price, stock
N:1
category 계층
PK id
FK parent_id
트리 상위-하위 자기참조
배송은 주문의 선택 1:1 관계 1:0..1
orders 주문은 먼저 생성될 수 있다.
1:0..1
shipping order_id UNIQUE로 한 주문 한 배송만 허용한다.
리뷰는 회원과 상품을 함께 본다 업무 규칙
users 리뷰 작성자
1:N
review rating, content, created_at
N:1
product 리뷰 대상 상품
교차 테이블 상품을 주문에 직접 넣지 않는다

한 주문에 여러 상품, 한 상품이 여러 주문에 들어가므로 order_item이 필요하다.

이력 속성 단가는 주문 당시 값을 저장한다

상품 가격이 바뀌어도 과거 주문의 unit_price는 유지되어야 한다.

선택 참여 배송은 나중에 생길 수 있다

주문 직후 배송 행이 없을 수 있으므로 1:0..1로 읽는다.

자기참조 카테고리는 같은 테이블을 참조한다

parent_id로 대분류, 중분류, 소분류 계층을 만든다.