스타벅스 서비스 모델링 리뷰

juri·2021년 7월 13일
0

Database

목록 보기
1/1
post-thumbnail

1차 모델링

7월 12일 TIL : 링크

필수 구현 사항 :
음료, 카테고리, 영양 정보, 알러지, 음료 이미지, 음료 설명, 신상 여부

  1. 음료테이블에 음료와 1대1 관계인 데이터들을 적음
  2. 음료와 다대다 관계인 알러지는 중간테이블을 작성해서 두 테이블을 연결
  3. 카테고리는 음료의 상위 테이블이라고 생각해서 메인테이블의 카테고리id를 fk로 카테고리 테이블의 pk인 카테고리id와 연결
  4. 영양정보는 한 세트의 정보를 갖고있다고 생각했을 때 음료와 1대1 관계이기때문에 메인테이블에 있어도 상관은 없다고 생각함
  5. pk와 fk의 관계의 역전이 어떤 의미를 갖는지 궁금하다.

수정사항

기존사항
1-1. 1대1 관계인 데이터 전부를 음료테이블에 포함하면 전체적인 데이터를 한 눈에 파악 가능한 장점이 있다. 특히, 자주 조회하는 데이터일 경우는 한 테이블에 모두 포함되도록 하는 것이 좋다.
1-2. 1차 모델링에서 음료이미지를 음료와 1대1 관계의 데이터로 생각하고 음료테이블에 포함시켰지만, 이미지는 추후 확장성을 고려해 별개의 테이블로 생성하는 것이 좋다. (이미지의 개수가 2개이상이 될 경우를 대비)

2-1. 알러지는 음료와 다대다 관계이므로 중간테이블을 작성해서 두 테이블을 연결하는 것이 맞다.

3-1. 각 테이블을 계층화해서 더 상위 테이블이 Pk를 갖고 하위 테이블에 Fk를 포함시켜 (하위테이블 -> 상위테이블)의 방향을 갖게 설정하는 것이 관습이다. 하지만 그 반대의 방향이어도 상관은 없다.

4-1. 영양정보는 음료와 1대1 관계이기 때문에 음료테이블에 영양정보를 모두 포함시켜도 괜찮다. 대신, 사이즈를 고려하면 1대1 관계에서 1대다 관계로 달라지기 때문에 외부테이블에 작성한다.

5-1. 3번에서 봤듯이 pk와 fk의 관계에서 방향이 역전되어도 상관없다.

추가사항
1. 테이블의 이름은 관습적으로 복수형을 사용한다
예) category -> categories
2. 상호관계를 갖는 테이블의 각 column 이름이 일치하게 한다.
3. 신상여부는 데이터의 타입을 null대신 boolean으로 설정한다. null의 경우는, 입력할 데이터가 명확하지않으며 데이터관리가 미흡하거나 데이터를 오기입했을 때, 데이터에 오류가 생길 가능성이 있고 관리가 어렵다. boolean이 더 직관적으로 데이터를 표현할 수 있다.
또한, 신상여부는 음료와 1대1관계이지만 추후에 변동사항이 있는 데이터이기 때문에 테이블을 따로 생성하는 것이 데이터관리에 용이하다.
(예를 들어, 신상출시이벤트가 끝나면 해당 테이블을 통째로 삭제하거나 수정할 수 있다.)

2차 모델링


1. 테이블명을 복수형으로 변경
2. column명 변경 및 누락된 column 추가
: 신상여부 -> is_new, Drinks테이블에korean_nameEnglish_name 추가
3. images테이블을 새로 생성
4. Nutritions테이블과 Drinks테이블의 방향은 반대가 되어도 상관없음
Drinks테이블의 fk(nutrition_id) -> Nutritions테이블의 pk(id) 혹은
Nutritions테이블의 fk(drink_id) -> Drinks테이블의 pk(id)

profile
Make my day !

0개의 댓글