위의 표는 스타벅스 메뉴를 나타낸 것이다.
category - sub-category
sub-category - product
product - product_allergy - allergy
nutrient - product_allergy
Database 기초 이해 및 설치
- 데이터를 저장 및 보존 하는 시스템
- Application에서는 데이터가 메모리 상에서 존재한다. 그리고 메모리에 존재하는 데이터는 보존이 되지 않는다. 해당 애플리케이션이 종료하면 메모리에 있던 데이터들은 다시 읽어 들일 수 없다.
- 데이터를 장기 기간동안 저장 및 보존 하기 위해서 데이터 베이스를 사용하는 것이다.
- 일반적으로 database에는 크게 관계형 데이터베이스(RDBMS)와 "NoSQL"로 명칭되는 비관계형(Non-relational) database가 있다
관계형 데이터베이스(RDBMS, Relational DataBase Management System)
- 이름 그대로, 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 말한다.
- ex) MySQL, Postgres, Oracle DB
- 관계형 데이터란 데이터를 서로 상호관련성을 가진 형태로 표현한 데이터를 말한다.
- 모든 데이터들은 2차원 테이블(table)들로 표현 된다.
- 각각의 테이블은 컬럼(column)과 row(로우)로 구성된다.
- 컬럼은 테이블의 각 항목을 말한다.
- 로우는 각 항목들의 실제 값들을 이야기 한다.
- 각 로우는 저만의 고유 키(Primary Key)가 있다. 주로 이 primary key를 통해서 해당 로우를 찾거나 인용(reference)하게 된다.
- 각각의 테이블들은 서로 상호관련성을 가지고 서로 연결될 수 있다.
- 테이블끼리의 연결에는 크게 3가지 종류가 있다.
- one to one
- one to many
- many to many
- One To One
- 테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계를 one to one 관계라고 한다.
- One To Many
- 테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 one to many 관계라고 함.
각 고객은 여러 제품을 구매할 수 있지만 구매된 제품의 주인은 오직 한 고객 뿐이다 - one to many
- Many To Many
- 테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 many to many 라고 함. 아래는 화살표가 반대이다.
책은 여러 작가에 의해 쓰일 수 있고 작가들은 여러 책을 쓸 수 있다 - many to many
어떻게 테이블과 테이블을 연결하는가?
- Foreign key(외부키 뽀린키)라는 개념을 사용하여 주로 연결
- 앞서 본 one to one 예에서 user_profiles 테이블의 user_id 컬럼은 users 테이블에 걸려있는 외부 키라고 지정한다.
- 즉 데이터베이스에게 user_id의 값은 users 테이블의 id 값이며 그러므로 users 테이블의 id 컬럼에 존재하는 값만 생성될 수 있다.
- 만일 users 테이블에 없는 id 값이 user_id 에 지정되면 에러가 난다.