데이터베이스 스키마

[섬네일|upright=1.32|[미디어위키 1.28.0 데이터베이스 스키마. 많은 FOSS 소프트웨어 도구들이 이와 같은 데이터베이스 레이아웃/스키마 모델링을 지원한다. 시각적 표현은 종종 SQL과 같은 데이터베이스 호환 언어로 작성된 생산 준비가 된 소스 코드로 내보낼 수도 있다.]]
**데이터베이스 스키마**(database schema)는 일반적으로 관계형 데이터베이스 관리 시스템(RDBMS)이 지원하는 형식 언어로 기술된 데이터베이스의 구조를 의미한다. ""라는 용어는 데이터베이스가 구축되는 방식( 관계형 데이터베이스의 경우 데이터베이스 테이블로 분할됨)에 대한 청사진으로서 데이터의 조직화를 일컫는다. 데이터베이스 스키마의 형식적 정의는 데이터베이스에 부과된 무결성 제약 조건이라고 불리는 수식(문장)들의 집합이다. 이러한 무결성 제약 조건은 스키마 부분 간의 호환성을 보장한다. 모든 제약 조건은 동일한 언어로 표현 가능하다. 데이터베이스는 데이터베이스 언어의 실현 구조로 간주될 수 있다. 생성된 개념 스키마의 상태는 명시적 매핑인 데이터베이스 스키마로 변환된다. 이는 현실 세계의 개체들이 데이터베이스에서 어떻게 모델링되는지를 설명한다.

"데이터베이스 스키마는 가능한 애플리케이션에 대한 데이터베이스 관리자의 지식을 바탕으로 데이터베이스에 들어올 수 있는 사실이나 가능한 최종 사용자들이 관심을 가질 만한 사실을 명시한다." 데이터베이스 스키마의 개념은 술어 논리의 이론(theory) 개념과 동일한 역할을 한다. 이 "이론"의 모델은 어느 시점에서든 수학적 대상으로 볼 수 있는 데이터베이스와 밀접하게 대응한다. 따라서 스키마는 특정 애플리케이션을 위한 무결성 제약 조건을 나타내는 공식과 특정 유형의 데이터베이스를 위한 제약 조건을 포함할 수 있으며, 이 모두는 동일한 데이터베이스 언어로 표현된다. 관계형 데이터베이스에서 스키마는 테이블, 필드, 관계, 뷰, 인덱스, 패키지, 저장 프로시저, 함수, 큐, 트리거, 데이터 타입, 시퀀스, 구체화 뷰, 시노님, 데이터베이스 링크, 디렉터리, XML 스키마 및 기타 요소들을 정의한다.

데이터베이스는 일반적으로 스키마를 데이터 사전에 저장한다. 스키마가 텍스트 기반 데이터베이스 언어로 정의되기는 하지만, 이 용어는 데이터베이스 구조의 그래픽 묘사를 가리키는 데 자주 사용된다. 즉, 스키마는 데이터베이스 내의 객체들을 정의하는 데이터베이스의 구조이다.

오라클 데이터베이스 시스템에서 "스키마"라는 용어는 약간 다른 함의를 갖는다.

## 스키마 통합의 이상적인 요구사항
아래 나열된 요구사항은 생성되는 스키마의 세부 구조에 영향을 미친다. 특정 애플리케이션은 이러한 조건을 모두 충족할 필요는 없으나, 이 네 가지 요구사항이 가장 이상적이다.

; 중복 보존 (Overlap preservation)
: 입력 매핑에 명시된 각각의 중복 요소는 데이터베이스 스키마 관계 내에도 존재해야 한다.

; 확장된 중복 보존 (Extended overlap preservation)
: 소스의 중복 요소와 연관된 소스별 요소들은 데이터베이스 스키마로 전달되어야 한다.

; 정규화 (Normalization)
: 소스 데이터의 독립적인 개체와 관계는 데이터베이스 스키마의 동일한 관계 내에 함께 그룹화되어서는 안 된다. 특히, 소스별 스키마 요소들이 독립적인 개체나 관계를 같은 위치에 배치하게 된다면 중복되는 스키마 요소와 그룹화되어서는 안 된다.

; 최소성 (Minimality)
: 데이터베이스 스키마의 요소 중 어느 하나라도 누락되면 그 데이터베이스 스키마는 이상적이지 않다.

## 두 스키마 통합의 예
Go-travel과 Ok-flight라는 두 개의 여행 데이터베이스를 데이터 통합하기 위해 중재된 스키마(mediated schema)를 원한다고 가정하자.

**<code>Go-travel</code>**은 두 개의 관계를 가진다:

```text
Go-flight(flight-number, time, meal(yes/no))
Go-price(flight-number, date, price)
```


**<code>Ok-flight</code>**는 단 하나의 관계를 가진다:

```text
Ok-flight(flight-number, date, time, price, nonstop(yes/no))
```


Go-travel과 Ok-flight 스키마에서 중복되는 정보는 다음과 같이 중재된 스키마로 표현될 수 있다:

```text
Flight(flight-number, date, time, price)
```


## 오라클 데이터베이스의 특수성
오라클 데이터베이스의 맥락에서 **스키마 객체**는 논리적인 데이터 저장 구조이다.

오라클 데이터베이스는 각 데이터베이스 **사용자**와 별도의 스키마를 연관시킨다.
스키마는 스키마 객체들의 집합으로 구성된다. 스키마 객체의 예시는 다음과 같다:

* 테이블
* 뷰
* 시퀀스
* 시노님
* 인덱스
* 클러스터
* 데이터베이스 링크
* 스냅샷
* 저장 프로시저
* 함수
* 패키지

반면, 비스키마 객체(non-schema objects)는 다음을 포함할 수 있다:

* 사용자
* 역할 (Role)
* 컨텍스트 (Context)
* 디렉터리 객체

스키마 객체는 정보를 저장하는 디스크 상의 물리적 파일과 일대일 대응 관계를 갖지 않는다. 그러나 오라클 데이터베이스는 스키마 객체를 데이터베이스의 테이블스페이스 내에 논리적으로 저장한다. 각 객체의 데이터는 물리적으로는 해당 테이블스페이스의 하나 이상의 데이터파일에 포함된다. 일부 객체(테이블, 인덱스, 클러스터 등)의 경우, 데이터베이스 관리자는 오라클 RDBMS가 테이블스페이스의 데이터파일 내에서 해당 객체에 할당할 디스크 공간의 양을 지정할 수 있다.

스키마와 테이블스페이스 사이에 필수적인 관계는 없다. 하나의 테이블스페이스는 서로 다른 스키마의 객체들을 포함할 수 있으며, 단일 스키마의 객체들이 서로 다른 테이블스페이스에 존재할 수도 있다. 그러나 오라클 데이터베이스의 특수성은 균질화되지 않은 시퀀스 차이에 대한 플랫폼 인식을 강제하며, 이는 가상화된 애플리케이션에서 중요한 제한 요인으로 간주된다.

## 마이크로소프트 SQL 서버
마이크로소프트 SQL 서버에서 모든 데이터베이스의 기본 스키마는 dbo 스키마이다.

## 같이 보기
* SQL

## 각주

## 외부 링크
* Tip/Trick: Online Database Schema Samples Library

분류:자료 구조
분류:데이터 관리
분류:데이터 모델링