TIL-028 | Database-2_스타벅스 서비스 모델링

Lee, Chankyu·2021년 10월 17일
0
post-thumbnail
post-custom-banner

📝 ERD (Entity Relationship Diagram)

  • 시스템의 엔티티들이 무엇이 있으며 각각 어떤 관계가 있는지를 나타내는 다이어그램이다.

ERD 작성법

  1. 모든 엔티티들을 정의한다.
  2. 엔티티 간 연관 관계들을 정의한다.
    연관 관계를 매핑할때는 두 가지 키워드를 고려 해야 한다.
  • 방향
    • 단방향 : Table1, Table2 중 어느 한쪽만 참조하는 관계
    • 양방향 : Table1, Table2 서로 참조하는 관계
  • 다중성
    • 1 : 1 (one to one) : Table1의 로우와 Table2의 로우가 정확히 일대일 매칭이 되는 관계가 one to one 관계이다.
    • 1 : N (one to many) : Table1의 로우가 Table2의 여러 로우와 연결이 되는 관계가 one to many 관계이다.
    • N : N (many to many) : Table1의 여러 로우가 Table2의 여러 로우와 연결이 되는 관계가 many to many 관계이다.
  1. 속성 값들을 추가 한다.

Foreign key(외부키)

  • 관계형 데이터베이스에서 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키를 의미한다.
  • 즉, Table과 Table의 연결은 Foreign key(외부키)라는 개념을 사용하여 연결이 가능하다.

여러 Table에 정보를 저장하고 연결하여 사용하는 이유

  • 하나의 Table에 모든 정보를 입력하면 정보들의 중복 발생이 불가피하다.
  • 더 많은 디스크를 사용하게 되고, 데이터가 잘못 저장 될 가능성도 높아진다.
  • 여러 테이블에 나누어 저장한 후 필요한 테이블끼리 연결시킴으로써 디스크를 효율적으로 사용하고 데이터의 중복 문제를 해결할 수 있다.
  • 이것을 normalization(정규화)라고 한다.

[실습] - 스타벅스 서비스 모델링

🌈 스타벅스 음료 페이지 모델링하기

👉 필수 구현 사항 : 음료, 카테고리, 영양 정보, 알러지, 음료 이미지, 음료 설명, 신상 여부
👉 구현 제외 사항 : 프로모션, 음료 사이즈

  • ERD 작성법에 따라 음료 페이지의 모델링을 위해 필요한 Table 수를 정하고 Table 간 연관관계를 생각해보았다.
  • Table의 수는 7개가 필요할 것이라 판단하였다.
    • menu, categories, drinks, nutritions, images, allegies, drinks-allegies(중간테이블)
    • Table의 이름은 소문자, 복수형으로 명명한다.

나의 답안

1) 메뉴-카테고리-상품의 분류

  • 구조상 상품 정보의 골격을 이루는 상품의 분류 테이블을 3개 생성하였다. 스타벅스 홈페이지를 보면 메뉴 항목안에 음료가 있고, 음료 안에 각각의 상품이 있는것을 볼 수 있다. 예를 들어 "나이트로 바닐라 크림" 이라는 상품은 "음료-콜드브루-나이트로 바닐라 크림"과 같은 순으로 찾아야 한다.
  • 따라서 menus, categories, drinks 테이블을 생성하고 각각의 테이블은 one to many로 설정하여 category 테이블에는 menu_id를 외래키로, drinks 테이블에는 category_id를 외래키로 지정하였다.

2) 상품명-이미지url, 상품명-영양정보 table들의 연결

  • 상품명(drinks)과 영양정보(nutritions)의 관계는 one to one이다. nutritions에 많은 컬럼이 있긴하나 하나의 로우는 하나의 상품과 매칭 된다. 상품명과 이미지url(images)은 one to many 관계이다. 이미지가 복수로 등록된 경우도 있기 때문이다.

3) 상품명-알러지 정보의 연결(many to many)

  • 상품명(drinks)과 알러지(allegies)의 관계는 many to many 이다. many to many 관계에서 중간테이블(drinks-allergies)의 생성은 필수이며 drinks_id, allergies_id, id 로 구성된다.
profile
Backend Developer - "Growth itself contains the germ of happiness"
post-custom-banner

0개의 댓글