# DataBase



## 💾**데이터베이스(Database, DB)란?**

데이터베이스를 한 마디로 정의하면 **‘데이터의 집합’**&#xC774;라고 할 수 있습니다.

데이터베이스에는 일상생활 대부분의 정보가 저장되고 관리됩니다. 오늘 보내거나 받은 카카오톡 메시지, 인스타그램에 등록한 사진,  카페에서 구매한 아이스 아메리카노 등의 정보가 모두 데이터베이스에 기록됩니다.





## 💾**DBMS란?**

데이터베이스를 ‘데이터의 집합’이라고 정의한다면, 이런 **데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)**&#xB77C;고 합니다. 다양한 데이터가 저장되어 있는 데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능해야 합니다.



예로 은행의 예금 계좌는 많은 사람들이 가지고 있습니다. 여러 명의 예금 계좌 정보를 모아 놓은 것이 데이터베이스입니다. 은행이 가지고 있는 예금 계좌 데이터베이스에는 여러 명이 동시에 접근할 수 있습니다. 예금 계좌 주인, 은행 직원, 인터넷 뱅킹, ATM 기기 등에서 모두 접근이 가능하니까요. 이러한 것이 가능한 이유는 바로 DBMS가 있기 때문입니다.



<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2Fx4EbAMBennaoW9e2iWc1%2FScreenshot_98.png?alt=media&#x26;token=5c8469d1-1abf-408a-b5dd-da0b78e1922f" alt=""><figcaption></figcaption></figure>





## 💾**DBMS의 종류**

**DBMS와 같은 소프트웨어는 특정 목적을 처리하기 위한 프로그램**입니다. 예를 들어 문서를 작성하기 위해서는 아래아한글(HWP)이나 워드(Word), 표 계산을 위해서는 엑셀(Excel)이나 캘크(Calc), 멋진 사진을 편집하려면 포토샵(PhotoShop)이나 김프(Gimp)와 같은 소프트웨어를 설치해야 합니다.

&#x20;

마찬가지로 데이터베이스를 사용하기 위해서도 소프트웨어, 즉 DBMS를 설치해야 하는데 **대표적으로 MySQL, 오라클(Oracle), SQL 서버, MariaDB** 등이 있습니다. 소프트웨어 각각의 사용 방법과 특징이 다르지만 특정 목적을 위해서는 어떤 것을 사용해도 무방합니다.

&#x20;

### 대표적인 DBMS의 특징

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FHPIg4DToqzeL8oCmRgFW%2FScreenshot_99.png?alt=media&#x26;token=5d5f29ac-640e-4a5e-987c-17ef1cb9251c" alt=""><figcaption></figcaption></figure>



<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FboZuezTmn2UUFM4UpcOn%2FScreenshot_100.png?alt=media&#x26;token=a4afe455-9df9-4db9-b4cf-58f07c008235" alt=""><figcaption><p>DB 점유율 순위</p></figcaption></figure>





## 관계형 DB 와 NoSQL

관계형 데이터 베이스는 데이터를 테이블 형태로 저장한다.

쉽게 생각하면 엑셀 표에 데이터를 저장하는 것과 동일하다고 보면된다.

실제로 각 데이터 항목들은 행(row)에 저장되고, 항목의 속성은 열(column)이라고 표현한다. 열은 항목의 속성인 만큼 입력되는 데이터의 유형이 정해진다.



<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FfcbQ30r1S2HC8sdPQryE%2FScreenshot_101.png?alt=media&#x26;token=ca97dcc7-0cab-4ab1-a9b6-a26a789af3d8" alt=""><figcaption></figcaption></figure>



## 용어 정리

#### ➊ 열(column) <a href="#column" id="column"></a>

각각의 열은 유일한 이름을 가지고 있으며, **자신만의 타입(number, string등)을** 가지고 있다.\
열을 필드(field) 또는 속성(attribute)이라고도 한다.

#### ➋ 행(row) <a href="#row" id="row"></a>

행은 관계된 데이터의 묶음을 의미한다.\
한 테이블의 모든 행은 같은 수의 열을 가진다.\
행을 튜플(tuple)이나 레코드(record)라고도 부른다.

#### ➌ 값(value) <a href="#value" id="value"></a>

테이블은 각각의 행과 열에 대응하는 값을 갖는다.\
**이 값은 열의 타입에 맞아야한다.**

#### ➍ 키(key) <a href="#key" id="key"></a>

테이블에서 행의 식별자로 이용되는 열을 (key)또는 기본 키(primary key)라고 한다. 객체의 JS에서 객체의 id와 유사한 역할을 한다.\
즉, 테이블에서 저장된 레코드를 고유하게 식별하는 후보 키(candidate key) 중에서 데이터베이스 설계자가 지정한 속성을 의미한다.

#### ➎ 관계(relationship) <a href="#relationship" id="relationship"></a>

테이블 간의 관계는 관계를 맺는 테이블 수에 다라 다음과 같이 나눌 수 있습니다.

* 일대일 관계
* 일대다 관계
*   다대다 관계

    ✅ 관계형 데이터베이스에서는 이러한 관계를 나타내기 위해 외래 키(foreigh key)라는 것을 사용한다. 외래 키는 한 테이블의 키 중에서 다른 테이블의 행(row)을 식별할 수 있는 키를 의미한다.

#### ➏ 스키마(Schema) <a href="#schema" id="schema"></a>

스키마는 테이블을 디자인하기 위한 청사진 이라고 할 수 있다.\
이러한 스키마는 테이블의 각 열에 대한 항목과 타입뿐만 아니라 기본 키와 외래키도 나타내야 한다.\
스키마는 개체-관계 다이어그램(entity-relationship diagram)이나 문자열로 표현할 수 있다.\
`Reservation(ID, Name, Date, RoomNum)`\


## SQL <a href="#sql" id="sql"></a>

> **Structured Query Language(SQL)**&#xC740; 데이터베이스 언어로, 주로 관계형 데이터베이스에 사용한다. 데이터의 구조가 고정되었있다.\
> 데이터베이스용 프로그램언어인 SQL은 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오고나 삽입할 수 있다. 그리고 SQL은 relation이라고 불리는 데이터가 구조화된 테이블을 사용하는 데이터베이스에서 활용 할 수 있다.\
> SQL을 사용하는 관계형데이터 데이터베이스 예.\
> MySQL, Oracle, SQLite, PostgreSQL등

## NoSQL



> 데이터의 구조가 고정되지 않은 데이터베이스는 테이블을 사용하지 않고 데이터를 다른 형태로 저장한다. &#x20;
>
> Key - Value DB :  redis&#x20;
>
> Graph DB : Amazon Neptune
>
> Docoment DB : mongoDB, CouchDB, Cloud Firesotre
>
> Column-family DB : cassandra, Google Bigtable
>
> Search engine : elastic, CloudSearch
