post-thumbnail

데이터베이스란?

관계형 데이터베이스(RDBMS, Relational DataBase Management System)

관계형 데이터란 데이터를 서로 상호관련성을 가진 형태로 표현한 데이터이다. 그리고 데이터는 테이블로 표현된다.

어떻게 테이블과 테이블을 연결하는가?

왜 테이블들을 연결하는가?


스타벅스 모델링

img

스타벅스의 음료 정보를 모델링해보았다. (모델링 도구 사이트)

모델링 설명

<테이블 및="" 컬럼="" 구성=""> - `drinks` 테이블에는 음료의 한글 이름, 영어 이름, 설명, 신상 여부가 포함되었다. 신상 여부는 True or False의 관계로 이름은 `is_new`, 타입은 `TINYINT`로 설정해 0과 1을 입력할 수 있도록 한다. - `categories` 테이블에는 카테고리의 이름이 들어간다. - `images` 테이블에는 이미지 url이 들어간다. url의 길이가 길 수도 있으므로 `VARCHAR(2000)`로 문자의 길이를 넉넉하게 지정해준다. - `allergies` 테이블에는 알러지 이름이 들어간다. - `nutritions` 테이블에는 1회 제공량, 포화지방, 단백질, 나트륨, 당류, 카페인 총 6가지의 영양 정보와 기준 사이즈가 들어간다. 영양정보가 없을 수 있으므로 `NULL`에 체크한다. <테이블 간="" 관계=""> - 하나의 카테고리에 여러 음료가 있을 수 있으므로 `categories` 테이블과 `drinks` 테이블은 `one to many`의 관계이다. 따라서 `drinks` 테이블은 `categories` 테이블을 참조한다. 다시 말해, `drinks` 테이블의 `category_id` 컬럼은 `categories` 테이블의 pk를 fk로 가지고 있다. - 하나의 음료에는 여러 이미지가 있을 수 있으므로 `images` 테이블은 `drinks` 테이블을 참조한다. - 하나의 음료에 여러 알러지가 포함될 수 있고, 하나의 알러지가 여러 음료에 있을 수 있으므로 두 테이블은 `many to many`의 관계이다. 각각의 테이블을 참조하는 fk로 구성된 중간테이블 `drinks_allergies`를 만든다. - 음료와 영양정보의 관계는 `one to one`이다. `one to one`일 때는 어느 쪽을 참조해도 상관없다. - `nutritions`의 `size`는 따로 테이블로 분리할 수 있으나, 따로 구분할 만큼 중요하지 않으므로 분리하지 않는다. ### 모델링 시 참고사항 - 컬럼명은 축약하지 않고 작성한다. ex) `eng_name`(x) `english_name`(o) - 테이블명은 복수로, 컬럼명은 단수로 작성하는 것이 좋다. - foreign key의 이름은 `참조하는 테이블명_id`로 한다.