데이터베이스는 우리가 필요한 방대한 양의 자료를 정리하는 시스템이다. 자료를 정리하는 스타일에는 다양한 방법이 있다. 다양한 분류 기준이 있지만, 크게 관계형 데이터베이스와 비-관계형데이터 베이스가 존재한다. 대표적으로 mongoDB는 비관계형 데이터베이스의 예시이다. 관계형 데이터베이스(RDBMS, Relational DataBase Management System)는 이름 그대로 데이터 사이의 관계에 기초를 둔 데이터베이스 시스템을 말한다.
📌 관계형 데이터베이스에서 모든 데이터는 2차원 테이블(table)로 표현할 수 있다.아래 테이블은 책 목록을 저장하며, 행(row)과 열(column)으로 구성되어 있는 2차원 데이터베이스 테이블이다.
id
, 책 제목
, 작가
, 출판사
, 가격
)을 의미갈매기의 꿈
, 리처드 바크
, 나무옆의자
, 11,520
은 2번 행의 실제값이다테이블의 가장 첫 컬럼은 언제나 id
다. 각 로우는 언제나 고유한 번호를 갖고 있으며 이를 고유 키(Primary Key)라고 한다. 따라서 My books
테이블 가운데 개미
라는 책은 id가 4인 데이터
라고 표현한다. 개미의 primary key가 4번인 셈이다. 이 Primary Key를 통해서 특정 로우를 찾거나, 인용(reference)할 수 있다.
관계형 데이터베이스는 각각의 테이블들이 서로 상호관련성
을 가지고 서로 연결되어 있다. 각각의 테이블들이 완전히 독립적인 대상이 아니라, 테이블 A와 테이블 B가 서로 연관되어 있고, 서로 관련이 있다는 뜻이다.
테이블끼리의 연결에는 3가지 종류가 있다. One to One
, One to Many
, Many to Many
한국어로는 일대일
, 일대다
, 다대다
관계라고 부른다. 관계형 데이터베이스 내부에 테이블 A와 테이블 B가 있을 때, 이 두 테이블은 무조건 세가지 가운데 한가지 관계에 해당한다.
One to One
테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계를 one to one 관계라고 한다. 테이블 A의 로우(row) 하나는 테이블 B의 로우(row) 하나와 연결된다. 반대로 테이블 B의 로우 하나도 테이블 A의 로우 하나와 연결된다. Identification numbers 테이블의 user 컬럼은 users 테이블의 id(pk)를 참조한다. 다른 테이블의 pk를 참조한 컬럼에 입력되어 있는 숫자들에도 이름이 있다. 이를
Foreign Key
, 혹은 한국어로외래키
라고 부른다. 따라서identification numbers
테이블의user_id
는 모두FK
로 부를 수 있다.
One to Many
테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 one to many 관계라고 한다. 그림과 같이 users 테이블의 id 1은 pk다. pets테이블의 id 1과 2의 냥돌이 그리고 스위티는 user_id 1(fk)로 users 테이블과 연결된다. 일대 다의 예시이다.
Many to Many
테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 many to many 라고 한다. 두 테이블이 서로 각자 다른 테이블의 여러 데이터와 연결 될 때에는 두 테이블에 속한 데이터의 조합을 입력하기 위한
중간 테이블
이 하나 생성된다.Many To Many
관계는N:N
이라고 표현하기도 한다. 이와 같은 경우에서테이블 authors와 테이블 books는 서로 다대다 관계이다
라고 표현한다.
중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓰고,
또한 서로 같은 데이터이지만 부분적으로만 내용이 다른 데이터가 생기는 문제가 없어진다.
이것을 normalization
(정규화) 이라고 한다.
one-to-one
, one-to-many
, many-to-many
세가지로 타입이 분류된다.one-to-one
: A 테이블의 한 데이터는 B 테이블의 데이터 하나와만 연결.one-to-many
: A 테이블의 데이터가 B 테이블의 여러 데이터와 연결.many-to-many
: A 테이블과 B 테이블 모두 서로 여러 데이터와 연결.