TIL.Dadabase는 간지 그자체.(기본편)

Kim Chioh·2021년 1월 18일
0
post-thumbnail

Database의 목적
관계형 vs 비관계형
one-to-one관계
one-to-many관계
many-to-many관계
normalization, ACID, transaction, Nosql

크 오늘의 썸네일, 너무 멋지지 않나요? Trust me, I am a database manager! 뭔가 슈퍼파워가 느껴지는 포스있는 포스터입니다 ㅎㅎ
전문가가 목표는 아니더라도 데이터베이스란 건 현대사회에서 떼어 놓을 수 없는 슈퍼 장치가 아닐까 생각해요. 그럼 시작하겠습니다~~!

1. Database 의 목적

데이터베이스는 물론 데이터를 당연히 저장하구요, 이외에 보존, 관리를 하기 위해 사용됩니다. 보통은 테이블 형태로 컬럼(세로) 로우(컨텐츠)의 식으로요.

이외에 기본적으로 primary key(pk)라 불리는 id값이 항.상.필요합니다. 구분을 해야하니까요.

2. 관계형 vs 비관계형

데이터베이스는 크게 두가지로 분류됩니다. 관계형, 비관계형. 느낌오시죠? 안오신다구요? ㅋㅋㅋ 저두요. 한번 알아보시죠. ㄹㅅㄱㄹ.

2.1. 관계형

관계형 데이터베이스는 table 끼리 interrelational 한 관계를 가진 데이터베이스의 형태로, one-to-one, one-to-many, many-to-many 의 3가지 형태로 나뉩니다. 느낌 안오시나요? 음, 예를 들면 쇼핑몰 홈페이지에서 크게보이는 메뉴-카테고리-상의,하의 뭐 이런 관계들이 있을 수 있네요. 각 테이블끼리 전혀 관계가 없는 사이가 아니니까 연관지을 수 있겠죠?
이런 식입니다.ㅎㅎ 하나하나 뜯어볼게요.

2.1.1. one-to-one

일대일 관계는 table A의 로우와 table B 의 로우가 정확히 1:1로 매칭이 되는 것을 말해요. 어렵지만 풀어볼게요.

e.g.)
학생 한명당 키카드가 1개씩 지급이 된다면 아래 테이블은 1:1 관계라고 볼수있어요.
students table and key_cards table

2.1.2. one-to-many

 table A의 로우와 table B의 여러 로우와 연결되는 관계에 있음을 의미합니다.
e.g)
customers table과 orders table의 경우 한명의 커스터머가 여러가지의 주문을 할 수 있겠죠. 이때 커스터머는 1 주문들은 n이므로 1:n의 관계라 할 수 있어요.
다른 말로, orders 테이블이 customer 테이블의 id, foreign key를 가지고 있다 라고 표현하며 이는 order 테이블이 customer 테이블을 참조한다 라고 말해요.

2.1.3. many-to-many

;table A의 로우

다대다 관계는 아주 간단해요. 알러지가 있는 상품이 여러개 있고, 상품이 여러개의 알러지원인을 가지고 있으면 다대다 관계이겠죠?
또 하나 예를 들어볼까요. 책 한권이 여러명의 작가들에 의해 쓰여졌고, 한명의 작가가 여러 권의 책을 썼다면 이 역시 다대다 관계라고 할 수 있습니다.

그럼 이제부터 아래는 실전입니다.

실전편.



우선 우리팀의 접근방법은 이렇게 되지만 모범답안과 화살표의 방향이 조금 달랐어요. 정답은 없지만.
예시 답안의 모델링이 더 깔끔해 보이는 이유는 화살표의 방향이, 자식에서 부모로 가고, 그리고 하위개념에서 상위개념으로 가는 것, 즉, 하위개념이 상위개념을 레퍼런싱(참조)하는 모양이 더 깔끔하게 보여져요.
그래서 많은 테이블과 교류하는 중심테이블이 여러가지 fk를 한번에 가지고 있는 것보다, 각각의 하위테이블이 상위테이블의 pk를 레퍼런싱해는 것이 더 정리가 되어보여요
추가로, 1:1관계라면 따로 테이블을 넣지 않는 편이 보기도 좋고 다른 테이블을 거치지않고 불러내는 거라서 좀더 깔끔하겠네요.

이외에 여러가지 문제가 있었어요.
아이디를 굉장히 명확하게 적어줘야한다. not just id, but category_id
true false 판단은 is_new(or has_new) 0 or 1로 표기.(tinyint type)
null 값은 체크를 해제하면 꼭 있어야한다는 의미. 체크를 해제하지 않으면 없어도된다.
allergy 디테일은 아이디로 이미 추가되어있음.

ERD 를 만들때 주의사항!!

1. 하위개념에서 상위개념으로 화살표방향 설정하기.

ex) 스타벅스 ERD
drinks---->categories
images---->drinks
drinks_allergies----->drinks
drinks_allergies----->allergies

2. 이때 화살표가 시작된곳에 (FK삽입) 도착한 곳은 PK.

3. 항상 참조한다는 말의 의미를 생각하며 표를 그려갈것.

음료 테이블이 카테고리 테이블을 참조한다.
음료이미지 테이블이 음료테이블을 참조한다.
음료&알러지 테이블이 음료테이블을 참조한다.

4. 항상 제일 상위개념에서 시작하여 중심이 되는 테이블 까지 내려간 후 거기서 퍼져나간다.

카테고리->음료->이미지, 영양성분, 알러지, .....

  • 여기까지 어떠셨나요? 어려우셨죠. 오늘은. 근데 모델링은 한번쯤 개발자라면 누구나 배우는 과정이기도 하기 때문에 꼭 여러번 읽어보시고 이해하시길 바랍니다. 먼저 큰그림을 잡고 그려보시고 잘하는 사람에게 첨삭받는거 잊지마세요!!
profile
Just do what to do

0개의 댓글