데이터베이스(DB, DataBase)란?
일정한 규칙/규약을 통해 구조화되어 저장되는 데이터의 모음입니다.

해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(DataBase Management System)라고 하며, 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어(query language)를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있습니다.
또한, 데이터베이스는 실시간 접근과 동시 공유가 가능합니다.
ex) 쇼핑몰
- 상품 정보, 고객 정보, 주문 정보 데이터를 데이터베이스에 저장하고 이후에는 데이터베이스에서 가져와 조회하는 것
데이터베이스는 단순 데이터 저장소 개념을 넘어서서 컴퓨터 언어로 제어가 가능하고 앱이나 웹을 통해 전세계로 공유가 가능합니다.

위 그림에서처럼, 데이터에서 정보를 추출하여
데이터베이스 쿼리를 사용하여 데이터베이스에서 사용자가 원하는 정보를 검색하거나 가공할 수 있습니다.
RDBMS 는 관계형 데이터베이스 관리 시스템의 약자로, 데이터를 테이블의 형태로 구성하고 테이블 간의 관계를 이용하여 데이터를 저장하고 관리하는 시스템입니다.
데이터베이스와 소통하기 위해 사용하는 언어로, 가장 많이 사용되는 것이 SQL 입니다.


반면, NoSQL에서는 다른 구조의 데이터를 추가할 수 있습니다.

위와 같이 "John"의 문서(=document =SQL의 레코드)에 email key값을 추가한다고 해서, 다른 문서에 영향을 미치지 않습니다. 따라서 NoSQL은 데이터의 구조가 같을 필요가 없습니다.
DBMS는 데이터베이스 관리 시스템을 나타냅니다. 사용자가 데이터에 관한 정보를 가능한 한 효율적이고 효과적으로 구성, 복원 및 검색 할 수 있도록하는 응용 프로그램 모음입니다.
널리 사용되는 DBMS 중 일부는 MySql, Oracle 등이 있습니다.
장점
RDBMS는 관계형 데이터베이스 관리 시스템을 의미합니다.
관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스입니다.
또한 RDMBS는 관계를 맺고 모여있는 테이블들의 집합체로 이해할 수 있습니다.
이러한 테이블 간의 관계에서 서로의 칼럼을 기준으로 Join이 가능하다는 게 RDBMS의 가장 큰 특징입니다.
NoSQL이란(Not Only SQL)의 비 관계형 데이터베이스로서
약자로 말 그대도 위에서 설명한 RDB 형태의 관계형 데이터베이스가 아닌
다른 형태의 데이터 저장 기술을 의미하고 있습니다.
NoSQL에서는 RDBMS와는 달리 테이블 간 관계를 정의하지 않습니다.
관계 정의가 없으니 Join이 불가능하고 트랜잭션을 지원하지 않습니다.
NoSQL은 점점 빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상하기 위해서는 장비가 좋아야 하는 Scale-Up의 특징이 비용을 기하급수적으로 증가시키기 때문에 데이터 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장하였습니다.
RDB는 Transaction과 정합성에 초점이 맞춰진 데이터베이스라면,
NoSQL은 RDB 보다는 고속의 읽기와 쓰기가 가능하고 분산처리에 뛰어다는 점이 특징입니다.
**사전 지식
Scale-Up : cpu 변경 램 추가 등 하드웨어를 변경하여 시스템의 성능을 높임
=> rdbms에서 사용하는 성능 개선 방식 (비용이 많이 발생)
Scale-Out : 하나의 장비에서 처리하던 일을 여러 장비에 나눠서 처리함
=> 비교적 저렴한 방식으로 서버 유지 가능

데이터베이스에는 3가지 유형의 관계가 있습니다.
SQL 문은 기본적으로 DDL, DML 및 DCL의 세 가지 범주로 나뉩니다.
다음과 같이 정의 할 수 있습니다.
DDL (데이터 정의 언어) 명령은 데이터를 보유하는 구조를 정의하는 데 사용됩니다. 이 명령은 자동 커밋됩니다. 즉, 데이터베이스의 DDL 명령에 의해 수행 된 변경 사항이 영구적으로 저장됩니다.
DML (데이터 조작 언어) 명령은 데이터베이스의 데이터를 조작하는 데 사용됩니다. 이 명령은 자동 커밋되지 않으며 롤백 할 수 있습니다.
DCL (데이터 제어 언어) 명령은 데이터베이스에서 데이터를 사용하기위한 액세스 권한 취소와 같이 데이터베이스에서 데이터의 가시성을 제어하는 데 사용됩니다.

엔터티는 실세계에서 독립적으로 존재하는 장소, 클래스 또는 객체 일 수 있습니다.
엔터티 타입은 유사한 특성을 가진 엔터티 집합을 나타냅니다.
데이터베이스에 설정된 엔티티는 특정 엔티티 유형을 갖는 엔티티의 집합을 나타냅니다.

테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치로 기본키, 외래키, 후보키, 슈퍼키, 대체키가 있습니다.