
회원, 주문, 상품의 관계
→ 회원은 여러 상품을 주문할 수 있다. 그리고 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계이다. 하지만 이런 다대다 관계는 관계형 데이터베이스는 물론이고 엔티티에서도 거의 사용하지 않는다. 따라서 그림처럼 주문 상품이라는 엔티티를 추가해 다대다 관계를, 일대다, 다대일 관계로 풀어냈다.
상품 분류
→ 상품은 도서, 음반, 영화로 구분되는데 상품이라는 공통 속성을 사용하므로 상속 구조로 표현했다.

회원(Member) : 이름과 임베디드 타입인 주소(Address), 그리고 주문(orders)리스트를 가진다.
주문(Order) : 한번 주문 시 여러 상품을 주문할 수 있으므로 주문과 주문상품(OrderItem)은 일대다 관계다. 주문은 상품을 주문한 회원과 배송 정보, 주문 날짜, 주문 상태(status)를 가지고 있다. 주문 상태는 열거형(enum)을 사용하는데 주문(ORDER), 취소(CENCEL)을 표현할 수 있다.
주문상품(OrderItem) : 주문한 상품 정보와 주문 금액(orderPrice), 주문 수량(count) 정보를 가지고 있다. (보통 OrderLine, LineItem으로 많이 표현한다)
상품(Item) : 이름, 가격, 재고(stockQuantity)를 가지고 있다. 상품을 주문하면 재고가 차감된다. 상품의 종류로는 도서, 음반, 영화가 있는데 각각 사용하는 속성이 조금씩 다르다.
배송(Delivery) : 주문 시 하나의 배송 정보를 생성한다. 주문과 배송은 일대 일 관계다.
주소(Address) : 값 타입(임베디드 타입)이다. 회원과 배송(Delivery)에서 사용한다.
<aside> ⚠️ 위 다이어그램 예제에서는 Order와 Delivery가 단방향으로 잘못 그려져있음. 양방향이 맞음.
</aside>
<aside> ⚠️ 회원이 주문을 하기 때문에 Member가 Order를 참조하는 것이 정상적인 것처럼 보이지만 실제 실무에서는 주문이 회원을 참조한다. 본 강의 특성 상 설명을 위해 의도적으로 추가한 부분.
</aside>

MEMBER: 회원 엔티티의 Address 임베디드 타입 정보가 회원 테이블에 그대로 들어갔다. 이는 DELIVERY 테이블에도 마찬가지다.
ITEM: 앨범, 도서, 영화 타입을 통합해서 하나의 테이블로 만들었다. DTYPE 컬럼으로 카테고리를 구분한다.