DEV/🟢 DJANGO

[DATABASE] 스타벅스 모델링

개발을 하게 되. 2021. 8. 15. 18:02

스타벅스 모델링 개요

어떤식으로 데이터베이스를 구성하는 것이 체계적이고 효율적인 것일까? 

데이터를 사용되는 관점에서 모델링이 좋을까 데이터 관계의 관점에서 모델링 하는게 좋을까? 

 

처음 데이터베이스를 구성할때 생각했던 것은 데이터를 사용되는 관점이 맞다고 생각했다. 

전체페이지 - 상세페이지 - 영양정보보기 사이트 

세가지 공통된 정보를 기본데이터로 사용했다. 하지만 그렇게 하면 안된다. 

반드시 데이터 관계의 관점에서 모델링해야한다. 

데이터를 가지고 데이터 사이언티스트가 상품분석을 할 수도 있고 다양한 이유로 데이터를 쓸 수 있기때문에 

데이터의 관계를 파악하는 것이 효율적으로 데이터를 불러올 수 있는 방법이다. 

즉, 쉽게 말해 데이터 코어를 기준으로 데이터를 모델링하자.  

 

우선 전체적인 데이터 모델링 개요를 짜보자. 

상위 메뉴 - 하위 메뉴 - 음식이름 

데이터의 계층적 위치를 생각하면서 데이터베이스 구성에 접근하자. 

 

스타벅스 사이트에 보게 되면 

상위 메뉴바에 해당하는 데이터테이블은 

 

상위메뉴바 

▪︎COFFE  ▪︎MENU ▪︎RESPONSIBILITY ▪︎STARBUCKS REWARDS  ▪︎WHAT'S NEW 


하위 메뉴바에 해당하는 데이터테이블은

 

하위메뉴바

- 음료

- 푸드

- 상품

- 카드

- 메뉴이야기


전체적인 테이블을 간단히 계층적 구조로 데이터 구조를 정리해서 살펴본다면 

TOP MENU
    ▪︎MENU              ▪︎STORE                            ▪︎RESPONSIBILITY  . . .
   
     SUB MENU
     - 음료                   - 매장찾기                            - 00000
     - 푸드                   - 드라이브 스루 매장             - 00000
     - 상품                   - 스타벅스 리저브 매장          - 00000
     - 카드                   - 커뮤니티 스토어 매장          - 00000
     - 메뉴이야기         - 매장이야기                         - 00000

이렇게 데이터 베이스가 구성되어있음을 알 수 있다. 

 

TOP MENU table 과 SUB MENU table 간의 관계를 살펴보면, 

[ONE TO MANY]

이제 큰 개요를 만들었으니 SUBMENU 테이블의 하위데이터 테이블을 보자.

SUBMENU - 음료카테고리 - 음료정보 로 들어가 있는 모습이다. 

 

SUBMENU 와 음료카테고리와의 관계는

[One to One]

 

 

 

이를 테이블로 확인하면,

음료카테고리 테이블과 음료정보 테이블 관계는

[One to Many]

column행 중 is_new의 데이터 타입은 0과 1 보단 Boolean으로 처리하자 

Integer 보다 Boolean 데이터저장크기가 작기때문에 효율적이다. 

 

이때 이미지url, 영양정보, 알러지정보 는 따로 배치해두자. 

 

데이터를 자주 쓰면 합쳐서 쓰라는 것인가요 ? YES

만약에 잘 쓰지 않는다면 따로 배치해서 쓰는 것이 좋음

왜냐면 합쳐쓰게 될경우 잘쓰지도 않는 데이터를 매번 불러와야하기때문에 용량이 커짐

그러니깐 내가 사용할건 1mb인데 매번 5mb를 가져오는건 비효율적인것

 

1. 이미지 url 따로두는 이유 :

    우선 이미지링크가 확장가능성이 있는지 아닌지를 판단해서 빼야한다. 

    만약 홈페이지에 이미지 하나만 고정적 배치로 들어가면 문제가 되지는 않지만, 

    이미지가 주로 쓰이거나 여러 이미지가 들어갈 경우 확정성을 위해 따로 배치해두는 것이 좋음 

 

2. 영양정보를 따로두는 이유:

    영양정보 테이블에 정보가 많다. 사이즈별로도 다르고 1회 제공 칼로리, 포화지방, 단백질 등등 불러올 데이터가 많다.

    불러올 데이터가 많다는 것은 데이터를 불러올때 그만큼 자리를 차지한다는 것이다. 

    따라서 영양정보가 필요할때만 불러오는 것이 효율적이다. 필요하지 않는 정보를 계속 불러오는 것은 매우 비효율적이다.

 

3. 알러지정보 테이블을 따로 두는 이유 : 

    알러지 정보는 2개 이상 들어갈 수 있다. 즉, 하나의 음료정보에 여러개의 알러지를 가지고 있을 수 있다. 

    이는 중간테이블 (음료테이블_알러지테이블)을 생성해서 데이터 2개를 가져올 수 있다. 

 

 

따로 두는 데이터와 테이블의 관계 

 

1. IMG테이블 과 DRINKS 테이블 : One To many

    하나의 음료에 이미지가 2개

 

2. NUTRITION 테이블 과 DRINKS 테이블 : One To One 

    음료정보에 영양정보는 1개  
    그럼에도 따로 두는 이유는 영양정보에 대한 정보가 많아서 따로 관리 

만약에 사이즈에 따른 영양정보가 다른 경우는? 

 

 

 

3. ALLERGY 테이블 과 DRINKS 테이블 : Many To Many 

 

 


이를 토대로 데이터 베이스 다이어그램을 그려보자. 

 

AQueryTool

{{source.erd_info.erd_name + '(' + source.erd_info.db_type + ')'}}

aquerytool.com