Database Challenges

devKyoun·2023년 4월 16일
2

Database

목록 보기
1/3
post-thumbnail

Database Introduction

>>> Object

데이터베이스를 다루면서 어떠한 것들을 보장하고 고려해야 하는가?
Imagine that we manage databases without DBMS.
⬇️

Challenges from

  • Data Redundancy
  • Data inconsistency
  • Data integrity
  • Inefficient data access
  • Atomicity
  • Concurrent access
  • Security
  • Data dependency

Challenges

👉File Processing 예시를 통해 Database에서 어떤 것들을 보장해야 하는지를 살펴본다--without DBMS


  • Data Redundancy

    데이터를 저장할 시에 데이터가 중복되는 상황을 인지하고 그러한 상황을 피해야 한다.

    X 대학교에서 학생들의 데이터를 'Jack/010-1234-5678/이메일/학과/수업' 형태로 저장한다.

    Jack이 수업을 네개를 듣는다면 Jack/010-1234-5678/이메일/학과 라는 데이터는 네번 중복되어
    비효율적인 방식으로 저장 되고 사용 또한 비효율적이다.

    또한, 듣는 수업이 늘어나면 늘어날수록 똑같은 정보의 데이터가 계속해서 저장된다.

    👇해당 데이터(튜플)들은 테이블이다.

    이를 해결 하기 위해 Jack/010-1234-5678/이메일/학과 라는 하나의 데이터에 있는 네개의 Atrribute 중에서 식별이 가능한 Attribute(식별가능한 : 여기선 전화번호)를 참조하는 형태의 테이블을 만들어야한다.

    No redundancy를 위해 테이블을 쪼개고 원하는 목적을 위해 이를 재조합 해야 한다.
    👉Normalization

  • Data inconsistency

    데이터를 Manage(Ex.수정)할때, 일치해야 하는 것들이 불일치하지는 않는지 확인해야한다.

    Jack의 번호를 010-3333-3338로 변경했을때를 가정해보자.

    Jack의 번호를 바꾸었을때 Jack의 번호를 참조하는 데이터들(테이블)과 불일치성이 일어난다.
    해당 문제점을 인지하고 항상 고려해야하며, 이를 해결해줘야 한다.

  • Data integrity

    데이터 무결성을 보장해야한다.
    만약 Jack이 듣는 수업이 database 수업이 아니라 database2 수업이라고 가정하자
    그렇다면 이는 데이터의 무결성을 보장하지 않는다.
    잘못된 데이터가 존재하기 때문이다.

    두번째로, 만약 Jack의 번호가 전산오류로 -1이 되고, Update도 -1로 한다면 어떨까?
    이 또한, 데이터가 올바르지 않기 때문에 데이터의 무결성이 존재하지 않는다.
    하지만 전산오류라도 두 테이블의 번호는 일치하기 때문에 데이터 일치성은 존재한다.

    여기서 알 수 있는 것은 데이터 무결성은 올바른 데이터이냐 아니냐의 차이고,
    데이터 일치성은 올바르든 올바르지 않든 두 데이터가 일치하는가 안하는가의 차이다.

  • Inefficient data access

    지금 보는 것과 같이 File processing이 예가 될 수 있다.
    저러한 다양한 작업들을 database management system 도움없이 하기엔 굉장히 시간이 오래 걸리고 비효율적인 접근을 해야 한다.

    다양한 작업 Ex) 점수 낮은 순서대로 데이터 출력, C언어에 관련된 수업만 출력,,,

  • Atomicity

    데이터베이스의 데이터 Value들은 Atomicity(원자성)를 보장해야 한다.

    원자성.
    데이터베이스에서 원자성은 무엇을 뜻하는 건가?

    우선 해당 이미지를 보자.

    Jack이 Value라면 Jack만 잭이 Value라면 잭만
    더이상 쪼개질수없는 단위의 Value 만 가능하다는 것이 Atomicity이다.

    우리는 해당 Jack,잭 처럼 Atomicity를 보장하지 않는 Value는 사용하지 않는 것을 보장해야한다.
    위의 상황은 Physical하게 데이터 측면에서 Value의 Atomicity를 본 것이다.

    데이터 측면에서 말고도 데이터베이스는 Logical 한 측면에서도 Atomicity를 보장해야 한다.

    예를 들어서, 항공티켓을 구매하는 상황이다.
    우리는 항공 티켓을 구매하고 계좌 송금을 하는 도중 해당 항공사의 전력이 모두 차단 돼었다고 가정하자.

    그러면 결과는 티켓을 구매하지 못한채 돈은 그대로(실패), 혹은 티켓을 구매하고 돈은 빠져나감(성공) 이 두가지 상황이어야한다.

    즉, 지불과 예약이 동시에 되거나 아니면 모두 되지 않아야한다. (Atomicity Transaction)

    티켓을 구매 했다고 떴는데 돈은 그대로이거나 티켓 구매에 실패했다는데 돈은 빠져나갔다거나 하는 상황은 일어나지 않게끔 우리가 Atomicity를 보장해야 하는 것이다.

  • Concurrent access

    직관적인 이해를 위해 예시를 하나 들었다.

    교보문고에 천원 가격에 올라온 책이 있다.
    (T1)소비자가 해당 책을 사기 위해 송금 하려고 한다.

    (T2)해당 책을 판매자는 원 가격이 너무 비싼거 같아 800원으로 가격을 인하하였다.

    책에 동시에 접근하여 T1 -> T2의 순서이든, T2->T1의 순서이든 무조건 결과는 소비자의 계좌에서 800원이 빠져나가야하고 판매자는 800원을 얻어야 한다.

    이 같은 결과를 보장하기위해 Councurrent access가 필요하다.

  • Security

    우리는 데이터를 어떤 USER냐에 따라서 접근권한을 각각 어느정도 부여할지 고려해야한다.

  • Data dependency

    우리는 데이터 독립성(Data independency)을 보장해야한다.

    데이터 의존성(Data dependency)은 무엇인가?
    Application이 있고 해당 Application의 Database가 존재한다.
    Datbase의 구조를 변경하는데 Application 까지 바뀌게 되면 개발과 유지보수에 어려움이 생긴다.
    반대 또한 마찬가지다.

    그래서 우리는 프로그램의 구조와 데이터의 구조가 서로 영향을 받지 않는 데이터 독립성을 보장해야 한다.


Solutions

  • Database Management System(DBMS)

    👉데이터베이스를 정의하고, 조작하고, 제어하고, 백업하고 또는 필요에 따라 복구하는 등 기능을 제공해주는 소프트웨어 시스템.

    우리는 앞서 알아본 데이터베이스에서 보장해야하는 것(규칙)들을 DBMS를 통해 편리하고 효율적으로 구현할 수 있다.

profile
Game Developer

1개의 댓글

comment-user-thumbnail
2023년 4월 16일

goooooooooooooooooooooooood

답글 달기
Powered by GraphCDN, the GraphQL CDN