2021. 10. 12. 20:53ㆍ프로그래밍/데이터베이스
🚀️ Mission : 스타벅스 서비스 모델링
팀 미션 💫️
주제 : 스타벅스 음료 페이지 모델링
⭕️ 필수 항목
: 카테고리 | 음료 | 영양 정보 | 알러지 | 음료 이미지 | 음료 설명 | 신상 여부(상세분류)
❌️ 제외 항목
: 프로모션, 음료사이즈
☕️ 모델링 페이지
음료 페이지 - 메인
음료 페이지 - 상세
:: 완성된 ER-Diagram
:: 테이블 설계
category
ID pk
| 카테고리 이름
- 카테고리 테이블
- Define 항목들은 따로 빼서 관리할 수 있도록 카테고리 테이블을 따로 생성
beverage
카테고리_ID fk
| ID pk
| 음료 이름_kor | 음료 이름_eng | 음료 이미지 | 음료설명 | 알러지
- 음료 테이블
- 음료에 종속되는 항목인 음료이름(kor/eng), 이미지, 설명, 알러지 정보를 컬럼으로 추가
- 알러지를 유발하는 항목이 특정되는 경우, 컬럼 분리 고려
nuturition_info
음료_ID fk
| 1회 제공량 | 나트륨 | 포화지방 | 당류 | 단백질 | 카페인
- 음료 영양정보 테이블
- 음료마다 다르게 나오는 영양정보를 관리
beverage_type
음료_ID fk
| 신상여부(Y/N) | 시즌여부(Y/N)
- 음료 상세분류를 위한 분류 테이블
- 음료별 신상음료여부와 시즌음료여부를
bool
값으로 기입할 수 있도록 지정
:: 느낀점
왜 이렇게 설계했는지, 설계에 대해 명확한 근거를 들일 수 있도록 정규화와 역정규화 공부해서 다시 생각해보기
+ 추가 (2021.10.13)
🌈️ 정규화
관계형 데이터 베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업
:: 제 1 정규형
애트리뷰트의 도메인이 오직 원자값만을 포함 (즉, 하나의 속성이 단일값을 갖도록 설계)
:: 제 2 정규형
주식별자가 아닌 속성들이 주식별자에 완전 함수적 종속인 것
:: 제 3 정규형
비주요 애트리뷰트가 비주요 애트리뷰트에 의해 종속되는 경우가 없는 릴레이션 형태
ex) 판매 테이블안에 고객정보가 있으면 제 3 정규화를 진행해야함.
🤔️ 테이블 설계 다시 생각해보기
category
- 카테고리 항목이 추가되는 경우, 카테고리 항목만 따로 관리하는 것이 확장에 유리하다.
예시 : '콜드브루' 카테고리가 '더치커피'로 변경되야 한다면?
만약 beverage 테이블에 카테고리가 종속되어 있다면, 카테고리가 '콜드브루'인 모든 항목들을 찾아서 데이터를 변경해줘야 한다.
하지만 category 테이블로 따로 관리한다면, category_name 컬럼의 단 하나의 데이터만 수정해주면 될 것이다.
beverage
- 주식별자인 음료ID에 완전 함수적 종속인 항목들만 컬럼으로 생성했다.
- 음료가 가지는 데이터에는 카테고리, 음료이름(kor, eng), 음료설명, 이미지, 알러지, 제품 영양 정보 등 다양한 정보들이 있었지만 제품 영양 정보는 확장성을 위해 분리시켰다.
🚨️🙄️ 설계 할 때 놓친 부분
이미지, 알러지는 다중값이 될 수 있고, 알러지는 다른 곳에서도 사용할 수 있으므로 따로 분리해서 관리할 필요가 있다.
allergies
ID
pk
| 알러지beverage_allergies
ID
pk
| 음료 IDfk
| 알러지 IDbeverage_images
ID
pk
| 음료 IDfk
| Url
nuturition_info
- beverage 의 주식별자인 음료ID에 종속되지만 영양 정보 관련 항목이 많고, 영양정보가 추가될 경우를 고려하여 테이블을 따로 관리하는 것이 용이할 것으로 보여 테이블을 따로 생성하였다.
예시 : 일부 음료에 '탄수화물, 트랜스지방, 콜레스테롤' 항목이 추가된다면?
영양정보가 beverage 테이블에 종속되어 있었다면, 모든 음료가 탄수화물, 트랜스지방, 콜레스테롤을
null
혹은0
의 값으로 표기해야 했을 것이다.nuturition_info 테이블에서 관리한다면 컬럼이 추가되는 것은 동일하지만 beverage 테이블과 조인해서 컬럼을 가져오기 때문에 필요하지 않은 컬럼(탄수화물, 트랜스지방, 콜레스테롤)에 대해서는 가져오지 않아도 된다.
beverage_type
- 상세분류를 위한 신상/시즌 여부이므로 따로 관리할 수 있도록 테이블을 생성했다.
'프로그래밍 > 데이터베이스' 카테고리의 다른 글
콘솔에서 Database 생성시 Character Set 설정하기 (0) | 2021.10.17 |
---|---|
Database (1) (0) | 2021.10.12 |
[MSSQL] 연결된 서버(Linked Server) 연결 테스트 (0) | 2021.02.18 |
[MSSQL] 정렬 조건없이 순번 매기는 방법 (0) | 2021.01.27 |