본문 바로가기

CS/데이터베이스

[데이터베이스 02] 데이터베이스 시스템

Data Model

 데이터 모델은 다음 3가지 요소를 기반으로 데이터를 추상적으로 정의한 모델 혹은 개념의 집합으로, 데이터베이스에 대해 정의되는 일종의 ADT(Abstract Data Type) 이라고 볼 수 있다.

  • Structure : 데이터에 대한 추상적인 구조 를 정의한다. 
    ex ) 스택은 선입선출 기반의 구조를 가진다.
    • Entity ( = Record , Table ) : 데이터베이스의 각 엘리먼트 혹은 엘리먼트 그룹을 설명할 때 사용된다.
      ex ) STUDENT, LECTURE
      • Entity 개별적 개체를 설명할 때 주로 사용되며 ( 학생 홍길동 ) ,
        집합( 학생 ) 을 의미할 때는 Entity type 또는 Set table 등의 표현을 이용한다.
    • Relationship : 해당 엔티티 사이에서 발생하는 관계를 기술한다. 
      ex) [학생] 은 [수업] 을 [수강한다]. : 학생, 수업 이라는 엔티티 타입 사이에는 [수강한다]는 관계가 있다.
  • Operation : Structure를 조작하는데 사용되는 추상적인 동작들로, 실제 구현은 포함되지 않는다
    ex ) 스택의 선입선출 동작에는 push, pop, top, isempty 등이 있다. Data Model 선에서는 이들의 동작 방식 ( 상세한 코드 ) 을 구체적으로 설명하는 대신, 대략 어떤 동작인지에 대해 묘사한다.
    • 예시) push
      : (구체적) headIdx = headIdx + 1; input  = stack[headIdx] ; ....
      : (추상적) 스택 맨 앞에 새로운 요소를 삽입한다.
    • 데이터베이스의 construct을 참조, 해당 데이터베이스를 탐색(retrieval) · 갱신(update) 하는데 사용된다.
    • 기본 모델 동작 (INSERT, DELETE, UPDATE ... ) 및 사용자 정의 동작 ( mile_to_km ... ) 을 포함할 수 있다.
  • Constraint : 데이터베이스가 따라야 하는 조건(제약 조건) 이다. 정확한 데이터가 무엇인지 명시할 때 사용되며, 데이터베이스 내 모든 데이터는 자신에게 가해진 제약조건을 항상 따라야 한다.
    ex) 스택의 모든 값에 대해 한쪽 에서만 삽입 및 삭제가 발생해야 한다.

 

Categories of Data Models

데이터 모델을 기술하는 방식을 나타낸다.

  • Conceptual ( high-level, semantic ) data models : 인간의 생각과 유사한 방식으로 데이터를 기술하는 방법으로, ER 모델이나 OO 모델 등으로 나타낼 수 있다.
  • Implementation ( representational, Logical ) data models : 두가지 방식의 모델 기술 방법을 연결해주는 방법으로, 사람과 컴퓨터 사이 중간에 위치한다. 많은 DBMS에서 지원한다.
  • Physical ( low-level, internal ) data models : 데이터가 컴퓨터에 저장되는 방식을 나타내는 모델로, 데이터 자체가 어떠한 방식으로 컴퓨터에 저장되는지에 대해 기술한다.
  • Self-Describing data models : XML, key-value 방식의 데이터베이스처럼, 스키마(메타데이터)가 일반적인 데이터와 함께 존재하여, 자기 자신만으로도 데이터 값을 설명할 수 있는 모델이다. NOSQL 계열에서 사용한다.

SCHEMA & Instance

  • Database SCHEMA : 데이터베이스에 대한 설계 명세서 혹은 정의로, 데이터베이스에 대한 Structure, Data types, constraints 등이 조합되어 데이터베이스에 대해 설명한다.
    매우 드물게 변경되며, intension이라 불리기도 한다.
    • SCHEMA Diagram : 데이터베이스 스키마를 다이어그램 형태로 표현하는 것. 엔티티 타입, 데이터, 제약조건만을 표현하고, 해당 데이터의 타입이나 데이터 사이 관계 등은 표현하지 않는다. 이 정의는 사람에 따라 다를 수 있으며, 오라클에서는 데이터 사이 관계를 표현한다. 요점은 스키마를 이해하기 쉽게 표현하는데 있다.
    • SCHEMA Construct : 스키마의 컴포넌트 혹은 스키마에 대한 오브젝트. ex) STUDENT, COURSE

  • Database State : 데이터베이스에 저장된 실제 데이터로, 계속하여 변경된다는 특징이 있다.
    데이터베이스가 업데이트 되는 순간마다 변경된다는 특성에 의해 extension이라고 불리기도 한다.
    • Database Instance, occurence, snapshot 등으로 불리기도 하는데,
      Instance라는 표현은 생성된 각각의 컴포넌트 ( 학생 홍길동 ) 에 주로 사용되고,
      나머지는 집합적인 의미로 사용된다고 한다 ( "학생" 들 ) .
    • 어느 한 순간의 데이터베이스 값들의 집합으로, 항상 스키마(정의) 에 따라 valid 한 데이터를 가져야 한다.
      • Valid하다는 의미 : State가 데이터베이스의 Structure 및 Constraints을 만족한다.

Three-Schema Architecture

 

  • Internal/Physical Schema : 물리적 저장 구조나 경로를 설명하는 수준의 스키마이다. 주로 컴퓨터에 데이터가 저장된 구조나 인덱스 등을 설명하는데 사용되며 Physical Data Model 을 이용한다.
  • Logical/Conceptual Schema : 데이터베이스 전체에 대한 Structure이나 Constraint을 설명하는 수준의 스키마이다.
  • External Schema : 전체 데이터베이스에 대해 일부만을 View 의 형태로 노출시키는 방식의 스키마로, 사용자 혹은 어플리케이션에 가깝다는 특징이 있다. 주로 Conceptual Data Model 을 이용한다.
  • Mapping : 한 계층의 데이터를 요청된 다른 계층의 데이터로 변환해주는 프로그램 혹은 시스템.
     우리가 데이터베이스 내에 저장된 "학생" 이라는 데이터를 요청한다고 생각해보자. 우리는 External Level에서 학생을 요청했지만, Conceptual/Logical Level에서는 모든 데이터에 대한 스키마 구조를 가지고 있으므로, 특정 데이터만을 얻기 위해 각 데이터들을 연결해주는 "매핑" 이 필요하다. 마찬가지로 Physical Level에 존재하는 데이터를 Logical Level로 끌어올리기 위해서는 각 데이터를 Logical 수준으로 배치해주어야 하므로 "매핑"이 필요하게 된다.

 

Data Independence : 데이터 독립성

 3개 계층 사이에 독립성이 존재하므로, 특정 계층이 변경된다고 하더라도 다른 계층에 영향을 주지 않는 것. 특정 계층이 변경될 때는 해당 계층의 하위 레벨은 영항을 받고, 상위 레벨은 관련된 매핑이 변경된다.

 계층 사이에 존재하는 독립성 덕분에 하나의 계층에서의 변경사항이 전체 프로그램에 영항을 주지 않으므로, 성능적인 면에서 큰 영향을 주게 된다.

  • Logical Data Independence : External Schema 및 Conceptual Schema 사이에 존재하는 독립성. 따라서 실제 어플리케이션이나 View를 위한 스키마를 변경할 필요 없이 Conceptual Schema를 변경할 수 있다. 
  • Physical Data Independence : Conceptual Schema 및 Internal Schema 사이에 존재하는 독립성. 파일 구조나 인덱스를 변경하더라도 Conceptual 수준의 논리 구조는 변경할 필요가 없으며, 변경에 대응되는 매핑만이 수정된다.

DBMS 언어

용도에 따라 DBMS 에서 사용되는 언어를 구분할 수 있다. 현재 해당 언어들은 대부분 SQL에 의해 처리된다.

  • DDL(Data Definition Language) : 데이터베이스 객체를 정의할 때 사용되는 언어.
  • DML(Database Manipulation Language) : 데이터베이스를 가공(조회, 입력, 수정, 삭제 ... ) 할 때 사용되는 언어.