데이터베이스란?
등장 배경
메모리에 존재하는 데이터는 보존되지 않는 휘발성
오랜 기간 데이터를 저장 및 보존하기 위해 데이터베이스를 사용
일반적으로 관계형 데이터베이스(RDBMS)와 비관계형 데이터베이스(NoSQL)가 있다.
관계형 데이터 ex) MySQL, Postgres, Oracle DB
모든 데이터들은 2차원 테이블(table)들로 표현할 수 있다.
각각의 테이블은 컬럼(column)과 row(로우)로 구성되어 있다.
컬럼: 테이블의 각 항목
로우: 각 항목들의 실제 값
개별 로우는 자기만의 고유 키(Primary Key)가 있다. 주로 이 고유 키를 통해 서 해당 로우를 찾거나 인용(reference)하게 된다.
고유 키(Primary Key): 중복된 데이터가 하나의 테이블에 삽입되는 것을 방지하는 역할
테이블의 연결 : 각각의 테이블들은 상호관련성을 갖고 서로 연결될 수 있다.
테이블과 테이블을 연결하는 방법
Foreign key(외부키)라는 개념을 사용하여 연결
외래키는 두 테이블을 서로 연결하는 데 사용되는 키이다.
외래키가 포함된 테이블을 자식 테이블이라고 하고 외래키 값을 제공하는 테이블을 부모 테이블이라한다.
앞서 본 one to one 예에서 user_profiles 테이블의 user_id 컬럼을 users 테이블에 걸려있는 외부 키라고 지정한다.
즉 데이터베이스에게 user_id의 값은 users 테이블의 id 값이며 그러므로 users 테이블의 id 컬럼에 존재하는 값만 생성될 수 있다.
만일 users 테이블에 없는 id 값이 user_id 에 지정되면 에러가 발생한다.
왜 테이블들을 연결하는가?
normalization
(정규화) 이라고 한다.스타벅스 음료 페이지에 대한 권장 모델링 구조
과제물
피드백 내용 정리
코딩 컨벤션(코딩 규칙) 준수하기
데이터베이스에선 Boolean 대신 TINYINT
를 사용하여 0과 1로 표현.
True or False 여부를 묻는 컬럼 Name은 is_00
형식으로 지정하기 ex) is_new
음료 이미지에 컬럼의 로우에는 image의 url이 값으로 입력되므로 컬럼 Name을 image_url
로 짓기
One To One 관계 설정 시, 외래키가 있는 테이블에서 참조 대상 테이블을 바라봐야 한다. 이를 정참조라고 하는데, 정참조가 이뤄져야 데이터 조회가 편리해지기 때문이다.
One To Many 관계 설정 시, 자식 테이블에서 부모 테이블 방향으로 바라봐야 함(자식 입장에서 정참조에 해당)
kcal --> FLOAT을 DECIMAL(6, 2)
로 변환
Foreign key(외부키) 지정은 id 컬럼이 아닌 다른 컬럼으로 지정해주는 것이 좋다.
beverage_images 테이블의 경우 확장성(추후 이미지의 개수가 추가되어 3장, 4장으로 늘어날 가능성)을 생각한다면 1:1 연결 대신 beverages 테이블을 부모로 하는 One To Many로 연결하는 것이 좋아 보임
pk는 모든 테이블에 필요(고유, 유일, 변하지 않아야 하기 때문에 숫자로 함)
Many to Many에서 중간 테이블의 필요성: 음료 테이블과 알레르기 테이블의 데이터가 중복 증가하는 것을 막아준다.
Many to Many의 장점: 테이블 column이 추가됐을 때, 수정이 쉽다. 확장성이 높다.