# 02강. 다양한 데이터베이스 - `DBMS`에는 여러 종류가 있다. 데이터베이스의 사용 용도나 이를 제어하는 프로그래밍 환경 등 각각의 조건에 들어맞는 다양한 `DBMS`가 고안되었기 때문이다. - 데이터베이스 중에서도 `SQL`로 데이터를 다루는 데이터베이스를 `관계형 데이터베이스(RDB: Relational Database)`라고 한다. --- ## 1. 데이터베이스 종류 - `DBMS`는 데이터 저장 방법에 따라 몇 가지로 분류할 수 있다. ### 계층형 데이터베이스 - 폴더와 파일 등의 계층 구조로 데이터를 저장하는 방식의 데이터베이스이다. - 하드디스크나 DVD 파일시스템을 이러한 계층형 데이터베이스라고 할 수 있다. - 하지만 현재 `DBMS`로 채택되는 경우는 많지 않다. ### 관계형 데이터베이스 - `관계 대수(relational algebra)`라는 것에 착안하여 고안한 데이터베이스이다. - 쉽게 말하면 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가리킨다. - 다만, 엄밀히 말해 관계 대수는 표 형식 데이터와는 아무런 관계가 없다. - 표형식 데이터란 2차원 데이터를 말한다. - 가로 방향으로는 `열`을, 세로 방향으로는 `행`을 나열한다. - 관계형 데이터베이스에는 이러한 표를 잔뜩 저장해두고, 각각의 표에 이름을 붙여 관리한다. 이때 데이터베이스 안의 데이터는 `SQL` 명령어로 조작할 수 있다. ### 객체지향 데이터베이스 - `자바`나 `C++`를 객체지향 언어라고 하는데, `객체(object)`라는 것을 중심으로 프로그래밍하는 언어이다. - 여기서 `가능하면 객체 그대로를 데이터베이스의 데이터로 저장하는 것`이 객체지향 데이터베이스이다. ### XML 데이터베이스 - `XML`이란 자료 형식을 가리키는 용어로, 태그를 이용해 마크업 문서를 작성할 수 있게 정의한 것이다. 태그는 `데이터`와 같은 형식으로 표현한다. - `XML` 데이터베이스는 이처럼 `XML` 형식으로 기록된 데이터를 저장하는 데이터베이스이다. - `XML` 데이터베이스에서는 `SQL` 명령을 사용할 수 없다. 대신 `XML` 데이터를 검색할 때는 `XQuery`라는 전용 명령어를 사용한다. ### 키-밸류 스토어(KVS) - 키와 그에 대응하는 값(밸류)이라는 단순한 형태의 데이터를 저장하는 데이터베이스이다. - 키와 밸류의 조합은 `연상배열`이나 해시 테이블(hash table)에서 자주 볼 수 있다. - `NoSQL(Not only SQL)`이라는 슬로건으로부터 생겨난 데이터베이스로, 열 지향 데이터베이스라고도 불린다. ``` 연상배열(associative array): 자료구조의 하나로, 키 하나와 값 하나가 연관되어 있으며 키를 통해 연관되는 값을 얻을 수 있다. 연상 배열, 결합성 배열, 맵(map), 딕셔너리(dictionary)로 부르기도 한다. ``` --- ## 2. RDBMS 사용 시스템 - `RDBMS`는 역사가 깊은 만큼 다양한 시스템에서 사용된다. - `메인프레임(main frame)`은 대부분 `RDBMS`를 사용한다고 봐도 무방하다. - 다만, 최근에는 메인프레임 자체를 찾아보기가 어려워졌다. 다운사이징으로 인해 `소형 워크스테이션(workstation)`으로 대체되었기 때문이다. - 그래도 여전히 데이터베이스 서버로는 `RDBMS`가 사용되었는데, 이때부터 클라이언트/서버 구조도 유행했다. --- ## 3. 데이터베이스 제품 - `RDBMS`는 관계형 데이터베이스를 관리하는 소프트웨어를 일컫는 말이다. 다만 `RDBMS`라는 이름의 소프트웨어가 존재한다는 뜻은 아니다. ### Oracle - `Oracle` 데이터베이스는 오라클에서 개발한 `RDBMS`이다. - 현재 가장 많이 쓰이는 `RDBMS` 중 하나로, 사실상 `RDBMS`의 표준이라고 해도 문제없을 정도로 유명하다. ### DB2 - `IBM`이 개발한 `DB2`는 `Oracle`처럼 역사가 오래된 `RDBMS`이다. - 다만 오라클이 유닉스 워크스테이션 중심이었던 것과 달리, `DB2`는 발표된 이래 한동안 `IBM` 컴퓨터에서만 구동되었다. - 이후 유닉스나 윈도우 등의 플랫폼에서도 `DB2`를 구동할 수 있게 되었다. ### SQL Server - `SQL Server`는 윈도우를 개발한 마이크로소프트가 개발한 `RDBMS`로, 윈도우 플랫폼에서만 동작한다. ### PostgreSQL - `PostgreSQL`은 오픈소스 커뮤니티가 개발한 `RDBMS`이다. 무료 소프트웨어인 만큼 자유롭게 사용이 가능하다. - 기반이 되는 `RDBMS`는 캘리포니아 대학교 버클리 캠퍼스에서 탄생했는데, 그 때문인지는 몰라도 실험적인 기능이 포함되어 있거나 독특한 구로를 가지기도 한다. ### MySQL - `MySQL`은 `PostgreSQL`과 마찬가지로 오픈소스 커뮤니티에서 태어난 `RDBMS`이다. - 경량 데이터베이스라는 점을 강조하여, 필요한 최소한의 기능만을 갖추고 있다. - 하지만 기능이 확장되면서 지금은 다른 `RDBMS`와 비교해도 부족하지 않을 정도이다. ### SQLite - 오픈소스 커뮤니티에서 태어난 `SQLite`는 임베디드 시스템에 자주 쓰이는 작은 `RDBMS`이다. --- ## 4. SQL의 방언과 표준화 - `RDBMS`는 처음부터 `SQL` 명령어를 이용해 데이터베이스를 조작하도록 설계된만큼, `SQL`을 사용할 수 없는 `RDBMS`는 없다. - 하지만 각 데이터베이스 제품 별로 기능 확장이 이루어지는 과정에서 `비슷한 조작을 실행하더라도 서로 다른 명령어가 필요한` 상황이 발생했다. - 즉 특정 데이터베이스 제품에만 통용되는 `고유 방언`이 생겨나게 되었다. - 고유 방언의 간단한 사례로 `키워드 생략`을 들 수 있다. - 데이터를 삭제할 때는 `DELETE` 명령어를 사용하는데, `Oracle`이나 `SQL Server`에서는 `DELETE` 뒤에 붙는 `FROM`을 생략해도 별 다른 문제가 없다. 그에 비해 `DB2`나 `PostgreSQL`, `MySQL`에서는 `FROM`을 생략할 경우 구문 에러가 발생해서 실행되지 않는다. - 다른 대표적인 방언의 사례로 `외부결합`을 들 수 있다. - `Oracle`에서는 `(+)`라는 특별한 연산자를 이용해 외부결합조건을 저장하는 데 비해, `SQL Server`에서는 `*=` 연산자를 이용한다. - 이와 같은 방언들 없애기 위해 `ISO`나 `ANSI`가 결정한 `SQL-92`, `SQL-99`, `SQL-2003`등이 바로 `표준 SQL`이고, 여기서 숫자는 책정된 해를 나타낸다. - 표준 SQL로 외부결합을 하는 방법은 `LEFT JOIN`이다. ##### SQL에는 방언이 있다! 방언 대신 표준 SQL을 사용하는 편이 좋다! ---