1. Database Schema
1. 회원 (users)
- 회원정보로 name, loginId, password, email, 배송지정보가 있다.
- 배송지정보(city 도시, street 도로명주소, zipcode 우편번호)는 Address 임베디드 타입 정보로 들어갔다.
2. 상품 (item)
- 상품정보로 categoryType(상품 카테고리), itemName(상품명), itemType(상품 상태등급), price(상품가격), stockQuantity(재고량)이 있다.
- 상품 카테고리는 ItemCategory 클래스를 사용한다.
- ItemCategory의 필드 code는 'BOOK' 'MUSIC'과 같은 시스템에서 전달하는 값이다.
- ItemCategory의 필드 categoryName은 '책' '음반'과 같은 고객에게 보여주는 값이다.
- @ModelAttribute를 활용해 상품등록폼 작성 시, 상품카테고리를 선택할 수 있게 한다.
- (또한, ItemType의 필드 code도 '상품 상태등급'을 전달하는 값이다.)
- 상품 이미지가 있다.
- imgName(저장된 이미지 파일명), savePath(파일경로), originImgName(이미지 이름), reImgYn(대표 이미지)
- 상품을 주문하면 재고수량이 줄어든다.
3. 장바구니 (cart)
- 회원별 주문한 상품들(orderItem)을 담는다.
- 주문정보로 상품정보(item), 각각의 주문수량(count), 상품주문액(orderPrice)이 있다.
2. 연관관계 매핑 분석
회원과 장바구니(users - cart)
- 일대다 , 다대일의 양방향 관계다. ( 연관관계를 표시하기 위해 양방향 매핑을 했다.)
- 장바구니에서 회원을 참조하는 로직만 만들었다.
- cart.users 를 cart.users_id 외래 키와 매핑한다.
장바구니와 주문상품(cart - orderItem)
- 일대다 양방향 관계다.
- 외래 키가 주문상품에 있으므로 주문상품이 연관관계의 주인이다.
- orderItem.cart 를 order_item.cart_id 외래 키와 매핑한다.
주문상품과 상품(orderItem - item)
- 다대일 단방향 관계다.
- orderItem.item 을 order_item.item_id 외래 키와 매핑한다.
회원과 상품(users - item)
- 회원은 상품을 등록할 수 있다.
- 일대다 양방향 관계다.
- item.users를 item.users_id 외래 키와 매핑한다.
상품과 상품이미지(item- itemImg)
- 상품정보에 여러 개의 이미지가 포함된다.
- 일대다 단방향 매핑이다. (연관관계 주인은 itemImg이다.)
- item_id가 외래키가 되어 Item과 연관관계 매핑이 된다.
느낀점
- Item 정보 중, ItemType(상품등급), ItemCategory(상품카테고리) 설계하는 더 나은 방법을 찾았으면 한다.
- 두 엔티티를 @Entity, @Data로 구현하여 애매한 느낌이 든다. (좀 더 공부가 필요한 부분으로 느꼈다.)
'프로젝트 > 개인 프로젝트 V1' 카테고리의 다른 글
(6) 페이징 처리 (0) | 2022.08.02 |
---|---|
(5) domain, repository, service 계층별 설계 및 구현 (0) | 2022.08.01 |
(3) 상품 등록 계층 설계 (0) | 2022.08.01 |
(4) 상품 등록 구현 - 이미지 업로드 (0) | 2022.08.01 |
(1) 계획 (0) | 2022.08.01 |
댓글