스키마(Schema)란 무엇인가?
Database를 공부하다 보면 쉽게 발견할 수 있는 용어 스키마. 스키마의 종류에는 무엇이 있는지 한 번 살펴보자
먼저 스키마란?
: 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것을 말한다.
좀 더 자세하게 말하자면,
개체의 특성을 나타내는 속성(Attribute)
속상들의 집합으로 이루어진 개체(Entity)
개체 사이에 존재하는 관계(Relation)에 대한 정의와 이 것들이 유지해야 할 제약조건을 기술한 것이 바로 스키마다.
즉, 데이터베이스 내에 어떤 구조로 데이터가 저장되는지를 나타내는 데이터베이스 구조를 스키마라고 칭한다.
스키마의 특징으로
1) 스키마는 데이터 사전(Data Dictionary)에 저장된다.
※ 데이터 사전: 시스템 전체에서 나타나는 데이터 항목들에 대한 정보를 지정한 중앙 저장소로, 이 정보에는 항목을 참조하는 데 사용되는 식별자, 항목에 대한 엔티티의 구성요소, 항목이 저장되는 곳, 항목을 참조하는 곳 등을 포함한다.
2) 현실 세계의 특정한 부분의 표현으로서 특정 데이터 모델을 이용해서 만들어지게 됨
3) 시간에 따라 불변인 특성을 가짐
4) 데이터의 구조적 특성을 의미
5) 인스턴스에 의해 규정
이러한 스키마는 사용자의 관점에 따라 외부/개념/내부 스키마로 구분하게 됨.
1) 개념 스키마 = 전체적인 뷰
: 조직체 전체를 관리하는 입장에서 DB를 정의한 것
따라서 조직의 모든 응용시스템에서 필요로 하는 개체 관계, 그리고 제약조건들을 포함하고 있게 됨. DB를 효율적으로 관리하는데 필요한 접근권한, 보안정책, 무결성 규칙 등에 관한 사항들도 추가적으로 포함됨.
따라서 개념 스키마를 "스키마"라고 부르기도 하며, DB 전체를 기술한 것이기 때문에 1개밖에 존재할 수 없음.
개념 스키마의 특징
- 데이터 베이스의 전체적인 논리적 구조
- 데이터 베이스에 실제로 어떤 데이터가 저장되었으며 데이터 간의 관계는 어떻게 되는가
- 모든 응용프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스
- 개체 간의 관계와 제약조건 명시
- 데이터베이스의 접근 권한 보안 및 무결성 규칙에 관한 명세를 정의
- 단순한 스키마라고 하면 개념 스키마를 의미
- 기관이나 조직체의 관점에서 데이터베이스를 정의
- 데이터베이스 관리자(DBA)에 의해 구성
* 데이터 베이 스당 하나만 존재
2) 내부 스키마
: 물리적인 저장장치 입장에서 DB가 저장되는 방법을 기술한 것
구체적으로 개념 스키마를 디스크 기억장치에 물리적으로 구현하기 위한 방법을 기술한 것으로서 주된 내용은 실제로 저장될 내부 레코드 형식, 내부 레코드의 물리적 순서, 인덱스의 유/무 등에 관한 것
그러나 DB는 내부 스키마에 의해서 곧바로 구현되는 것이 아니라 내부 스키마에 기술한 내용에 따라 운영체제의 파일 시스템에 의해 물리적 저장장치에 기록됨.
실무적으로 내부 스키마에 의해 DB의 실행 속도가 결정적으로 영향을 받기 때문에 DB의 구축 목적에 따라 내부 스키마를 결정해야 할 필요가 있음.
내부 스키마의 특징
- 데이터 베이스의 물리적 저장구조를 정의
- 디스크에는 어떤 구조로 저장할 것인가
- 데이터의 실제 저장방법을 기술
- 물리적인 저장장치와 밀접한 계층
- 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마
3) 외부 스키마 = 서브 스키마 - 사용자 뷰
: 사용자나 응용 프로그래머가 개인의 입장에서 필요한 데이터베이스의 논리적 구조를 정의
외부 스키마의 특징
- 실세계에 존재하는 데이터들을 어떤 형식, 구조, 배치 화면을 통해 사용자에게 보여줄 것인가
- 전체 데이터 베이스의 한 논리저 부분 -> 서브 스키마
- 하나의 데이터베이스에는 여러 개의 외부 스키마가 존재 가능 & 하나의 외부 스키마를 여러 개의 응용프로그램이나 사용자가 공용 가능
- 같은 데이터베이스에 대해서도 서로 다른 관점을 정의할 수 있도록 허용
- 일반 사용자는 질의어를 이용 DB를 쉽게 이용
'Database' 카테고리의 다른 글
[SQL] 각 DB별 Like 검색 방법 (0) | 2021.05.28 |
---|---|
[MariaDB] 시퀀스 초기화 및 재정렬 (0) | 2021.05.28 |
[PostgreSQL] 좌표값 변환하는 방법 (0) | 2021.04.28 |
정규화와 반정규화 (0) | 2020.10.29 |
Oracle SQL (0) | 2020.04.19 |