TIL | 2주차 2) 스타벅스 모델링

김민호·2021년 9월 8일
0

WECODE TIL

목록 보기
1/24
post-thumbnail
post-custom-banner

오류가 있을 경우 알려주신다면 정말 감사하겠습니다! 🙏🏼

스타벅스 모델링

메뉴에서 음료만 모델링
AQuerytool 사용
https://aquerytool.com/

먼저 음료의 카테고리로 9개가 있음
이해를 하기 위해 엑셀로 그려봄

category 테이블을 만들고
pk(primary key)가 되는 id 열은 모든 테이블에 넣어주어야 함
그리고 category_name 열이 옴

이걸 AQeurytool로 만들어보면

하나씩 뜯어보면
모든 테이블에 id가 pk임 약간 맨 앞 번호인 것
PK : 고유 번호. 각 행의 구분점
AI : auto increase 였나 자동으로 번호 매겨지는 것
FK : foreign key로 다른 테이블의 pk를 의미함 연결고리 같은 것
Logical Name : 안써도 됨. 보기 편하게 설명 같은 것
Name: 테이블의 각 열(column)
Null : 여기 체크를 하면 데이터를 아무것도 넣지 않는 null을 허용한다는 의미
Type 종류 몇가지

  • INT : 정수
  • VARCHAR : variable character로 길지 않은 문자
  • TEXT : 긴 문자 쓸 때
  • Float : 소수점. 전체 자릿수가 7자리인 부동 소수점 숫자를 포함
  • DECIMAL : 소수점. 고정 전체 자릿수와 소수 자릿수가 있는 숫자 값을 포함

헷갈렸던 부분

  • 데이터들이 위에 직접 들어가는 것이 아니라 테이블의 열만 써주는 것임. 틀만 잡는 것. 지금 AQuerytool에
    엑셀에서 썼던 "1.콜드브루 ~ 9.주스(병음료)" 가 들어가는 것이 아님
  • 열에 해당하는 Name이 내가 짰던 엑셀은 가로 AQuerytool 에서는 세로여서 헷갈림

다음 이 화면을 보고 음료 테이블을 만들어야 함


여기 있는 정보는

    1. 음료 이름
    1. 음료 설명
    1. 영양 정보
    1. 알레르기 요인
    1. 사진

여기서 이름, 설명은 따로 테이블로 빼지 않고 이 테이블의 열에 포함시키면 됨
나머지 영양정보와 알레르기 요인, 사진은 따로 테이블로 빼서 만들어야 함. 왜냐면 담을 정보의 항목?이 2개 이상 필요하기 때문!

특히 사진을 컬럼에 저장하지 않고 테이블로 빼서 만드는 이유는
확장성을 위해서라고 배움. 위 예시는 사진이 1개이지만 여러개 있는 사진도 있고 추가될 경우를 대비해서 음료 1개에 사진 N개 이런 개념
이미지가 추가될 경우 컬럼을 추가하는 것이 아니라 이미지 테이블에 url만 넣어주면 됨

엑셀로 만들어보기

이렇게 노란색 열이 아래 테이블의 Name 밑으로 입력되어야 함

중요한 것은 category_id
이 category_id는 category 테이블과 연결되기 위한 fk로써 두 테이블간 관계는 category 1 : drink Many 관계임. 콜드브루 라는 카테고리 하나에 (직접 들어가보면) 13개의 음료가 있고 이 음료들 입장에서 하나의 음료는 다른 카테고리에는 속하지 않으므로.

마찬가지로 영양정보 nutrition 테이블도 만들어주고
음료 1개에 영양정보는 1개인 1:1 구조라는 걸 이해하고
drink 테이블의 pk를 영양정보 테이블의 fk로 받아와서 연결!

아 생각해보니까 nutrition 테이블의 몇가지는 타입이 decimal로 해줘야겠음(바쁘니 마음으로만 바꿔줌)

똑같이 images 테이블도 만들어 줌

이것은 음료 1개에 이미지가 N개인 one to many 관계


이제 가장 어려웠던 many to many 관계였던 음료와 알러지
음료 1개에 두유, 우유, 땅콩, 밀 등 여러 알러지 요인이 있을 수 있고
우유 라는 알러지 요인은 여러 음료에 속할 수 있기 때문에
이것은 다 대 다 관계
다대다 관계의 두 테이블을 연결해주기 위해서는 fk만 모여있는 중간테이블이 필요하다!
일단 엑셀에서 알러지 테이블을 만들어보면

이건 위에 만들어놓은 drink 테이블 예시

이제 AQueryTool에서 만들어보면
allergy 테이블

여기서 allergy name의 null을 허용하지 않은 이유?
allergy 테이블에 빈칸을 허용하지 않겠다는 의미

allergy테이블과 drink 테이블을 연결시켜주기 위해 중간테이블을 만들어보면

이 allergy_drink 테이블은 일단 다 fk로 구성되어 있고 그 fk들은 각각 allergy테이블의 pk와 drink 테이블의 pk를 받는다

결론 : 머리 아프다

profile
개발자로서의 삶은 https://velog.io/@maxminos 에서 기록하고 있습니다 😀
post-custom-banner

0개의 댓글