주문ID
→
고객ID · 주문일
O100의 고객과 주문일은 상품이 몇 개든 같은 값으로 반복된다.
주문 원장의 후보키가 {주문ID, 상품ID}라면, 주문ID만으로 정해지는 속성과 상품ID만으로 정해지는 속성은 주문항목에 남기면 안 된다. 둘이 함께 정하는 수량과 주문단가만 주문항목에 남긴다.
고객ID, 주문일
상품명, 현재정가
수량, 주문단가
| 주문ID만 결정 | orders | 고객ID, 주문일은 주문 테이블로 이동한다. |
|---|---|---|
| 상품ID만 결정 | products | 상품명, 현재정가는 상품 테이블에서 한 번만 관리한다. |
| 두 키가 함께 결정 | order_items | 수량, 주문단가는 주문과 상품의 조합 사실로 남긴다. |
한 행에 주문 사실, 상품 사실, 주문항목 사실이 섞여 있다.
O100의 고객과 주문일은 상품이 몇 개든 같은 값으로 반복된다.
P10의 상품 정보는 어떤 주문에 들어가도 같은 상품의 사실이다.
수량과 주문 당시 단가는 주문과 상품 조합이 있어야 결정된다.
복합키 일부에만 기대는 속성을 따로 빼서 반복과 갱신 위험을 줄인다.
O100의 주문일 수정은 orders 한 행에서 끝난다.
상품명과 현재정가는 products가 관리하므로 항목마다 반복 수정하지 않는다.
주문단가는 현재정가가 아니라 주문 당시 가격 스냅샷으로 남긴다.