Database | 관계형 데이터베이스와 스타벅스 모델링

Sua·2021년 1월 19일
0

Database

목록 보기
2/4
post-thumbnail

데이터베이스란?

  • 데이터베이스란 데이터를 저장하는 시스템이다.
  • 데이터를 저장 및 보전, 관리하기 위해서 데이터 베이스를 사용한다.(<-> 메모리)
  • 관계형 데이터베이스(RDBMS)와 "NoSQL"로 명칭되는 비관계형(Non-relational) 데이터베이스가 있다.

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

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

  • 테이블끼리의 연결에는 크게 3가지 종류가 있다.

  • One To One : 테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계
    ex) users and user_profiles

  • One To Many : 테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계
    ex) 각 고객은 여러 제품을 구매할 수 있지만 구매된 제품의 주인은 오직 한 고객 뿐이다

    • customer 테이블과 order 테이블이 One To Many의 관계에 있다.
    • order 테이블의 customer_id 컬럼이 customer 테이블의 primary key를 foreign key로 가지고 있다.
    • order 테이블이 customer 테이블을 참조한다.
  • many To Many : 테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계
    ex) 책은 여러 작가에 의해 쓰일 수 있고 작가들은 여러 책을 쓸 수 있다

    • 중간테이블에는 양쪽 테이블에서 참조해온 id의 조합이 저장된다.
    • id의 조합 뿐만 아니라 추가적인 데이터도 저장될 수 있다.

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

  • Foreign key(외부키)라는 개념을 사용하여 주로 연결한다.
  • 앞서 본 one to one 예에서 user_profiles 테이블의 user_id 컬럼은 users 테이블에 걸려있는 외부 키라고 지정한다.
  • 즉, 데이터베이스에게 user_id의 값은 users 테이블의 id 값이며 그러므로 users 테이블의 id 컬럼에 존재하는 값만 생성될 수 있다.

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

  • 중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓸 수 있다.
  • 서로 같은 데이터이지만 부분적으로만 내용이 다른 데이터가 생기는 문제가 없어진다.
  • 이것을 normalization(정규화)이라고 한다.

스타벅스 모델링

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

  • 필수 구현 : 음료 이름, 카테고리, 영양 정보, 알러지, 음료 이미지, 음료 설명, 신상 여부
  • 구현 제외 사항 : 프로모션, 음료 사이즈

모델링 설명

<테이블 및 컬럼 구성>

  • 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일 때는 어느 쪽을 참조해도 상관없다.
  • nutritionssize는 따로 테이블로 분리할 수 있으나, 따로 구분할 만큼 중요하지 않으므로 분리하지 않는다.

모델링 시 참고사항

  • 컬럼명은 축약하지 않고 작성한다. ex) eng_name(x) english_name(o)
  • 테이블명은 복수로, 컬럼명은 단수로 작성하는 것이 좋다.
  • foreign key의 이름은 참조하는 테이블명_id로 한다.
profile
Leave your comfort zone

0개의 댓글

관련 채용 정보