ARCHIVE/DB

[DB] Database 기초

man_on 2021. 9. 14. 02:26
반응형
Database

일정한 체계 속에 저장된 데이터의 집합

 

 ↔  memory (app에서는 데이터가 메모리 상에서 존재, 보존되지않음 (휘발성), but 빠름)

 

 >  table이라는 단위로 저장 ( 표 형태로 저장된 데이터의 집합 )

  파일로 저장가능하지만 데이터의 접근 및 관리 위해 db에 저장

  관계형(RDBMS) /  비관계형(Non-realational / NoSQL

 

> DBMS (  DataBase Management System ) : 데이터베이스 관리 시스템 (사용자가 입력한 SQL을 해석해서 db작업 수행)

   SQL (Structured Query Language) : DBMS에 명령을 내리기위해 사용하는 언어

더보기

정리하면 현재 SQL은 공인된 국제 표준이 있습니다. 하지만 우리가 실제로 사용하는 SQL은 이 국제 표준에 완벽히 부합하지는 않습니다. 이게 무슨 말일까요? 그것은 바로 Oracle, Microsoft SQL Server, MySQL 등의 DBMS에서 지원되는 SQL이 표준을 완벽히 준수하지는 않는다는 뜻입니다.

각 DBMS의 SQL들은 SQL 국제 표준을 일부 준수하기는 하지만, 그 준수 정도가 각각 다릅니다.

 

(1) 표준에 있는 기능을 지원하지 않거나

(2) 표준에 있는 기능이더라도 다른 표현법을 사용하거나

(3) 표준에는 없는 기능을 지원하는

등의 방식으로 표준을 조금씩 어기고 있고, 그 모습도 DBMS마다 다른데요.

사람의 언어에 비유하자면, SQL 국제 표준이라는 '표준어'가 존재한다면 실제로 각 DBMS가 지원하는 SQL은 '사투리'처럼 조금씩 차이가 있는 것이죠.

 

DBMS 회사들이 '성능 향상'과 '더 다양한 기능 제공'을 위해서, 차라리 표준을 일부 벗어나는 것을 택하는 경우가 많기 때문입니다. 그리고 DBMS에 관한 모든 사안에 대해서 표준에 기재되어 있는 것도 아니기 때문에, 그런 부분들에 있어서 DBMS마다 차이가 발생하기도 하구요.

그래서 SQL을 배울 때는 본인이 사용할 DBMS의 SQL을 바로 공부하는 것이 가장 정확하고 빠른 길입니다.

 

RDBMS

Relational DataBase Management System

 > 관계형 데이터베이스 / 데이터를 서로 상호관련성을 가진 형태로 표현

    저장전에 어디에 어떻게 저장할것인지 정의(=table을 정의)

    모든 데이터들을 table로 표현 > column과 row로 구성

   column : 테이블의 각 항목 (행)

   row : 각 항목들의 실제값 (열) > 각자의 고유키(Primary Key)존재 > key를 통해 로우 찾거나 인용

 

 >  테이블끼리의 연결 3가지 ( one to one / one to many / many to many )

  one to one : table A의 row ↔ table B의 row 일대일매칭 (id간 매칭)

  one to many : table A의 row ↔ table B의 여러row

  many to many : table A의 여러row ↔ table B의 여러row

    (FK = 다른table의 PK를 참조하는 col)

더보기
PK
many to many

 

?  테이블 연결 이유

 : 하나의 table에 모든 정보 넣으면 불필요한 동일 정보 중복저장. (많은 디스크 사용 / 잘못저장 가능성↑)

  →  table나누고 필요 table끼리 연결

  → normaliztion(동기화) : 디스크 효율 / 같은 데이터지만 부분적으로틀린 데이터 발생문제 해결

 


 

NoSQL

 : 비관계형 타입의 데이터 저장 (데이터 저장전에 정의 필요X)

    MongoDB, Redis, Cassandra

 

  SQL NoSQL
장점 > 데이터를 더 효율적,체계적 저장/관리
> 데이터들의 구조를 정의함으로 데이터의 완전성보장
> transaction통해 안정적 작업
> 데이터 구조변화에 유연
> 확장하기 쉬움 > 서버 수 늘림 (scale out)
> 방대한 양의 데이터 저장 유리
단점 > 테이블 미리 정의함으로 테이블 구조변화 등에 덜 유연
> 구조 미리 정의 되있으므로 서버 늘리는것으로 확장
   쉽지않고 서버의 성능자체도 높여야함 (scale up)
> 데이터의 완전성 덜 보장
> 트랜잭션 안되거나 비교적 불안정

사용 정형화된 데이터 / 데이터 완전성 중요한 데이터저장유리
(전자상거래 정보, 은행계좌 정보)
비정형화 데이터 / 완전성 덜 유리한 데이터 저장
(로그데이터)

Transaction 

 : (트랜잭션) 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위

   질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우 처음부터 다시 실행하는 Rollback을 수행하고,

  오류없이 실행을 마치면 commit을 하는 실행 단위를 의미

> Rollback

   : 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진경우,

    트랜잭션을 처음부터 다시 시작하거나, 트랜잭션의 부분적으로만 연산된 결과를 다시 취소

 > Commit

   : 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성있는 상태에 있을 때,

     하나의 트랜잭션이 끝났다라는 것을 알려주기위해 사용하는 연산

 

 

 >  ACID  트랜잭션의 성질 

    Atomicity(원자성)

      : 트랜잭션 관련 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력

          ( 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며,

            모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소 )

 

    Consistency(일관성)

     : 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환

     (시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같음)

 

    Isolation(독립성,격리성)

     : 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없음

       (수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없음)

 

   Durablility(영속성,지속성)

     : 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영

 

반응형

'ARCHIVE > DB' 카테고리의 다른 글

[DB] C.R.U.D  (0) 2021.09.16
[DB] MySQL  (0) 2021.09.15
[Node.js] express  (0) 2021.09.13
[Node.js] Protocol / Port / URL  (0) 2021.09.13
[Node.js] 비동기  (0) 2021.09.13