데이터의 집합을 의미하며 오늘날 DB의 종류는 매우 다양하다.
DB의 종류는 크게 6가지로 구분되며 Relational DB를 제외한 DB를 비 관계형 데이터베이스 NoSQL이라 칭한다. 이 중 보통 Relational DB와 Document DB를 많이 사용하며 정확도와 일관성을 요구할때 Relational DB를 사용, 입출력이 매우 잦으면 Document DB를 사용한다.
1. Relational DB(MySQL): 가장 많이쓰는 관계형 DB, SQL을 사용해 CRUD기능 수행, ACID Transaction이 있어서 데이터 입출력의 정확도가 높다.
2. Document DB(MongoDB): Collection안에 Document 파일을 만들어 JSON형태로 데이터를 저장함. 분산처리에 좋으나 RDB에비해 일관성이 떨어짐
3. Key-value DB(Redis) : 자주쓰는 데이터를 캐싱, 채팅을 위한 Pub/Sub, 영상 스트리밍, 로그인 기록(잘 안씀)
4. Graph DB(Neo4j): Graph Query Language(GQL)을 사용해 데이터를 다루며 자료관의 방향 관계를 표현할때 사용 (비행기 노선, SNS 관계, 코로나전염맵, 추천서비스)
5. Column-family DB(cassandra): Table에 row를 여럿만들고 그안에 column 기입하며 CQL(SQL과 비슷)을 사용함 (netflix 시청기록), 분산처리기능이 있으나 역시 일관성이 떨어짐
6. Search Engin(Elastic Search): 검색용 인덱스 보관을 위한 DB로 index를 이용해 자료를 검색해줌.(추천검색어, 검색어 오타교정에 쓰이기도 함)
관계형 데이터 모델에 기초를 둔 데이터베이스이며 현재까지 가장 많이 사용되는 DB이다.
보통 Table 구조로 이루어져있으며 DB로 사용되는 조건을 갖추면 Table을 Relation이라고 칭한다. 한 Cell에서 단일 값을 가지며 겹치는 Row가 없을 때 Relation이라 할 수 있고 Table로도 불린다. 테이블은 row, column이 존재하며 row는 tuple, record라고 불리고 column은 field, attribute로도 불린다.
DB Table에는 key가 존재하는데 슈퍼 키, 복합 키, 후보 키, 기본 키, 대체 키, 외래키가 있다.
Relational DB는 1:1, 1:N, N:M의 관계를 가질수 있는데 보통은 1:N 관계구조를 많이 가진다.
1:N 관계는 기본키와 외래키로 두개의 테이블을 연결할 경우 사용한다. N:M은 여러개의 테이블에서 기본키를 외래키로 가져와 연결해 매핑시킨 테이블을 사용할 때 사용한다.
RDB는 명확하게 정의한 DB구조를 요구하는 반면에 NoSQL은 비정형의 데이터를 저장할 수 있도록 되어있다. NoSQL의 대표적인 DB로는 MongoDB가 있으며 RDB의 Table과는 다르게 JSON, Key-Value등의 다양한 형태로 데이터를 저장한다.
RDB는 ACID와 Transaction을 지원해 데이터의 중복을 없애고 명확하게 데이터를 저장할 수 있어 Update에 유리하다. NoSQL은 상대적으로 유연해 데이터의 중복이 발생할 수 있으며 업데이트 시 원하는 요구사항에 맞는 명확한 데이터 수정이 힘들지만 조회에 유리하다는 장점이 있다. RDB는 ACID와 Transaction을 만족해야하기 때문에 scale-out에는 불리해 scale-up을 하며 NoSQL은 scale-out에 유리하다.