카카오프렌즈 모델링(1주차)

hyo_·2021년 6월 13일
0

프로젝트

목록 보기
1/3
post-thumbnail

1차 프로젝트로 맡은 클론 프로젝트는 카카오 프렌즈!

wecode 생활 5주차!

주저리주저리 👀

여러 프로젝트를 해봤지만, 매번 Firebase(NoSQL)를 사용한 안드로이드 프로젝트를 하여서 수업시간 외 프로젝트에서 제대로 된 관계형 데이터베이스 모델링은 이번이 처음이었다. 거기다 멘토님들께서 백엔드는 거의 일주일은 보통 모델링 하느라 바쁘다고 하셔서 처음에 좀 겁을 먹었었다ㅠㅠ 그래도 생각보다 빠르게 끝낸 거 같아 다행이다!! 물론 또 뒤집을 수도 있겠지만..ㅎ

기능

  • 로그인
  • 회원가입
  • 인기상품리스트
  • 신상품리스트
  • 장바구니
  • 결제
  • 리뷰
  • 상품찜

이번 프로젝트에서는 위에 말한 8개 기능을 하기로 결정하고 모델링을 시작하였다.

처음에는 크게 User, Product, Cart, Order, Review, Like 중심으로 모델링을 하면 되지 않을까 생각하고 시작하였다. 그래서 나온 모델링이

User - Cart : 1 to 1
Cart - CartList : 1 to M
Product - CartList : 1 to M

User - Order : 1 to M
Order - OrderList : 1 to M
Product - OrderList : 1 to M
Order - RecipientInfo : 1 to 1

User - Like : 1 to M
Product - Like : 1 to M

Category - Product : 1 to M
Product - Character : M to M

Product - ImageUrl : 1 to M

User - Review : 1 to M
Product - Review : 1 to M

여기서 제일 고민됐던 부분이 장바구니 모델을 주문과 같이 넣고, status를 주어 관리 할 것이냐 아니면 따로 분리하냐였다.

고민사항

Cart & Order

  1. Cart와 Order, CartList와 OrderList가 겹치는 부분이 많다
  2. Order에는 RecipientInfo가 필요하지만, 장바구니에는 필요없다.
    ➡️ 겹치는 부분이 많으니 합치고 Order에만 필요한 값에 null을 넣는 것이 좋은것인가?
    ➡️ 겹치는 부분이 많더라도 null값을 넣지 않기 위해 분리 할 것인가?

User & Product

  1. User와 Product 둘 다 필요한 모델들(Review, Like)이 많은데, 가운데 있으면 다 중간테이블인것인가?..
  2. User와 Product를 Many-to-Many로 잇고 through를 사용하여 테이블(Review, Like)을 이어주어야 하는 것인가?
  3. User와 Product를 Many-to-Many로 이어주더라도, 중간테이블에서 User와 Product를 ForeignKey로 묶어주어야 하나?

멘토님께 이러한 고민을 여쭈어 보고 얻은 답은

Cart & Order

Cart와 Order는 요즘 하나의 테이블로 합쳐 status로 상태 관리를 하는 것이 트렌드라고 하셨고, 장바구니 상태일 시 RecipientInfo 컬럼 값에는 null을 넣으면 된다고 하셨다. (우리와 조금 다른 경우이긴 했지만 다른 팀 말을 들어보니 다른 멘토님께서는 null을 넣으면 자원 낭비가 심하다고 하셨다고 하여, 좀 더 공부해봐야 할 듯 하다.)

User & Product

Review, Like 같이 두 테이블(User, Product) 사이에 있다고 하여 무조건 중간테이블이 되는 것은 아니라고 한다.
Review의 경우 Product와 User 테이블을 사용하는 경우는 많지만, 직접적으로 Product에서 User, User에서 Product로 참조하는 경우는 없을 듯 하여 ManyToManyField를 사용하진 않고, ForeignKey로만 연결시켜 주었다.
Like는 Review와 다르게 Like자체에 다른 필드를 가지지 않고, User가 상품을 좋아요 할 시 연결만 시켜주면 되기에 ManyToManyField를 사용하였다.

멘토님께서 나중에 Like 테이블에 다른 컬럼들이 추가 되거나, Like에서 User, Product를 참조해야하는 경우가 생길 수 있으니, Like에서 ForeignKey로도 각각(USer, Product)연결 시켜주는 것이 좋다고 하셔서 연결시켜 주었다.

그래서 나온 최종본!!


AQueryTool(pw:bup04w)

2021.06.18일

다행히 프로젝트 기간동안 몇몇 컬럼을 추가해야 하는 경우 말곤, 전체적으로 수정해야하는 상황은 없었다!! 😄

profile
🎓의지적인 삶을 살자!😊

0개의 댓글