CS/DB

[Database] 데이터베이스 & DBMS(+ Schema) & Relation Model · RDBMS(+ NoSQL)

Uykm 2023. 11. 6. 22:43

▼ Why ? What ?

이번에 처음으로 팀원들과 웹 개발 프로젝트를 진행하게 되어서 데이터베이스 뭔지, 그리고 Database는 어떻게 관리해야 하는 것인지에 대해 제대로 공부를 시작해보려고 한다.

(+) "Database" 강의에서 배운 Relational model에 대한 내용도 추가적으로 정리했다 !


▼ 데이터베이스 (Database)

 

Database (DB)

 

  • 데이터를 조회하고 저장하는 프로그램

 


 

데이터베이스 시스템(Database System)이 왜 필요한가?

 

  • 데이터의 중복성(redundancy)비일관성(inconsistency)을 해결 !
    ➜ 용량을 최소화할 수 있고 데이터를 효율적으로 다룰 수 있다.
    ( 이런 시스템을 유지하기 위한 규칙이 존재하긴 한다. )

  • 데이터에 접근(access)하는 데 있어서 발생하는 어려움을 해결 !
    ➜ 애플리케이션이나 웹을 통해 여러 시스템들(사람들)이 데이터를 공유하고 사용할 수 있게 해준다.

  • 대량의 파일과 형식들로 인해 발생하는 데이터들의 고립(isolation)을 해결 !

  • 가장 중요한 무결성(Integrity) 문제를 해결 !
    ➜ 데이터 연산에 제약(constraints)을 걸어서 해결한다.
    ex) 뱅킹 데이터베이스 시스템에서 제약(account balance > 0)을 걸어 데이터 연산 이후에 잔액이 0원 이상일 경우에만 수행될 수 있도록 한다.

    • 무결성(Integrity) ?
      ➜ 데이터의 정확성(중복이나 누락 X), 일관성(Consistency), 유효성

  • 데이터베이스가 왜 필요한지 이해하기 위해선 트랜잭션(Transaction)과 ACID에 대해 아는 것은 필수적이다 !

ACID (참고자료) - [DB] 데이터베이스 트랜잭션(Transaction) & ACID — Uykm_Note (tistory.com)

 

[DB] 데이터베이스 트랜잭션(Transaction) & ACID

▼ Why ? What ? "Database" 강의시간에 배운 트랜잭션(Transaction)과 ACID는 데이터베이스를 다루기 전에 꼭 알고 있어야 하는 개념이기 때문에 따로 더 공부하고 정리해두려고 한다. ▼ DB Transaction 트랜

ukym-tistory.tistory.com

 


 

Database Architecture

  • 데이터베이스 시스템 구조의 종류

    • 중앙 집중식 데이터베이스 (Centralized database)
      ➜ 중앙 컴퓨터에 데이터의 대부분이 저장되며 다른 위치의 사용자가 단말 장치에 의해 접근이 가능한 데이터베이스 시스템.

    • 분산 데이터베이스 (Distributed Database)
      네트워크를 통해 연결된 여러 개의 컴퓨터에 분산되어 있는 데이터베이스 시스템.
    • Client-Server
      ➜ 하나의 서버가 다수의 클라이언트에 연결되어 있는 데이터베이스 시스템.

    • 병렬 데이터베이스 (Parallel database)
      ➜ 단일 물리적 데이터베이스를 "공유"하는 여러 인스턴스를 실행하는 데이터베이스 시스템.

 

  • Two-tier architecture & Three-tier architecture

 


 DBMS (Database Management System)

 

DBMS

  • 데이터베이스(Database)를 생성하고
    데이터의 일관성(Consistency)이 유지될 수 있도록 관리하는 시스템 소프트웨어이다.
    ➜ DB와 최종 사용자(end users) 또는 애플리케이션 프로그램 사이의 인터페이스(interface) 역할도 한다.
    ( 접근성도 보장 )

    • Perfomance monitoring/tuning(성능 모니터링)
    • 백업(Backup)
    • 복원(Recovery)

 

  • DBMS가 중점적으로 관리하는 3가지

    • 데이터(Data)

    • 데이터베이스 엔진(Database engine)

    • 스키마(Schema)
      : DB의 논리 구조(logical structure)를 정의.

  • File System, HDBMS,  NDBMS, RDBMS, ODBMS, NoSQL 등 여러 종류의 DBMS 모델들이 있고,
    주로 RDBMS를 다룬다

 


 

스키마(Schema) & 인스턴스(Instance)

 

  • Logical schema
    : 데이터베이스의 전체적인 논리적(logical) 구조. 개념적(conceptual) 스키마를 구체화한 것이라고 할 수 있다.
    테이블 이름, 필드 이름, 엔티티 관계, 무결성 제약조건(예: 데이터베이스 관리 규칙)과 같은 정보를 기반으로 스키마 오브젝트를 정의.
      즉, 데이터 구조화(structure)하고 데이터 간의 관계(relationship)을 정의해놓은 것이다.
    ( 단, 어떠한 기술 정보도 담고 있지 않는다. )
  • Physical schema
    : 데이터베이스의 전체적인 물리적(physical) 구조.
    테이블 이름, 필드 이름, 엔티티 관계 등의 컨텍스트 정보 외에 논리적 데이터베이스 스키마 유형에 없는 기술 정보를 제공.

  • Instance
    : 데이터베이스에서 특정 시점의 실제(actual) 내용.
    내용을 계속 바뀔 수 있고 프로그래밍 언어에서 변수의 값과 유사하다고 볼 수 있다.

 

 


 

DB를 다루기 위한 언어 - SQL (Structure Query Language)

 

  • DDL (Data Definition Language) : 데이터베이스 스키마를 정의하기 위한 명령어들.
    ➠ CREATE, ALTER, DROP, RENAME, TRUNCATE
    • 데이터베이스 스키마
    • 무결성 제약 ➜ Primary Key
    • 권한 부여(Authorization) ➜ 누가 어떤 것에 접근할지?

  • DML (Data Manupulation Language) : 데이터를 다루기 위한 명령어들. (Query language)
    ➠ SELECT / INSERT, UPDATE, DELETE

  • DCL (Data Control Language) : DB에 접근하고 객체들을 사용할 수 있는 권한을 다루기 위한 명령어들
    ➠ GRANT, REVOKE

  • TCL (Transition Control Language) : DML에 의해 조작된 결과를 트랜잭션(작업 단위) 별로 제어하는 명령어들.
    ➠ COMMIT, ROLLBACK, SAVEPOINT

 


 

Storage Manager

 

  • 데이터 베이스에 저장된 low-level data애플리케이션 프로그램사이에 인터페이스를 제공하는 프로그램 모듈.
    효율적인 DB 작업을 위해 !

  • Storage manager components
    • Authorization and integrity manager

    • Transaction manager

    • File manager

    • Buffer manager

 


 

Query Processor

 

  • Query processor componenet

    • DDL interpreter
      DDL로 구성된 코드를 분석하고 "데이터 사전 (Data Dictionary)"에 내용을 저장한다.
      ( *Data Dictionary :데이터베이스에 저장되는 데이터에 관한 정보, 데이터를 관리(설명)하기 위한 데이터베이스 시스템 )

    • DML compiler
      DML로 구성된 코드를 low-level instructions(명령어)로 구성된 evaluation plan으로 바꿔준다.

    • Query evaluation engine
      DML compiler에 의해 생성된 low-level instructions 실행.

 

  • Query Processor
    ➜ Parsing and translation
    ➜ Optimization
    ➜ Evaluation

 


 Relation Model & RDBMS (+ NoSQL)

데이터 모델 (Data model)

 

  • 데이터, 데이터 관계(relationships), 일관성 제약(consistency constraints), 데이터 시멘틱(Semantic) 등을 나타내는 개념적 도구의 집합이다.

    그리고 이러한 데이터 구조의 복잡도를 숨기기 위해 필요한 것이 "데이터 추상화 (Data abstraction)" 이다.

 

  • 추상화 단계 (Levels of Abstraction)
    • Physical level
      ➜ 기록이 어떻게 저장될 것인지.

    • Logical level
      ➜ 데이터와 데이터들 간의 관계.
    • View level
      ➜ 애플리케이션이 데이터 타입의 세부사항들을 숨긴다. (+ 보안 목적)

    • 데이터베이스 시스템의 아키텍쳐(Architecture)

 


 

관계형 모델 (Relational Model)

 

  • 모든 데이터가 어떠한 관계(relation)를 맺어 구성된 튜플들의 집합, 즉 2차원 테이블의 형태로 표현된 것.
    ➜ 그리고 이러한 관계형 모델이 적용된 데이터베이스가 관계형 데이터베이스(Relational database)이다.

  • 관계형 모델
    사용자는 데이터베이스에 어떤 정보가 포함되어 있는지와 데이터베이스로부터 어떤 정보를 원하는지를 직접 요청할 수 있고, DBMS는 데이터 구조와 쿼리에 응답하기 위한 검색 절차를 보여주도록 한다.

    • 테이블(Table)
      : 2차원의 테이블 형태로 저장되는 데이터 간의 관계(Relation).

    • 튜플(Tuple) / 행(Row)
      : 테이블에서의 단일 행(Row)

    • 컬럼(Column) / 속성(Attribute)
      : 특정 데이터 타입에 해당되는 값들의 집합.

    • 도메인(Domain)
      : 관계(Relation)에 포함된 포함된 속성(Attribute)이 가질 수 있는 값의 집합.

    • 차수(Degree)
      : 관계(Relation)에 들어있는 속성(Attribute)의 개수

    • 기수(Cardinality)
      : 관계(Relation)에 들어있는 튜플(Tuple)의 개수

 

  • 관계(Relation) 순서가 없는 집합의 개념이다.

    관계형 모델(Relational model)의 특징
    튜플(Tuple)은 순서에 상관없이 임의의 순서로 저장되는데, 튜플(Tuple)들은 삽입, 삭제, 업데이트가 실시간으로 발생한다.
    ➜ 그렇기 때문에, 각 튜플(Tuple)을 구별해주기 위해서 필요한 것이 키(Key)이다 !

    • Super Key
      : 튜플을 식별할 수 있는 유일한 속성(attributes) 또는 집합.

    • Candidate Key (후보키)
      : Super Key 중에서 최소성을 갖는 키(key).
      ➜ ID 또는 name 또는 dept.name 또는 salary

    • Primary Key (기본키)
      : 튜플을 식별할 수 있는 유일한(unique) 키(key).
      하나의 관계형 데이터베이스에선 반드시 하나만 가질 수 있고, 중복되서도 null 값을 가져서도 안된다.

    • Unique Key (고유키)
      : PK처럼 값의 중복을 허용하지 않지만, null 값은 허용한다.

    • Alternate Key (대체키)
      : Primary Key를 제외한 나머지 Candidate Key.
      Primary Key가 될 수 있는 Candidate Key들이다.

    • Foreign Key (외래키)
      : 한 관계(relation)으로부터 다른 관계(relation)의 튜플을 참조하는 데 사용되는 속성(attribute)이다.

 

  • 데이터베이스 스키마

    • Database schema
      : 데이터베이스의 논리적 구조.
      instructor(ID, name, dept_name, salary)

    • Database instance
      : 데이터베이스에 있는 데이터의 스냅샷(snapshot).

 


 

관계형 DBMS (RDBMS)

 

  • 흔히 생각하는 일반적인 데이터베이스의 구조이다 

  • 모든 테이블을 2차원 테이블 형태(Column / Row)로 구성하여 DB를 관리.
    ➠ 즉, 테이블들끼리 관계(Relation)를 맺어 모여있는 형태로 구성되어 있다.

  • ACID를 꼭 준수해야 하며, 그만큼 데이터의 안정성이 보장된다.
    ( ACID (약어) : Transaction이 안전하게 수행되는 것을 보장하기 위한 성질 )
    ➠ 데이터 처리 속도가 빠르나, 처리에 대한 부하가 발생시 성능 저하가 일어난다.

  • Oracle (+ MySQL), MSSQL, MariaDB, DB2Sybase

  • 이러한 관계를 나타내기 위해 외래 키(FK : Foreign Key)를 사용.
     FK를 이용해 테이블 간의 join이 가능하다 !

  • join
    ➠ 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법.

 


 

NoSQL

 

  • RDBMS와 달리 관계를 정의하지 않은 구조이다.
     비관계형 DBMS라고도 한다.

  • 전과 달리 RDBMS 방식으로는 더이상 처리할 수 없는 정도로 복잡하고 용량이 큰 데이터들이 등장하거나, SNS처럼 처리 속도를 극한으로 올려야 하는 서비스들이 등장하면서 부각되기 시작한 기술이다.

  • 복잡도가 떨어져 많은 대용량의 데이터를 다룰 수 있지만,
    중복 데이터가 존재할 수 있고 데이터가 규격화되어있지 않아 업데이트가 비교적 느리다.
    ➠ 정확도를 포기하고 자유도를 높인 방식, 업데이트가 자주 이루어지지 않은 시스템에서 사용하자.