관계형 데이터란 데이터를 서로 상호관련성을 가진 형태로 표현한 데이터이다. 그리고 데이터는 테이블로 표현된다.
테이블끼리의 연결에는 크게 3가지 종류가 있다.
One To One : 테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계
ex) users and user_profiles

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

many To Many : 테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계
ex) 책은 여러 작가에 의해 쓰일 수 있고 작가들은 여러 책을 쓸 수 있다


스타벅스의 음료 정보를 모델링해보았다. (모델링 도구 사이트)
<테이블 및 컬럼 구성>
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는 따로 테이블로 분리할 수 있으나, 따로 구분할 만큼 중요하지 않으므로 분리하지 않는다. eng_name(x) english_name(o) 참조하는 테이블명_id로 한다.