TIL_32_with Wecode 022 Data base

JIEUN·2021년 2월 26일
0
post-thumbnail

이전에는 배운 내용들을 그대로 옮겨 적으며 리마인드 하는 방식으로 벨로깅을 해왔는데 시간도 오래 걸리고 비효율적이라는 생각이 들어, 정의나 개념은 참고하되 나만의 언어로 간략하게 적는 방식으로 벨로깅을 해보려고 한다. 이전것들 죄다 수정하고 싶지만.. 그것 또한 시간을 쓰게되므로.. 기억에 잘 남도록 효율적으로 기록을 해보자 .. !

2주차 첫 날 배운 데이타베이스. 정해진 팀원과 그 날 배운 데이타베이스를 통하여 모델링 하는 시간도 가졌었다. 다음 날, 리뷰도 했었는데 흥미롭고 재밌는 시간이었다. 간단하게 정리를 해보겠다.

🐹 데이타베이스란, 컴퓨터 시스템에 저장된 정보나 데이터의 집합이다. 데이타베이스는 관계형 데이타베이스(RDBMS)와 비관계형 데이타베이스 ("NoSQL"로 명칭)가 있다.
MySQL, Postgres, Oracle DB와 같은 것이 관계형 데이타베이스다. 서로 상호관련성을 가진 형태이다.

🐹 각 로우는 고유 키 Primary Key 가 있다. 이 primary key를 통해서 해당 로우를 찾거나 참조한다. 테이블끼리의 연결에는 3가지 종류가 있는데 가장 어려운 종류가 Many To Many 이다.

🐹 이게 원 투 원. 딱 봐도 일대일 매칭이다.

🐹 원 투 매니. 일 대 다 또는 1 대 N 의 관계.
각 고객은 여러 제품을 구매할 수 있지만,
구매된 제품의 주인은 딱 한 명이다.
예를 들어 나(양지은) 과 내 친구(차은우) 가 고양이를 키운다. 나는 한 마리, 은우는 두 마리. 이렇게 주인인 우리는 여러 마리의 반려동물을 가질 수 있지만 은우의 고양이가 은우와 나 두 명의 주인은 가질 수 없는 것 과 같은 개념이다.

🐹 매니 투 매니. 다 대 다 의 관계다. 위의 테이블을 보면 중간 테이블이 추가됐음을 볼 수 있다. 다 대 다의 관계는 이렇게 중간테이블이 테이블끼리를 연결해준다. 책은 한 권이지만 여러 작가가 참여해서 쓰여진 책일 수 있고, 또한 작가들은 책 한 권이 아닌 여러권을 썼을 수도 있다.

테이블과 테이블은 Foreign key(외부키)를 사용하여 연결한다. 위에서 본 one to one 테이블에서 user_profiles 테이블의 user_id 컬럼은 users 테이블에 걸려있는 외부 키이다.

테이블을 연결하는 이유?
동일한 정보들의 불필요한 중복을 줄이기 위해서.
디스크를 더 효율적으로 쓰기 위해서.
서로 같은 데이터지만, 부분적으로 다른 내용의 데이터가 생기는 문제를 방지하기 위해서.
이런 것을 normalization(정규화) 라고 한다.


위의 테이블은 우리 팀원과 함께 짠 데이타베이스이다. 일단, 카테고리와 음료1 대 N 의 관계이다. 예를 들면, 커피가 들어가는 음료와 커피가 들어가지 않는 음료의 카테고리가 있다. 커피가 들어가는 음료는 하나의 카테고리로, [아메리카노, 라떼, 돌체라떼] 와 같은 여러 음료들을 가질 수 있다. 커피가 들어가지 않는 음료의 카테고리 또한 [피지오, 아이스티]와 같은 여러 음료들을 가질 수 있으므로 원 투 매니의 관계이다.

그리고 음료와 이미지의 관계는 일 대 일 이 될 수도 있고, 일 대 다가 될 수도 있다. 그리고, 이미지가 한 장이 아닌 여러장일 경우에는 테이블을 외부에 나누는게 좋다. 이미지를 전면 수정하게 될 경우 또는 업데이트가 필요할 경우 수정에 용이하고 차지하는 데이타를 효율적으로 사용할 수 있기 때문이다. 일단 우리 팀원은 이미지 테이블을 잘 나누었다.

신상여부와 같은 테이블은 yes/no로 나뉘는 단순한 값이라, 테이블을 굳이 나눌 필요가 없고 음료 테이블에 같이 넣어주는게 좋다. boolean타입으로 t/f 로 나누는 것도 하나의 방법.

음료를 간단하게 설명해주는 description 또한 음료 테이블에 같이 넣어주는게 좋다. text 값으로 잘 넣었다고 칭찬받았다. ㅎㅎ

중요포인트였던, 알러지와 음료의 관계! 일단 매니 투 매니, 다 대 다의 관계이다. 그렇기 때문에 중간테이블이 필요하다. 우리 팀원의 테이블을 보면 알러지와 음료를 이어주는 알러지음료 테이블이 있음을 알 수 있다. 왜 다 대 다 일까? 일단. 알러지를 유발하는 종류는 여러가지이다. 예를 들면, [우유, 설탕, 에스프레소, 복숭아, 견과류 등등]이 있다고 해보자. 그리고 음료는 하나이지만, 여러 알러지를 가지고 있을 수가 있다. 예를 들어, [라떼는 우유와 에스프레소 둘 다]를 가지게 된다. 그래서 나는 그럼 일 대 다의 관계가 아닌가? 라고 생각을 했다. 하지만, 우유와 에스프레소 또한 라떼 뿐만 아니라 다른 음료들도 가질 수가 있다. [우유는 라떼, 돌체라떼 등] 여러 음료를, [에스프레소 또한 라떼, 아메리카노 등]을 가질 수가 있다. 그렇기 때문에 중간테이블을 만들어줘서 다 대 다 의 관계를 이어주어야 한다.

이건 위코드에서 제공해준 테이블. 정리에 도움이 되어서 첨부해본다.

0개의 댓글