5 minute read

데이터베이스란?

컴퓨터 시스템에 전자적으로 저장되는 구조화된 정보 또는 데이터의 조직화된 모음.

  • 데이터베이스 관리 시스템(DBMS)에 의해 제어됨.
  • 데이터와 DBMS를 하나로 묶어 데이터베이스 시스템이라고 하며 간략하게 데이터베이스라고도 함.
  • 대부분의 데이터베이스에서 데이터는 처리 및 데이터 쿼리를 효율적으로 수행하기 위하여 테이블에서 행과 열로 모델됨.
  • 데이터를 액세스, 관리, 수정, 업데이트, 제어, 구성하기 위해서 데이터베이스 작성 및 쿼리에 SQL(Structured Query Language)을 사용함.

관계형 데이터베이스(RDBMS)

관계형 DBMS(Relational DBMS)는 줄여서 RDBMS. 대부분의 DBMS가 RDBMS 형태임.

  • RDBMS의 데이터베이스는 테이블(table)이 최소 단위임.
  • 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어져 있음.
  • 테이블의 행은 레코드(record)라고 부르기도 함. 레코드 하나 = 데이터 한 건.하나의 테이블은 적게는 수백개, 많게는 수백만 개의 레코드를 갖게 됨.

RDBMS 종류

RDBMS의 종류는 다음과 같다.

  • Oracle DB
    뛰어난 기술력과 안정성. 주로 은행 업계에서 사용. 유료.
  • MySQL
    오픈 소스. 웹 개발, 특히 PHP를 이용한 개발에 흔히 쓰인다.
  • Maria DB
    오라클이 MySQL을 인수하면서 라이선스 문제가 불확실해지자, 이에 반발하여 만들어짐.
  • PostgreSQL
    버클리 대학의 프로젝트 오픈 소스 ORDBMS. (ORDBMS: 객체-관계형 데이터베이스 관리 시스템)
  • SQL Server
    마이크로소프트가 개발한 RDBMS. 윈도우 시스템 환경 지원.
  • SQLite
    DB를 서버가 아닌 파일로 저장하는 DBMS이다. 가벼운 DB를 저장하는 목적으로 설계됨. 안드로이드, iOS, mac OS에서 사용됨.

RDBMS 언어(SQL)

RDMBS의 언어는 SQL 이다.

  • SQL(structured query language / 구조적 질의 언어)
  • 데이터를 쿼리, 조작 및 정의하고 액세스 제어를 제공하기 위해 거의 모든 관계형 데이터베이스에서 사용되는 프로그래밍 언어.
  • SQL은 1970년대에 IBM에서 처음 개발.
  • IBM, Oracle, Microsoft에서 확장 프로젝트를 진행하였음.

스키마(Schema)란?

데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술,정의한 것

  • 데이터베이스 스키마(database schema)는 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조.
  • 데이터베이스 DBMS이 주어진 설정에 따라 데이터베이스 스키마를 생성함.
  • 데이터베이스 사용자가 자료를 저장, 조회, 삭제, 변경할 때 DBMS는 자신이 생성한 데이터베이스 스키마를 참조하여 명령을 수행함.
  • 스키마는 데이터베이스를 구성하는 데이터 개체의 전반적인 명세(Specification)를 기술(Description)하는 메타데이터(MetaData)의 집합.
  • 데이터 개체를 구성하고 있는 속성들에 데이터 타입이 정의되어 구체적인 데이터 값을 갖고 있는 것.스키마는 3층 구조임.

참고
오라클 시스템 정보를 갖고 있는 데이터 딕셔너리들 대부분은 소유자가 SYS였다. 따라서 데이터 딕셔너리들은 SYS 스키마라고 할 수 있는 것이다.

스키마(Schema) 3계층

image
image

외부스키마

전체 데이터 중 사용자가 사용하는 한 부분에서 본 논리적 구조

  • 개인의 입장, ‘서브스키마’라고도 한다,
  • 사용자 뷰를 가리킨다. 
  • 하나의 외부스키마는 여럿이 공유 가능하며, 하나의 DB시스템에 여러 개의 외부스키마가 존재 가능 개인의 입장, ‘서브스키마’라고도 한다, 사용자 뷰를 가리킨다. 

개념스키마

사용자관점 데이터 베이스의 전체를 정의한 것으로 데이터 개체, 관계, 제약조건, 접근권한, 무결성 규칙등을 명세한 것

  • 조직 전체의 입장, 전체적인 뷰를 가리킨다.
  • 개체간의 관계와 제약조건을 나타내고,  데이터베이스의 접근권한/보안/무결성 규칙에 대한 명세를 정의함

참고
일반적으로 ‘스키마’라는 내부스키마를 가리킴, 내부스키마는 DBA가 만듦, 데이터베이스의 전체적인 구조로써 하나만 존재해야 함

내부스키마

기계적관점 저장장치의 입장에서 데이터베이스 전체가 저장되는 방법을 명세한 것

  • 단 하나만 존재하는 스키마
  • 시스템 프로그래머나 설계자의 관점에서 바라보는 스키마
  • 데이터베이스의 물리적 구조를 가리킴(= 실제 저장방법을 기술하는 물리적인 저장장치와 관련됨)

데이터베이스와 스키마 차이점

일반적인 데이터베이스의 4계층 구조는 다음과 같다.

image

  • 데이터베이스
    오라클의 경우 작동하는데 필요한 모든 파일을 의미합니다.
  • 인스턴스
    DBMS가 동작할 때의 단위, OS 입장에서는 ‘프로세스’, DBMS에 따라서는 ‘서버 프로세스’ 또는 ‘서버’로 부르기도 합니다. 앞서 말한 데이터베이스가 실행 가능하게 메모리에 올라가 있는 걸 생각하시면 됩니다.
  • 스키마
    데이터베이스의 구조와 제약 조건을 정의한 것, 쉽게는 폴더에 해당하며 스키마도 폴더처럼 사용자가 자유롭게 만들 수 있고, 사용자에 따라 접근을 제한하는 등의 권한 관리가 가능합니다. 폴더이기 떄문에 폴더에 여러 파일을 넣을 수 있는것 처럼 여러 테이블을 담을 수 있습니다.
  • 테이블
    기본적인 데이터베이스의 구조로 4계층으로 되어 있습니다. 트리 구조로 1개의 인스턴스 아래에는 복수 개의 데이터베이스가 존재할 수 있고, 1개의 데이터베이스의 아래에는 복수의 스키마가 존재할 수 있으며, 1개의 스키마 아래에는 복수 개의 테이블이 존재하는 것이 가능합니다.

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

MySQL 에서 차이점

image

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

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

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

Oracle 에서 차이점

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

공식적인 표준구조

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

오라클에서 스키마란?

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

  • 하나의 스키마는 데이터베이스 사용자에의해 소유합니다.
  • 스키마 이름은 그 사용자(user)의 이름과 같으므로 스키마(schema) ≒ 오너(owner) 이다.

스키마 객체(object)란?
테이블, 뷰, 인덱스와 같은 구조를 포함하는 논리적인 데이터 저장 구조를 가진 객체

정리
Orable, DB2 나 다른 엔터프라이즈 급 DB에서는 차이가 있습니다. 보통 schema는 tables의 집합이고 database는 schemas의 집합입니다.

Mysql/MariaDB에서 스키마란?

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

PostgreSQL에서 스키마란?

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

MSSQL(SQL Server)에서 스키마란?

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

테이블과 스키마 차이점

데이터베이스 스키마는 데이터베이스 시스템에서 데이터의 구조와 구성을 설명하는 반면 테이블은 데이터가 세로 열과 가로 행 집합으로 구성된 데이터 집합입니다. 데이터베이스 스키마는 데이터베이스의 테이블, 열 및 해당 유형을 정의합니다. 또한 스키마는 테이블의 기본 키로 정의되는 열도 정의합니다. 당연히 데이터베이스의 스키마는 생성 된 후에는 일정하게 유지되지만 데이터베이스 테이블의 실제 데이터는 항상 변경 될 수 있습니다.

오라클

오라클 테이블스페이스

오라클에서는 DB구조가 좀 더 세부적으로 나뉘어진다고 보면 된다. MS SQL 에서는 그냥 DB, 테이블 이 정도로 단순화 되어 있지만  오라클에서 말하는 DB는 테이블 스페이스, 테이블 뿐만 아니라 로그 파일들, 컨트롤 파일 등등 여러 다양한 객체들을 다 포함해서 관리하는 영역이고 테이블 스페이스 는 데이터가 저장되는 테이블을  한 파일로 관리하는 거라고 보시면 됩니다.  

오라클 SID 와 Service name 의 차이

오라클 데이터베이스를 운영하면서 SID와 Service name은 거의 구분하지 않고 사용해 왔습니다. 보통 일반적인 테스트 환경이나 소규모 사이트의 경우 데이타베이스가 하나만으로 구성되어 있고 이런 경우라면 SID와 service name을 구분할 필요가 없기 때문에 데이터베이스 이름(service name)이 SID가 됩니다.
하지만 RAC 로 구성하여 데이타베이스 두개가 동시 가동되는 경우라면  이 SID 가 서로 다를 수 있기 때문에 개념을 인지하고 중복 확인을 진행 하는게 좋을 것 같습니다.

참고
Service name이 더 큰 개념으로 SID 2개를 합쳐서 Service name으로 서비스가 가능합니다.

Leave a comment