쇼핑몰을 개발하기로 했다. 요구사항은 다음과 같다.

상품을 여러 분류로 나누고, 각 분류에는 여러 개의 상품을 목록으로 보여준다. 각 상품은 여러 분류에서 보이도록 할 수 있다.

회원은 상품을 구매할 수 있고, 구매 여부와 상관없이 각 상품에 대해 평가와 평점을 남길 수 있다.

관리자는 분류별, 상품별, 회원별로 구매 목록과 평가, 평점을 볼 수 있다. 여러 명의 관리자가 있다. 관리자는 상품 관리, 발주, 문의 대응 등으로 담당 업무가 나뉜다.

상품과 분류

상품과 분류

  • 상품(Product)과 분류(Category) 엔티티를 추가.

각 분류에는 여러 개의 상품을 목록으로 보여준다

상품과 분류의 관계

  • 분류에 여러 상품을 볼 수 있도록 릴레이션을 추가.

각 상품은 여러 분류에서 보이도록 할 수 있다

상품과 분류의 M:N 관계

  • 하나의 상품을 여러 분류에서도 볼 수 있도록 하려면, 분류 : 상품M : N 관계로 변경한다.

회원은 상품을 구매할 수 있다

회원과 상품

  • 회원(Customer)이 상품(Product)을 구매(Order)하면 기록이 남는다.
  • 한 상품을 여러 회원이 구매할 수도 있고, 한 회원이 한 상품을 여러번 구매할 수도 있다.
    • 한번에 한 종류의 상품만 살 수 있다고 가정한다.
    • 한번의 주문에서 여러 종류의 상품을 구매할 수도 있지만, 지나치게 복잡해지므로 무시한다.

구매 여부와 상관없이 각 상품에 대해 평가와 평점을 남길 수 있다

평가와 평점

  • 상품(Product)에 대해 평가(Review)와 평점(Score)을 따로, 한번씩만 남길 수 있다고 가정한다.
    • 평가와 평점을 한 엔티티에서 관리하면서 평가만 남기거나 평점만 남기거나 둘을 함께 남기는 방식을 사용할 수도 있지만, 구현이 복잡해지니 따로 정의한다.
  • 회원이 서비스에서 할 수 있는 행동이 늘어나면 늘어날수록 복잡해진다.

관리자는 분류별, 상품별, 회원별로 구매 목록과 평가, 평점을 볼 수 있다

이 요구사항은 엔티티의 종류나 관계가 바뀌지 않는다.

여러 명의 관리자가 있다

관리자

  • 관리자(Admin)가 여러 명이 있다.

관리자는 상품 관리, 발주, 문의 대응 등으로 담당 업무가 나뉜다

관리자 담당 업무

  • 상품 담당자는 상품(Product)과 분류(Category)를 관리한다.
    • 재고관리나 수량 한정 행사 같은 것까지 생각하면 너무 복잡해지니 생략.
  • 발주 담당자는 발주내역(Invoice)를 관리한다.
    • 발주할 때마다 발주처를 등록하거나 발주처 하나가 한가지 상품만 취급하거나 한번에 한가지 상품만 발주하지는 않는다. 하지만 너무 복잡하니 생략.
  • 문의 담당자는 고객문의(Inquiry)를 관리한다.
    • 대응이 한번에 끝나지 않고 몇 번에 걸쳐 처리해야 할 수도 있고, 그 사이에 회원 반응이 필요할 수도 있다. 하지만 복잡하니 생략.