쇼핑몰 스키마 설계 포인트

회원과 상품은 기준 데이터, 주문과 주문상세는 거래 기록입니다.

한 주문에는 공통 정보가 한 번만 있고, 상품별 수량과 주문 당시 단가는 상세 행으로 반복됩니다. 이 분리가 실습 전체의 기준입니다.

users

회원 기준

로그인 식별자, 이메일, 등급처럼 회원 자체의 속성을 보관합니다.

user_id PK username UNIQUE email UNIQUE grade

products

상품 기준

상품명, 현재 가격, 재고, 카테고리처럼 판매 대상의 현재 상태를 둡니다.

product_id PK name price CHECK stock CHECK

orders

주문 헤더

한 주문의 회원, 주문일, 상태, 총액처럼 공통으로 한 번만 필요한 값을 둡니다.

order_id PK user_id FK status total_amount

order_items

주문 상세

주문 안의 상품별 수량과 주문 당시 단가를 행 단위로 기록합니다.

item_id PK order_id FK product_id FK quantity CHECK unit_price
orders.user_id → users.user_id 회원 1명 : 주문 N건

주문은 반드시 실제 회원 하나를 가리킵니다.

order_items.order_id → orders.order_id 주문 1건 : 상세 N건

주문 삭제 시 상세를 함께 지우는 CASCADE 정책을 둡니다.

order_items.product_id → products.product_id 상품 1개 : 상세 N건

상품 현재 정보와 주문 당시 단가는 분리해 보존합니다.

PK

각 행을 하나로 식별

조회, 수정, 참조의 기준이 되는 대표 키입니다.

FK

없는 대상 참조 방지

주문은 실제 회원을, 상세는 실제 주문과 상품을 가리킵니다.

CHECK

비정상 숫자 차단

음수 가격, 음수 재고, 0개 주문 같은 값을 저장 전에 막습니다.

UNIQUE

중복 식별자 차단

아이디와 이메일이 같은 회원으로 겹치지 않게 합니다.

주문 헤더

orders에는 주문 1건의 공통 상태만 둬 중복을 줄입니다.

주문 상세

order_items에는 상품별 수량과 당시 단가를 남겨 과거 거래를 보존합니다.

삭제 정책

ON DELETE CASCADE는 주문 삭제 시 상세도 함께 지우는 선택입니다.