Database란?

  • 일반적으로 컴퓨터 시스템에 저장된 정보 또는 데이터의 집합
  • DBMS(데이터베이스 관리 시스템)으로 제어
  • 데이터와 DBMS는 연관된 어플리케이션들과 함께 데이터베이스 시스템으로 일컬어지며 더 짧게는 데이터베이스라고 통칭되기도 함
  • 어플리케이션에서는 데이터가 메모리상에 존재하고 메모리에 존재하는 데이터는 보존이 되지 않기 때문에 애플리케이션이 종료되면 메모리에 있던 데이터들은 다시 읽어들일 수 없어서 데이터를 오랜기간 저장 및 보존하기 위해서 데이터베이스라고 통칭
  • RDBMS(관계형 데이터베이스)와 NoSQL로 명칭되는 비관계형 데이터베이스가 있음

Database를 사용하는 이유?

  1. 데이터를 오랜기간 저장 및 보존

    어플리케이션에서는 데이터가 메모리상에 존재하고 메모리에 존재하는 데이터는 보존이 되지 않기 때문에 종료되면 메모리에 있던 데이터들은 다시 읽어들일 수 없어서 데이터를 오랜기간 저장 및 보존하기 위해

  2. 데이터를 체계적으로 보존하고 관리하기 위해 사용

    내가 원하는 자료를 쉽게 읽어낼 수 있어야만 의미 있는 정보기 때문


RDBMS (Relational DataBase Management System)

  • 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 말함 (MySQL, Postgres, Oracle DB등)
  • 관계형 데이터란 데이터를 서로 상호 관련성을 가진 형태로 표현한 데이터
  • 모든 데이터들은 2차원 테이블로 표현가능

    Primary Key (id) name team
    1 Lewis Hamilton Mercedes
    2 Max Verstappen Redbull
    3 Charles Leclerc Ferrari
    4 Daniel Ricciardo Mclaren
    5 George Russel Williams
    • 각각의 테이블은 column과 row로 구성되어 있음
    • column은 테이블의 각 항목(id, name, team)
    • row는 각 항목들의 실제 값(Lewis Hamilton, Daniel Ricciardo, Ferrari)
    • 각 row는 자신만의 고유 키 (Primary Key)가 있고 고유 키를 통해서 해당 row를 찾거나 인용(reference)하게 됨

RDBMS에서 테이블끼리의 연결 종류

1) One to One

  • 테이블 A의 row와 테이블 B의 row가 정확히 일대일 매칭이 되는 관계
  • 결혼으로 생각하면 남-녀 한 명씩만 결혼을 할 수 있는 것처럼 일대일 매칭
  • One to One 관계에서는 pk, fk가 어느쪽에 있던 문제는 되지 않음

2) One to Many

테이블 A의 row가 테이블 B의 여러 row와 연결이 되는 관계 부모-자식간의 관계로 생각하면 쉽다 부모 입장에서는 여러 명의 자녀를 가질 수 있으나 자녀 입장에서는 부모가 하나

3) Many to Many

테이블 A의 여러 row가 테이블 B의 여러 row와 연결이 되는 관계 서로가 서로를 1:N 관계로 보고 있는 것 학원과 학생의 관계를 생각해 보면 한 학원에는 여러명의 수강생이 있고 수강생도 여러 학원을 수강할 수 있으므로 N:M관계를 가진다고 할 수 있음


테이블과 테이블을 연결하는 방법

  • Foreign key(외부키)라는 개념을 사용하여 주로 연결함

    다른 테이블의 Primary key를 참조


테이블들을 연결하는 이유?

정보들을 왜 여러 테이블에 나누어서 저장할까? 그냥 하나의 테이블에 전부다 저장하면 안되는 것일까?

  • 하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복되어 저장되어 더 많은 디스크를 사용 및 잘못된 데이터가 저장 될 가능성이 높아짐
  • 서로 같은 데이터이지만 부분적으로 내용이 다른 데이터가 생기는 문제가 없어짐
  • 이것을 normalization(정규화)라고 함

ACID(Atomicity, Consistency, Isolation, Durability)

  • Atomicity(원자성)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력

    Ex) 자금 이체시 출금만 성공하고 상대 계좌로 입금되는 작업이 실패해서는 안되는 것

  • Consistency(일관성)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미

    Ex) 위 송금 예제에서 금액의 데이터 타입이 int인데 갑자기 str이 되지 않는 것

  • Isolation(고립성)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미

    트랜잭션끼리는 서로를 간섭할 수 없음

  • Durability(지속성)은 성공적으로 수행 된 트랜잭션은 영원히 반영되어야 함을 의미

    commit이후에 컴퓨터가 꺼지면 데이터는 이미 저장되었으므로 보존되지만 commit전에 컴퓨터가 꺼지게 된다면 데이터는 Atomicity원칙을 따라 트랜잭션을 수행하기 전으로 돌아감


Commit & Rollback

Commit

변경된 데이터를 테이블에 영구적으로 반영하는 것

  • commit전에는 메모리 buffer에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구 가능
  • commit후에는 변경사항이 데이터베이스에 반영되고 이전 데이터는 영원히 잃어버리게 됨
  • commit이전에 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없고 commit이후에 모든 사용자가 결과를 확인 가능
  • commit이전에 변경된 행은 locking이 설정되어 다른 사용자가 변경 불가

Rollback

테이블 내에 입력한 데이터, 수정한 데이터, 삭제한 데이터에 대해 commit이전에는 변경사항을 취소할 수 있는데 Rollback기능으로 취소할 수 있다.

  • Rollback은 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 locking이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 됨을 의미

잘못된 정보는 댓글로 Feedback 부탁드립니다!





ref.

https://velog.io/@gillog/DB-11-1N-NM-%EA%B4%80%EA%B3%84

https://victorydntmd.tistory.com/129

https://ko.wikipedia.org/wiki/ACID

https://hoon93.tistory.com/24