ERD를 사용한 데이터베이스 모델링

룰루팍 Lolo Park ·2022년 11월 15일
0

● ERD는 무엇인가

● ERD(entity relatioship diagram(model) 개체-관계 모델)사용법 익히기

dbdiagram 웹을 활용하라

● 과제: 스타벅스 음료 페이지를 모델링해보자.

필수적으로 구현해야하는 것은 : 음료, 카테고리, 영양정보, 알러지, 음료 이미지, 음료 설명, 신상유무

● ERD는 무엇인가

Entity Relational Diagram 다이어그램으로 개체들의 관계를 표현한 것. 데이터들의 관계를 표현한 것이다.

-ERD 를 짜는 것이 서비스 create 할 때 가장 basic 한 순서임.

-ERD 를 설계하는 부서가 따로 있고, 연차가 높은 사람들(경력이 많은)로 이루어질 가능성이 높음 - 그만큼 아주 ! 중요한 작업이라는 것임.

-만약! 대충 설계했다가, user 수가 폭발적으로 증가했을 때 그것을 다시 설계하려고 하거나 할 때 기존의 data 들을 다 날릴 수가 없기에.. 매우 힘든 작업이 될 수가 있다.

●ERD 사용법 익히기

db.diagram 웹 ▶︎ db.diagramweb

dbdiagram 튜토리얼▶︎ db.diagram tutorial

▼DBML : Database Markup Language 데이터베이스 마크업 언어

(태그 등을 이용하여 문서나 데이터의 구조를 명기, 데이터를 기술한 언어, 문서가 화면에 표시되는 형식을 나타내거나 데이터의 논리적인 구조를 명시, an open-source DSL language designed to define and document database schemas and structures.)

DSL language : Domain Specific Language 특정한 도메인을 적용하는데 특화된 컴퓨터 언어

schemas : 스키마, 데이터베이스에서 자료의 구조, 표현방법, 자료간의 관계를 형식 언어로 정의한 구조!

domain : 관계형 데이터베이스에서 테이블의 각 속성이 가질 수 있는 값의 집합

그래서 결국! DBML 이란

관계형 데이터베이스의 테이블의 각 속성들이 가질 수 있는 값의 집합을 적용하는 언어이고 이것으로 데이터베이스의 구조를 정의하고 문서화 할 수 있는 언어라는 것이다.

DBML 설명 ▶︎ https://www.dbml.org/docs/

● 스타벅스 홈페이지 모델링

★위의 과제를 실행하기에 앞서 먼저 상위 테이블들이 될 수 있는 항목은 무엇인지, 하위 테이블은 무엇인지 그것의 하위테이블은 무엇일지 한번 큰그림을 먼저 그려보면 도움이 된다. 예를들어, '카테고리' 안에 '음료'가 들어가야한다라고 결정할 수도 있고, '음료' 가 상위 '카테고리'가 하위가 된다고도 볼 수 있다. 그리고 영양정보, 알러지 테이블에는 어떤 것들이 들어가는지, 상위 항목과 어떤 관계를 이루는지, 그 관계 안에서 얼마나 중복된 데이터을이 서로 상호작용을 하는 지 생각해보고, 테이블의 column행 과 row열 를 정할 수 있다. 그것을 바탕으로 무엇이 primary key 무엇이 foreign key 로서 작동하는 지를 한번 생각해보라.

🧞‍♂️ 처음 엑셀에서 정리 된 Table 들을 보면 아주 이해가 잘 되었다. 하지만 그것을 diagram 으로 표현한 순간, pk 는 무엇이고 fk 는 무엇이고 그런 것들이 통채로 헤깔리기 시작했음. 단순히 엑셀에 구현 된 Table 표를 보고 이해하는 것이 중요한게 아닌, Table 간의 관계가 어떻게 이루어졌는지를 파악하는 게 중요했다. 예를 들어 "table 1은 table 2를 물고있다" 와 같은 표현이 어떻게 쓰이는 지를 이해하는 것도 중요했다

🧞‍♂️ 내가 설계한 ERD 를 그대로 MySQL 에 옮겨 작업한다. 그러기에 규칙을 따라야한다

1) 100% 영어로 작성할 것

2) 약어 쓰지않기 ex) ex - example, exp - explain, eng-english, img-image 같은 것들!! 남들도 보고 쉽게 이해할 수 있는 것이 좋은 코드다 ! 내가 고생해서 남들이 편할 수 있는 게 훌륭한 개발자의 스탠스!

3) MySQL 은 snake_case 로 작성한다

4) Table 명은 복수형/소문자 로 작성한다 예) Categories

5) 숫자값의 경우 얼마나 정확하게 표현될지에 따라 int 가 될수도 다른 타입이 될 수도(데시벨?!) - 그 근사값을 얼마나 정확하게 가져와야하는지에 따라 다르다. 웬만하면 데시벨인듯? 예를 들어 스타벅스 product 품목들의 영양정보 like) kcal, sugar, fat 등의 default 값은 정수(int)로 딱 안떨어질 가능성이 더 높기 때문이다.


이것도일단수정이필요한 ERD 나는 일단 이것 조차 만들 수가 없었다. 아예 손을 댈 수가 없었다.


이렇게 적고 있었음

▼표로 제대로 먼저 정리해본다고 할 때!

이렇게 적어야 맞는 것임

categories 는 menu 를 물고 있고
product 는 categories 를 물고 있는 것이다!

이렇게 하는 게 정규화(normalization) 인가?
아니!!!!!!! 정규화(normalization) 과정을 거쳐서 
아니.. 모르겠음
▼
정규화(normalization)는 모든 column 데이터 값과 row 데이터 값을 나열하여 중복된 것들을 솎아 낼 수 있는 그런 과정인 것이다. diagram 에는 표현되지 않는다. 그래 process 라고 이해하자 
참고 ▶︎ [정규화](https://mr-dan.tistory.com/10)

이것을 diagram 에 table 로 나타낼 수 있고 각 table 들의 관계 ( one to one , one to many, many to one) 를 선으로 표현한다. ㅇㅋ ?

int : 정수

varchar : string data type

boolean : 심지어 불리안 값도 넣을 수 있네!

신상여부를 boolean 값을 넣어버리면 매애애애번 update 를 할 수가 없기에 (각각의 항목들의 각각의 신상이 떠야하고 없어저야 하는 그런 데이터) 이럴 때는 data time field 라는 것으로 설정할 수 있음▼이런것**

이것도일단수정이필요한 ERD

👁 아 그리고 이 수정이 필요한 ERD 에서 잘 한 것은
여기서 nutritions table 에는 각각의 항목 이름들이 다 적혔고, allergy 는 그렇지 않고 table 이 두개에 걸쳐있다 그렇지?

왜냐하면!

nutritions 는 Table 로서 하나의 data 값을 온전히 갖게 되는데!
allergies 는 우유 만 가질 수도 있고 우유, 두유 / 두유, 땅콩 / 우유, 땅콩 / 우유, 두유, 땅콩 / 등등등등 경우의 수가 매우 많다. 그렇기 때문에 중간 값을 또 가지게 되어야 하는 것이다.

profile
Korean-Arabic Translator, Backend Developer

0개의 댓글