핵심은 orders 에 공통 정보를 한 번만 저장하고, order_items 에 상품별 반복 정보를 여러 행으로 저장하는 구조입니다.
그래서 주문 1건은 헤더 1행과 상세 여러 행으로 나뉘어 저장됩니다.
입력 규칙과 참조 규칙이 함께 있어야 관계형 스키마가 무너지지 않습니다.
UNIQUE 는 회원 식별값을 하나로 유지합니다
users.username, users.email 이 중복되면 같은 사람을 여러 계정으로 취급하는 문제가 생기므로 저장 자체를 거절합니다.
CHECK 는 비정상 숫자를 차단합니다
price >= 0, stock >= 0, quantity > 0 규칙으로 음수 가격, 음수 재고, 0개 주문 같은 값을 막습니다.
FK 와 삭제 정책은 고아 데이터를 남기지 않습니다
orders.user_id 는 없는 회원을 참조할 수 없고, order_items.order_id ON DELETE CASCADE 는 주문이 지워질 때 상세도 함께 지워져 기록이 어긋나지 않게 합니다.