DBMS별 Schema(스키마)와 Database(데이터베이스)의 차이점

문준일·2025년 1월 18일
0

MySQL을 통해 데이터 관리를 하다보면 누구는 스키마라고 말하고 또 누구는 데이터베이스라고 부르는 경우가 있다. 어떤 표현이 맞을까?

우선 일반적인 데이터베이스의 4계층 구조를 보자.

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

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

MySQL


위의 그림에서 알 수 있다시피 3계층 구조로, 데이터베이스가 존재하지 않는다. MySQL 메뉴얼에서도 데이터베이스와 스키마를 동의어로 취급한다.
그렇기 때문에 MySQL의 경우 사람에 따라 스키마를 데이터베이스로 부르는 경우가 있는데 같은 걸 의미한다고 생각하면 된다.

Oracle


4계층 구조를 가진 것처럼 보이지만 오라클의 경우 인스턴스 아래에 데이터베이스를 한 개만 만들 수 있다는 독자적 제약이 있다.

그럼 DBMS별로 의미가 어떻게 될까?

Oracle

오라클에서 스키마는 사용자(USER)가 생성한 모든 오브젝트(테이블, 인덱스, 프로시저 등)를 의미한다. 사용자와 스키마가 같다고 보는 사람도 있는데, 엄밀히 말해서 다르다고 봐야한다. 그래서 스키마에 각각의 사용자에게 선택적인 권한을 준다. 오라클에서 데이터베이스는 실제 물리적인 데이터베이스를 의미한다.

MySQL, MariaDB

데이터베이스와 스키마가 같은 의미로 테이블 등의 오브젝트 집합이다.

PostgreSQL

Mysql의 데이터베이스가 PostgreSQL의 스키마이다. 데이터베이스는 스키마의 상위 개념이다.
그래서 PostgreSQL는 Mysql과 다르게 데이터베이스가 다르면 완전히 물리적인 분리로 보게 된다. 그래서 dblink가 아닌 일반적으로는 다른 데이터베이스의 테이블을 조회 및 조인 등을 할 수 없다. 다른 스키마끼리는 가능하다.

MSSQL

MSSQL도 스키마가 데이터베이스의 하위에 속한다. PostgreSQL과 차이는 같은 서버의 데이터베이스를 완전히 분리하지 않는다. 그래서 다른 데이터베이스의 테이블을 조회 및 조인 가능하다.
SELECT * FROM DB명.스키마명.테이블명

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

ANSI가 정한 표준 SQL로 결정된 건 3계층이 아닌 4계층이다. 하지만 어느 쪽이 좋은가 나쁜가의 문제는 없다고 생각하면 된다.

profile
하나씩 실천하는 개발자

0개의 댓글