🗄

Data Models, Schemas, Instances


Data Model?

데이터 모델은 현실 세계의 정보들을 컴퓨터에 표현하기 위해서 데이터를 단순화, 추상화하여 체계적으로 표현한 개념적 모델이다. 데이터의 구조, 연산, 제약조건 등을 기술하기 위한 도구라고 볼 수 있다.

쉽게 말하면 데이터를 표현하는 방법이다.

종류

  • Conceptual data models(High-level, semantic):

    데이터를 현실 세계와 가깝게 인식할 수 있게 해주는 추상적 개념(entity, attribute, relationship 등)을 제공한다.

  • Physical data models(Low-level, internal):

    데이터가 실제로 컴퓨터의 저장매체(HDD, RAM, SDD 등)에 어떻게 저장되는지에 대한 개념을 제공한다.

  • Implementation data models(Logical):

    위에 나온 양극단 데이터 모델의 중간 개념을 제공한다. 개념 데이터 모델을 상세화하여 논리적인 데이터 집합, 관리 항목, 관계를 정의한 모델이다.

  • Self-describing models:

    데이터에 대한 설명과 실제 데이터 값을 합쳐놓은 모델이다. MongoDB와 같은 noSQL 시스템에서 볼 수 있다.


Schema?

DB가 어떻게 생겼는지에 대한 설명이다. 'Intension' 혹은 'meta-data'라고도 부른다.

데이터베이스의 구조, 데이터의 타입, 제약 조건 등의 정보를 가지고 있어 DB를 설명할 수 있다. DBMS의 catalog에 저장되어있다.

Schema construct: 스키마의 구성요소

Three-Schema Architecture

이전 글에서 언급했던 DB의 특성 중 1~3번을 지원하기 위한 접근방식이다.

DB 시스템 구조를 설명할 때 유용하다. 유저 응용 프로그램과 물리적인 데이터베이스를 분리하는 것이 목표다.

db3계층

  • Internal(physical) Schema

    물리적인 저장소 구조와 접근 경로를 설명한다. 보통 physical data model을 사용한다.

  • Conceptual(logical) Schema

    데이터베이스의 구조와 제약 조건을 설명한다. 물리적인 저장소 구조를 감추고 데이터 베이스의 구조를 설명하는 것에 집중한다.
    Conceptual data model(e.g. ER) 혹은 Logical data model(e.g. relational)을 사용한다.

  • External(view level) Schema

    다양한 유저 뷰를 정의한다. 사용자나 응용프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것이다. 각 external schema는 유저가 관심있는 데이터베이스의 특정 부분만 설명하고 나머지 부분은 숨긴다.
    보통 conceptual schema에서 사용한 것과 동일한 데이터 모델을 사용한다.

스키마 레벨간 매핑을 통해 '요청'과 '데이터'를 변환한다. 유저가 external view를 통해 데이터를 요청하면, 그 요청은 conceptual schema를 거치고 internal schema를 거쳐서 실제 데이터에 접근하게 된다.

스키마 레벨을 나누게 되면 스키마가 'tightly coupled' 되는 것을 방지할 수 있어 확장성을 높일 수 있다.

Conceptual/Internal 스키마를 명시하거나 어떤 두 스키마 사이의 매핑을 명시할 때 DDL(Data Definition Language)를 사용한다.

Data Independence

  • Logical data independence:

    External schema를 건드리지 않고 conceptual schema를 변경할 수 있는 능력.

  • Physical data independence:

    Conceptual schema를 건드리지 않고 internal schema를 변경할 수 있는 능력.

DBMS가 data independence를 지원하면, 하위 레벨의 스키마가 변경됐을 때 상위 레벨의 스키마와 간의 매핑만 변경되면 된다. 상위 스키마 자체는 변경되는 것이 없다.


Instance?

어느 한 시점에 데이터베이스의 상태, 즉, 저장되어 있는 실제 정보를 뜻한다.

'Database state' 혹은 'snapshot'이라고도 부른다.