오늘은 DataBase에 대해 정리해보려고 합니다 !
저는 Frontend-Developer 라서 제가 DataBase를 알아야 할 것이라고 생각 못했는데요..
이해를 하고 있으면 Backend와 서로 소통하는데 더 원활하다는 이유이기 때문에
나도 기초를 이해하고 있어야 겠구나 ! 생각했습니다 🤗
깊이 파고들어 공부할 필요는 없겠지만 의사소통에 문제가 없게 이해하고 있는 것이 중요한 것 같습니다.
Database 란 무엇인가요?
말 그대로 ! 데이터를 저장하고 보존하는 시스템을 말합니다.
저는 세션을 듣고 database를 공부하기 전에는 단순 분류로 저장된 데이터를 꺼내올 때 찾아서 꺼내온다고만 생각했었습니다.
하지만, database를 정리하기 위해서는 정규화라는 과정을 통해 미리 데이터들을 분류하고 분류된 값끼리 정리해둡니다.
이렇게 정리된 database를 필요할 때 원하는 키값으로 꺼내어 사용할 수 있습니다.
- Database 는 크게 관계형 데이터베이스인 RDBMS와 비관계형인 NoSGL 가 있습니다.
⭐️관계형 데이터 베이스 RDBMS
관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 말합니다.
데이터를 서로 상호관련성이 존재하게 나타낸 데이터를 말합니다.
모든 데이터들은 2차원 테이블로 표현됩니다.
각각의 테이블은 Column (컬럼)과 row(로우)로 구성되어 있습니다.
로우는 각 항목들의 실제 값을 표시하며 각 로우는 자기만의 고유 키를 가지고 있습니다.
주로 이 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 관계라고 함.
각 student는 여러 개의 class를 가질 수 있다. 그래서 일대n로 매칭된다.
-many to many
테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 many to many 라고 함.
위 예시는 제가 wecode 과제 참여 시 조원들과 스타벅스 데이터베이스를 분류하다가 생각해봤던 예시인데요.
스타벅스 안에서 스페셜 태그는 신메뉴와 시즌메뉴라는 것이 들어있는 것이고, 각 메뉴가 신메뉴인지 시즌 메뉴인지 id key로 알 수 있습니다. 이 신메뉴와 시즌메뉴는 한 메뉴에 둘다 포함이 될 수도 있으며 각 스페셜 태그 안에 여러 개의 메뉴 아이템들이 들어올 수 있기 때문에
n 대 n 관계라고 생각했습니다.
database에 대해 처음에 떠올렸을 때처럼 그냥 정보를 저장하기만 하면 왜 안될까?
- 개발자로서 공부하고 생각하게 된다면 한 눈에 보았을 때도 정보들이 너무 많이 중복되어 데이터 낭비가 아닐까? 생각이 들 것이다. 아마?
디스크를 더욱 효율적으로 사용하고 중복되는 데이터에 유니크한 키를 생성해 분리함으로서 정보를 더욱 손쉽게 찾을수가 있습니다!!
이러한 문제들을 없애기 위해 조금 전 배운 것들을 정규화 라고 합니다.
⭐️비관계형 데이터 베이스 NoSQL
관계형 데이터베이스와는 다르게 데이터들을 저장하기 전에 정의할 필요가 없습니다.
RDBMS(SQL) 이 효율적이기 위해 저장하기 전에 정의했다고 하였는데 그렇다면 NoSQL은 왜 사용될까요?
미리 정보를 정의하고 저장하는 RDBMS는 효율적으로 디스크를 관리하는 데 초점을 둔다면 NoSQL은 미리 정리하지 않기 때문에 나중에 데이터가 확장되더라도 추가하는데 걱정없고 유연하게 반응합니다. 그렇기 때문에 방대한 테이터의 양을 가진 정보일수록 유리하게 쓰입니다.
'others' 카테고리의 다른 글
[wecode 후기] 2차 프로젝트를 마치며 (0) | 2020.11.15 |
---|---|
[wecode 후기] 1차 프로젝트를 마치며 (0) | 2020.10.31 |
TIL no.17 - Linux 와 Terminal에 대한 기본 이해 ! (0) | 2020.09.23 |
TIL no.16 - Dev Tools 개발자 도구 (0) | 2020.09.21 |
TIL no.13 - Git / Github 이란 무언인가? (0) | 2020.09.05 |