TIL 24 day 관계형 데이터베이스 RDBMS

Winney·2020년 9월 25일
0

Database

1. RDBMS란?

관계형 데이터베이스(Relational Database Management System)
이름 그대로, 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템
예시) MySQL, Postgres, Oracle DB
관계형 데이터란 데이터를 서로 상호관련성을 가진 형태로 표현한 데이터이다.
모든 데이터는 테이블로 표현된다.
각 테이블은 상호관련성을 가지고 서로 연결될 수 있다.

2. TABLE이란? Column과 Row 그리고 Primary Key란?

모든 데이터는 2차원 테이블로 표현
테이블은 행(column)과 열(row)로 구성

  • 행(column): 테이블의 각 항목
  • 열(row): 각 항목의 실제값
  • 각 열(row)는 저만의 고유키(Primary Key)가 있다.
    주로 이 Primary key를 통해서 해당열(row)를 찾거나 인용(reference)된다.
    각 테이블은 상호관련성을 가지고 서로 연결될 수 있다.

3. 테이블의 관계, One to One, One to Many, Many to Many는 무엇인가?

테이블끼리의 연결에는 크게 3가지 종류가 있다.
- one to one
: 테이블 A의 row와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계

- one to many
: 테이블 A의 row가 테이블 B의 로우와 연결이 되는 관계
예시) 하나의 메뉴에는 여러개의 리뷰가 있다.

- many to many
: 테이블 A의 여러 row가 테이블의 B의 여러 row와 연결이 되는 관계
예시) 하나의 책을 여러 작가가 집필 할 수도 있고 한명의 작가가 여러 책을 집필 할 수도 있다.

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

  • Foreign key(외부키) 개념을 사용한다.
  • one to one에서 user_profiles 테이블의 user_id column은 users 테이블에 걸려있는 외부키라고 지정한다.
    즉 데이터베이스에게 user_id의 값은 users 테이블의 id값이며 그로인해 users 테이블의 id column에 존재하는 값만 생성될 수 있다.
    만인 user 테이블에 없는 id 값이 user_id에 지정되면 에러가 난다.

4. 왜 관계형 테이블을 쓰는가?

  • 성능증가를 위해서 사용한다. 원하는 데이터를 더 빨리 찾을 수 있다.
  • 저장 공간을 줄이기 위해서 사용한다. 중복이 많은 데이터를 모두 저장하려면 저장 공간이 많아야하고 잘못된 데이터가 저장 될 가능성이 높다.
    예시) 고객 아이디는 동일하나 이름이 틀린 row가 있다면? 어떤 이름이 정확한걸까?
    결과적으로
  1. 중복된 데이터를 저장하지 않아 디스크를 효율적으로 사용
  2. 서로 같은 데이터이나 부분적으로 틀린 데이터가 생기는 문제를 예방
    이를 정규화(normalization)이라 한다.

5. 트랜잭션(transaction)이란? ACID는 무엇인가?

1) 트랜잭션(transaction)

ACID를 제공해 트랜잭션 즉, 일련의 작업들을 한 번에 하나의 unit으로 실행하는 것을 가능하게 한다.
트랜잭션은 일련의 작업이 하나의 작업처럼 취급되어 모두 다 성공 아니면 모두 다 실패하는 것을 의미한다. (Commit & Rollback)

2) ACID (Atomicity, Consistency, Isolation, Durability)

  • 원자성 : 트랜잭션 관련 작업이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력
    예시) 자금 이체: 이체는 성공하거나 실패 할 수 있지만 돈을 꺼냈다가 입금을 못 하거나 하지 않는다. 이는 중간단계까지 실행되고는 실패하는 일이 없도록 하는 것이다.
  • 일관성 : 트랜잭션 성공 후 항상 일관성 있는 데이터베이스 상태로 유지하는 것을 의미
    예시) 모든 계좌는 잔고가 있어야 한다는 무결성 제약이 있다면 이를 위반하는 트랜잭션은 중단된다.
  • 고립성 : 트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 즉 트랜잭션 밖에 있는 어떤 연산도 중간단계의 데이터를 볼 수 없음을 의미한다. 트랜잭션 실행내역은 연속적이어야하며 성능을 이유로 고립성은 가장 유연성 있는 조건이다.
    예시) 이체작업 중 은행 관리자가 쿼리 실행을 해도 특정 계좌간 이체하는 양 쪽을 볼 수 없다.
  • 지속성 : 성공적인 트랜잭션은 영원히 반영되어야한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주 될 수 있다.

6. '관계형 데이터베이스'와'비관계형 데이터베이스'의 차이는? (SQL과 NoSQL)

1) 관계형 데이터베이스 (SQL)

장점

  • 관계형 데이터베이스틑 데이터를 더 효율적, 체계적으로 저장 및 관리가 가능하다.
  • 미리 저장하는 데이터의 구조(테이블 스키마)를 정의 함으로 데이터의 완전성이 보장된다.
  • 트랜잭션(transaction)

단점

  • 테이블을 미리 정의해야 함으로 테이블 구조 변화 등에 덜 유연하다.
  • 확장이 힙들다.
    테이블 구조가 미리 정의되어 있어 단순 서버 증가로 확장 힘들다.
    서버를 늘려 분산 저장하기 힘들다.
    Scale up(서버의 성능을 높이는 것)으로 확장이 된다.
  • 정형화된 데이터 및 데이터의 완전성이 중요한 데이터를 저장하기에 유리하다.
    예시) 전자상거래 정보, 은행 계좌 정보, 거래 정보 등

2) NoSQL

장점

  • 데이터 구조 변화에 유연하다. 데이터 구조를 미리 정의하지 않기 때문이다.
  • 확장 쉬움. 서버 수를 늘이기만 하면 된다.(scale out)
  • 방대한 양의 데이터를 저장하기에 유리하다. 구조변화에 유연하고 확장이 쉽기 때문이다.

단점

  • 데이터의 안정성이 떨어진다.
  • 트랜잭션이 안 되거나 불안정하다
  • 비정형화 데이터나 상대적으로 완전성이 덜 요구되는 데이터를 저장하는데 유리하다.
    예시) 로그 데이터

7. ERD구성도로 모델링하기

1차

profile
프론트엔드 엔지니어

0개의 댓글