완성 ERD 읽기

이 전자상거래 ERD는 4가지 관계 패턴이 함께 움직입니다

Crow's Foot 기호를 전부 외우기보다, 어떤 엔터티가 다른 엔터티를 어떻게 연결하고 왜 따로 분리됐는지 보면 구조가 훨씬 빨리 읽힙니다.

계층 자기참조 + 1:N
Category
  • id (PK)
  • name
  • parent_id (self FK)
자기참조
하위 Category
  • 상위 카테고리를 다시 가리킴
  • 트리 구조를 같은 테이블에 저장
1:N
Product
  • cat_id (FK)
  • name, price, stock
한 카테고리 아래에 여러 상품

parent_id 덕분에 상위-하위 분류를 하나의 Category 테이블로 표현하고, Product는 그 분류 아래에 배치됩니다.

활동 두 1:N이 Review에 모임
User
  • id (PK)
  • name, email
1:N
Review
  • user_id, product_id
  • rating, content, created_at
N:1
Product
  • id (PK)
  • 리뷰의 대상 상품
리뷰는 사용자와 상품을 잇는 기록

한 회원은 여러 리뷰를 남길 수 있고, 한 상품도 여러 리뷰를 가질 수 있습니다. Review는 그 활동 자체를 담는 독립 테이블입니다.

구매 N:M을 OrderItem으로 해소
Order
  • id (PK)
  • user_id (FK)
  • order_date, total_amount
1:N
OrderItem
  • order_id, prod_id
  • quantity, unit_price
N:1
Product
  • 여러 주문에 반복 등장
  • 하지만 주문별 수량은 OrderItem에 저장
주문과 상품의 다대다는 중간 테이블로 풀어냄

OrderItem이 없으면 주문별 수량·단가를 보존할 수 없습니다. 그래서 상품 목록이 아니라 주문 당시의 상세 행으로 분리합니다.

완료 주문 소유 + 배송 1:1
User
  • 한 회원이 여러 주문
  • 주문의 소유자
1:N
Order
  • status, total_amount
  • 주문 단위의 상태 기준점
1:1
Shipping
  • order_id (FK)
  • status, tracking_no, carrier
배송은 주문의 후속 상태

주문은 여러 개일 수 있지만, 배송 레코드는 주문 하나에 대응됩니다. 그래서 배송 추적 정보는 Order와 1:1로 분리됩니다.

핵심은 엔터티 수가 아니라 관계의 역할입니다. Category는 계층을 만들고, Review는 활동을 남기고, OrderItem은 다대다를 풀고, Shipping은 주문의 후속 상태를 담당합니다.