DB-1장 : DBMS와 데이터 모델

DBMS란 무엇일까?

  • DBMS는 아주 거대하고 통합된 데이터의 모음이다. 또한 DBMS는 데이터베이스를 저장하고 관리하기 위해 설계된 소프트웨어 패키지이다.
  • 파일과 DBMS는 뭐가 다를까?
    • 여러가지 쿼리 처리를 위한 코드 존재.
    • 여러명의 동시 사용자가 존재할 때 데이터 불일치로부터 보호가 돼야 한다
    • 크래시 복구 기능 존재
    • 보안과 접속 통제 기능이 있어야한다.
  • DBMS를 왜 사용할까?
    • 데이터의 독립성과 효율적인 접속을 위해
    • 어플리케이션 개발 시간의 감소를 위해
    • 데이터의 무결성과 보안
    • 일관된 데이터관리
    • 동시 접속, 크래시로부터의 복구

왜 데이터베이스를 공부해야할까?

  • 컴퓨테이션, 즉 계산으로부터 정보로의 전환이 일어나고있다.
    • 낮은 수준에서는, 어지러운 웹공간을 정리해야하며
    • 높은 수준에서는, 과학적 어플리케이션들을 만들어야한다.
  • 데이터셋들의 다양성과 볼륨, 즉 크기가 증가하고 있다.
    • 디지털 도서관, 상호작용 되는 비디오, 인간 게놈 프로젝트, EOS 프로젝트 등 DBMS의 필요성이 폭증하고있다.
    • DBMS는 대부분의 CS를 포괄한다.
      • OS, 언어, 이론, AI, 멀티미디어, 논리 등

데이터 모델이란 무엇인가

  • 데이터모델 : 데이터를 묘사하기위한 개념의 모음이다.
  • 스키마 : 주어진 데이터모델을 사용해 특정 데이터의 모음에 대해 설명한 것.
  • 데이터의 관계형 모델 : 현대에 가장 널리 사용되는 모델
    • 메인 컨셉 : 행과 열로 이루어진 표로 표현되는 관계
    • 모든 관계는 열이나 필드를 묘사하는 스키마가 있다.

추상화의 단계

  • View : 하나의 개념적, 논리적 스키마와 피지컬 스키마이다.
    • View는 사용자가 데이터를 어떻게 보는지 묘사한다.
    • 개념적 스키마 : 논리적 구조를 정의한다.
    • 피지컬 스키마 : 사용되는 파일과 index를 묘사한다.
    • 스키마는 데이터베이스 구조를 정의하는 언어인 DDL(Data Definition Language)로 정의된다.
    • 데이터는 데이터를 수정하거나 질의하는 데 사용되는 언어인 DML(Data Manipulation Language)을 이용해 *쿼리되거나 수정된다.
      • 쿼리 : 특정 데이터를 보여달라고 데이터베이스에게 보내는 요청

예시 : 대학 데이터베이스

  • 개념적 스키마
    • 학생들(sid : string, name : string, login : string, age : integer, gpa:real)
    • 코스 : (cid, cname, credits)
    • 수강 내역 : (sid, cid, grade)
  • 물리적 스키마
    • 정렬되지않은 파일로 저장된 관계
    • 학생의 첫 열의 인덱스
  • 외부적 스키마 (View)
    • Course_info(cid, enrollment)
    • 내가 이해한바에 따르면, 사용자에게 보여주기 위해서 추가로 추상화 및 요약한, 더 복잡한 데이터베이스 구조를 간단하게 만든 래핑 구조가 뷰이다.

DBMS의 특성 동작, 구성요소

  • 데이터 독립성
    • 어플리케이션은 데이터가 구조화, 저장되는 과정으로부터 분리된다.
    • 논리적 데이터 독립성 : 데이터의 논리구조가 변경되어도 어플리케이션에 영향을 주지 않는다.
    • 물리적 데이터 독립성 : 데이터의 물리적 저장 방식이 변경되어도 어플리케이션에 영향을 주지 않는다.
  • 동시성 제어
    • 사용자가 프로그램을 동시실행하는 것은 좋은 DBMS 성능에 필수이다.
    • 디스크 접근은 자주 발생하는 것에 비해 속도가 느리기 때문에, CPU가 계속 일을 할 수 있도록 하는 것이 중요하다.
    • 혼합된 작업은 데이터 불일치를 유발한다. DBMS는 마치 유저가 혼자쓰는 프로그램을 쓰는것 처럼, 이런 문제들이 발생하지 않게 보장한다.
  • Transaction : DB 프로그램의 실행
    • 트랜잭션은 데이터베이스 작업의 아토믹 시퀀스(순서)이다.
    • 트랜잭션이 실행된 후에도, DB 규칙은 항상 지켜진 상태여야 한다.
      • 사용자는 무결성 제약조건을 설정할 수 있고, DBMS는 이런 조건을 자동으로 관리한다.
      • 그러나 DBMS가 데이터의 의미관계를 이해하는 것은 아니다. 따라서 transaction이 일관성을 유지하게 보장하는 것은, 사용자의 책임이다.
  • 동시 transaction을 스케줄링하기
    • DBMS는 여러 트랜잭션이 실행될때 순서대로(직렬로) 수행되는것과 같도록 보장합니다.
    • 객체를 읽거나 쓰기 전에, 트랜잭션은 객체에 대한 lock를 요청한다. 그리고 dbms가 lock을 주기를 기다린다. 모든 lock 들은 트랜잭션의 끝에 해제된다.
      • strict 2pl locking protocol
    • 만약, 뒤에오는 작업이 앞의 작업보다 먼저 lock을 보유하고있는 상황이 된다면, 이건 Deadlock 상황이고 중단하고 재시작된다.
  • 원자성 보장하기
    • DBMS는, 특정 동작 중 시스템이 크래시 되더라도 원자성을 보장합니다.
    • 특정 동작을 수행할 때 DBMS에 의해 수행된 모든 작업에 대한 로그를 남깁니다.
    • WAL protocol : 로그를 미리 저장해서 데이터 무결성을 저장하는 프로토콜
      • 데이터베이스를 변경하기 전에, 대응되는 로그가 안전한 곳에 생성됩니다.
      • 크래시 이후, 로그를 이용해 복구되며, 로그가 크래시전에 남지 않았다면, 대응되는 변경 또한 데이터베이스에 적용되지 않습니다.
  • 로그
    • 해당 실행들은 로그에 남는다.
      • ex) Ti라는 객체 기록, 기존값과 변경값
      • ex) Ti의 commit(완료) 혹은 abort(중단)
  • DBMS의 구조
    • 계층구조를 가지며, 시스템마다 각기 다른 구조를 가진다.

마치며

  • DBA(Database Administrator)의 역할
    • 논리적 물리적 스키마를 디자인하기
    • 보안 및 권한관리
    • 데이터 가용성, 크래시 복구
    • 데이터베이스 튜닝