Project1 - 첫번째 프로젝트 모델링

Heechul Yoon·2020년 2월 24일
0

LOG

목록 보기
16/62

이번주 부터 첫번째 프로젝트를 시작한다. foodly-store라는 웹페이지를 클론하는 프로젝이트이며 실재서비스와 동일한 앤드포인트를 구현한다.

우선 각 데이터의 성격별 테이블을 생성하며 테이블 생성을 하면서 중요하다고 생각했던 관계 모델링위주로 다루어보자.

self_relation

쇼핑사이트에 들어가면 위와같이 해당 상품을 클릭하면 비슷한 상품을 나열해주는 경우가 많다. 이 경우 어떻게 관계설정을 해줘야 할까?

이 경우의 참조관계를 살펴보면 하나의 상품은 여러개의 유사상품을 가질 수 있다. 즉, 모든 상품이 여러개의 유사상품을 가질 수 있는 self_relation관계에 있다고 할 수 있다. 이 경우 products 테이블을 만들어주고 product의 id를 정참조하는 simmilars테이블을 만들어준다. 그리고 이 두 테이블을 ManyToMany 관계를 맺어주면 된다. 즉, products테이블을 두개를만들어준다고 생각 할 수도있다. 그리고 중간테이블을 두어 simmilar한 관계를 관리해주는 것이다.

data filtering


위의 사진은 키워드를 추가하면 해당키워드에 맞는 레시피를 가져오는 페이지이다. 이 경우 관계를 생각해보면 키워드 하나는 여러개의 래시피와 연관될 수 있다. 그리고 하나의 레시피또한 여러개의 키워드를 포함할 수 있다. 즉, ManyToMany관계에 놓여있으며 해당키워드를 추가하면 그에 해당하는 래시피 데이터를 views.py에서 필터링으로 가져와야하는 경우이다.
결론적으로, 키워드 테이블과 레시피 테이블에 ManytoMany관계를 설정해주고 미리 중간테이블에 데이터를 관계되는 데이터를 넣어두도록 한다.

recipe recommendation

이 페이지는 위와같이 시간이 지나면 데이터가 업데이트되어 바뀌는 페이지이다.

그리고 위의 추천레시피도 일정 기간이 지나면 바뀐다. 그렇다면 레시피와 이 추천레시피의 관계를 어떻게 지어줘야할까?
하나의 추천(recommendation)은 여러개의 레시피를 가질 수 있다. 그리고 하나의 레시피도 여러개의 추천(recommendation)을 가질 수 있다. 그 이유는 시간이 지남에 따라 레시피가 바뀌지만 추천되었던 레시피가 다음달의 추천으로 나오는 것이 가능하기 때문이다. 즉, 두 테이블을 ManyToMany 관계로 엮어준다.

True or False field

위와같이 on sale인 세일상품, out of stock인 상품은 어떻게 데이터로 넘겨줘야 할까?
우서 같은 원리 선상에서 True이면 on sale, in stock으로, False이면 정상가, out of stock으로 처리해준다.

cart and order

대부분의 쇼핑사이트에 가서 장바구니에 등록을 하면 사용자가 그 기록을 지우지않는 이상 계속 남아있는다. 사용자가 수정을가하고 close를 누를 때 마다 프론트앤드 쪽에서 request를 보내서 데이터베이스에 장바구니를 저장해야할 것이다. 그리고 장바구니에 넣어뒀던 데이터를 그상태에서 checkout한다면 바로 order데이터로 잡히게 만들어야 한다. 즉, 하나의 장바구니 최종데이터가 order데이터가 되는 경우이다.

하지만 장바구니 안에 체크여부를 조정할 수 있을 경우 얘기가 달라진다. 이 경우는 장바구니 안에서 유저의 변덕에 의해 체크를 해지하고 그 상품은 order에서 제외 할수 있기 때문이다. 그래서 장바구니와 order을 연결시키는 것이 아닌 제품과 order을 연결시키는 방식을 취해야 한다.

제품에 check필드를 True or False형태로 만들어 장바구니에 들어가있지 않은 product는 전부 False 장바구니에 들어간 제품은 True로 만들어준다.

위와같이 order을 장바구니와 연관시킬 것이 아니라 제품과 연관 시키고, 주문된 제품에 대해서는 장바구니에서 제거하는 방식을 취해야 할 것이다.

profile
Quit talking, Begin doing

0개의 댓글