데이터베이스 개념

데이터베이스 Part 1

JiJay
8 min readJul 15, 2021

먼저 데이터베이스와 관련한 개념들을 정리해보려고 한다.

데이터베이스는 collection of relevant data to an organization이다.

DBMS(Database Management System)는 데이터베이스에 데이터를 저장하고 관리하며 사용자에게 보안 등 데이터베이스 관련 유용한 기능들을 제공해주는 프로그램들의 집합이다.

DBMS는 꼭 필요한가?

그렇지 않다. DBMS 없이 데이터베이스를 관리할 수 있는 대표적인 예가 파일 시스템이다. Django에서 사용하는 sqlite3가 대표적인 예로 파일에 데이터를 적고 조회한다. 하지만 이는 뒤에서 나올 여러 문제 때문에 DBMS를 사용하게 된다. 다만, DBMS가 데이터베이스의 필수가 아니며 충분히 파일 시스템을 활용해 동작하게 할 수 있음을 알아야한다.

Database applications은 DBMS와 Database을 사용하여 사용하여 사용자에게 제공하는 application이다.

일반적으로 Database system은 DBMS를 지칭하거나 좀 더 넓게 DBMS + Database + Database Applications을 지칭하기도 하다.

DBMS의 목적

File System의 문제점

DBMS를 사용하는 목적에 대해 알기 위해 초기에 사용했던 파일 시스템의 문제에 대해 알아보자.

Data Redundancy and inconsistency

  • 동일한 데이터가 여러 파일에 저장되며 이는 이후 업데이트시 inconsistency를 유발한다.

Difficulty in accessing data

  • data에 접근할 때마다 새로운 프로그램을 짜야한다.

Data isolation

  • 동일한 데이터가 다양한 파일과 포맷에 저장된다.

Integrity Problems

  • 무결성 제약조건이라고 하며 특정 데이터가 일관성있게 지켜야하는 제약 조건이라고 생각하면 된다

ex) 계좌 잔고는 항상 0보다 크거나 같다

  • 파일 시스템의 경우 제약 조건들이 프로그램 코드 안에 존재하게 되며 새롭게 추가하거나 기존의 제약 조건을 바꾸기 힘들다.

Atomicity of updates

Database에는 transaction이라는 개념이 있는데 이는 명령들의 집합, 순서이며 일부만 수행되면 절대 안된다.

ex) A가 B에게 송금할 때 A의 계좌에서 금액을 빼고, B의 계좌에 금액을 더하는 일련의 과정을 transaction이라고 생각하면 된다.

만약, A의 계좌에서 금액이 빠졌는데 B의 계좌에 금액이 더해지는 명령이 실행되지 않으면 일관되지 않은 상태를 만들 수 있다.

즉, 원자처럼 더이상 쪼갤 수 없는 명령들의 집합을 transaction이라고 생각하면 된다.

  • File System의 경우 Transaction의 일부 명령만 실행됐을 때 일관되지 않는 상태를 만들 수 있다.

DBMS의 경우 revert하는 등 일관된 상태를 유지할 수 있다.

Concurrent access by multiple users

  • 여러 사용자가 동시에 데이터에 접근할 경우 일관되지 않은 상태를 만들 수 있다.

Security Problems

  • 특정 유저에게 특정 권한을 부여하기 어렵다.

DBMS은 위의 문제들을 해결해준다. 따라서, 안전하고 일관성 데이터를 유지할 수 있다.

Data models

Data models은 data, data relationships, data semantics, data constraints 등을 표현하는 도구라고 생각하면 된다.

다양한 Data model이 있지만 크게 Conceputal modellogical model로 나눠진다.

Conceptual model은 high-level로 추상적이며

Logical model은 low-level이다.

Conceptual model의 대표적인 예가 Entity-Relationship data model(ER-model)이고

Logical model의 대표적인 예가 Relational model이다.

Relational model

Logical model의 대표적인 예인 relational model은 table에 데이터를 저장한다.

Table은 Columns(또는 attributes)Rows(또는 record, tuple)로 이루어져있다.

Levels of Abstraction

데이터베이스에는 다양한 level들이 있는데 각각의 level들은 상위의 level에 추상화를 통해 표현된다.

Physical level

  • 하드웨어적으로, 정보가 어떻게 bit로 변환되어 저장되는지를 다룬다.

Logical level

  • 데이터베이스에 저장되는 데이터를 표현하고 데이터 간의 관계를 다룬다.
  • 프로그래머가 다루는 수준이다.

View level

  • application program을 통해 일반 사용자에게 제공되는 level로 사용자들은 허용된 정보만 볼 수 있다.

Physical Data Independence

physical level과 logical level은 서로 독립적이라는 뜻으로 physical level이 바뀌어도 logical level은 바뀌지 않는다. 예를 들어, 컴퓨터를 바꿨다고, DBMS를 바꿨다고 데이터베이스 설계도가 바뀌진 않는다.

Schemas와 Instances

Schema는 프로그래밍 언어의 type

Instance변수로 생각하면 쉽다.

Schema는 table의 설계도 또는 구조라고 생각하고 Instance는 그 설계도 또는 구조로 만들어진 (특정 시점에서의) 실제 table이라고 생각하면 된다.

DDL(Data Definition Language)

database schema를 정의하기 위한 언어이다.

DDL의 예시는 아래와 같다

create table instructor (  
ID char(5),
name varchar(20),
dept_name varchar(20),
salary numeric(8,2)
)

DDL compiler는 위와 같은 DDL 코드를 보고 data dictionary라는 곳에 table templates을 저장한다.

Data dictionary는 Database Schema, Integrity constraint, Authorization 등 metadata를 저장하는 공간이다.

DML(Data Manipulation Language)

data를 조회하고 업데이트하는 사용되는 언어로 query language라고도 한다.

크게 두가지 분류가 있는데

Procedural DML

  • C언어 같은 절차 지향 언어라고 생각하면 되며 사용자가 어떤 데이터가 필요한지와 어떻게 그 데이터를 가져 올지를 정해야한다.

Declarative DML

  • 선언적으로 어떤 데이터가 필요한지만 기술하면 된다.
  • Non-procedural라고도 한다.
  • 앞으로 배울 SQL이 declarative하다.

SQL Query Language

앞서 말했듯이 SQL은 Declarative 또는 non-procedural하다.

여러 테이블을 input으로 받아 하나의 table을 결과로 내뱉는다.

Database Design

Conceptual design

  • flow cart, ER model

Logical design

  • database schema를 결정한다
  • relational model

Physical design

  • DBMS 설계자들이 신경쓰는 부분
  • database의 physical layout

Database Engine

Database Engine은 크게

  1. Storage Manager
  2. Query processor component
  3. transaction management component

로 나뉜다.

Storage Manager

효율적으로 데이터를 저장, 조회, 업데이트하게 해준다.

OS file manager와 통신한다.

Data files

  • database를 저장한다

Data dictionary

  • database의 metadata를 저장한다
  • 특히, schema의 metadata

Indices

  • 특정 값을 가진 data item에 대해 빠르게 접근할 수 있도록 해준다.

Query Processor

DDL interpreter

  • DDL를 해석하고 data dictionary에 저장한다

DML compiler

  • DML을 compile해서 query evalutaion engine에게 던진다
  • 이때, 다양한 대안들 중 가장 낮은 비용이 들게 결정한다. 이를 query optimization이라고 한다.

Query evaluation engine

  • DML compiler에게 받은 명령들을 수행한다.

Query processing의 순서

  1. Parsing, translation
  2. Optimization(query optimization)
  3. Evaluation

Transaction Management

Transaction-management component

  • system 또는 transaction이 실패하더라도 일관성 있는 상태를 유지하도록 해준다.

Concurrency-control manager

  • concurrent한 transaction을 관리하여 데이터베이스의 일관성을 유지한다.

--

--