스키마? 데이터베이스?

MySQL에서 스키마와 데이터베이스가 어떻게 다른지 보기 전에 먼저 일반적인 데이터베이스의 4계층 구조를 보도록 하겠습니다.
(정확한 지식이 아닌 전체적인 그림을 봅니다.)

base

  • 데이터베이스 : 오라클의 경우 작동하는데 필요한 모든 파일을 의미합니다.

  • 인스턴스 : DBMS가 동작할 때의 단위, OS 입장에서는 ‘프로세스’, DBMS에 따라서는 ‘서버 프로세스’ 또는 ‘서버’로 부르기도 합니다. 앞서 말한 데이터베이스가 실행 가능하게 메모리에 올라가 있는 걸 생각하시면 됩니다.

  • 스키마 : 데이터베이스의 구조와 제약 조건을 정의한 것, 쉽게는 폴더에 해당하며 스키마도 폴더처럼 사용자가 자유롭게 만들 수 있고, 사용자에 따라 접근을 제한하는 등의 권한 관리가 가능합니다. 폴더이기 떄문에 폴더에 여러 파일을 넣을 수 있는것 처럼 여러 테이블을 담을 수 있습니다.

  • 테이블

기본적인 데이터베이스의 구조로 4계층으로 되어 있습니다.
트리 구조로 1개의 인스턴스 아래에는 복수 개의 데이터베이스가 존재할 수 있고, 1개의 데이터베이스의 아래에는 복수의 스키마가 존재할 수 있으며, 1개의 스키마 아래에는 복수 개의 테이블이 존재하는 것이 가능합니다.

사실 최하위 계층인 4계층에는 테이블 이외에도 인덱스, 프로시저 등이 존재합니다. 이런 데이터베이스에 보존된 것들을 오브젝트라고 합니다. (테이블 또한 오브젝트의 일종입니다)

MySQL의 경우

mysql

위의 그림에서 알 수 있다시피 3계층 구조로 데이터베이스가 존재하지 않습니다. 실제로도 데이터베이스와 스키마를 동의어로 취급합니다.(MySQL 메뉴얼
그렇기 때문에 MySQL의 경우 사람의 따라 스키마를 데이터베이스라고 부르는 경우들이 있는데 더 이상 혼동을 하실 필요 없이 같은 걸 의미한다고 생각하시면 됩니다.

CREATE SCHEMA test DEFAULT CHARACTER SET utf8;
CREATE DATABASE test DEFAULT CHARACTER SET utf8;

실제로도 두 명령어가 동일한 결과를 냅니다.

오라클(Oracle)의 경우

oracle

4계층 구조를 잘 따르는 것처럼 보이지만 사실 오라클의 경우 인스턴스 아래에 데이터베이스를 한 개만 만들 수 있다는 독자적 제약이 있습니다.
하나의 데이터베이스 밖엔 없기 때문에 인스턴스 바로 아래에 스키마 층이 존재하는 듯한 인상을 받기도 합니다.

3계층, 4계층 무엇이 맞을까?

ANSI가 정한 표준 SQL로 결정된 건 3계층이 아닌 4계층입니다. 하지만 양쪽 다 잘 되어 있기 때문에 어느 쪽이 좋은가 나쁜가란 문제는 없다고 생각하시면 됩니다. 다만 오라클이나 MySQL이 아닌 DBMS이 다른 계층 구조를 가지고 있다는 점을 유념해야지 여러 DBMS를 이용할 때 혼란 없이 사용할 수 있을 겁니다.


출처 : 데이터베이스 첫걸음