데이터베이스의 기초

Jivyy·2020년 5월 14일
0

WECODE

목록 보기
15/20
post-thumbnail

데이터베이스란?

데이터를 저장 및 보존하는 시스템으로 데이터 보존의 측면에서 휘발성인 메모리와는 차이가 있다.
메모리에 저장된 데이터는 컴퓨터나 해당 application 이 종료하면 사라지지만 속도가 빠르다는 장점이 있다.
따라서 저장은 데이터베이스에서, 읽기는 메모리에서 하게 된다.

데이터베이스의 목적

특히 데이터를 장기 보존하기 위해서 데이터베이스를 사용하는데
접근 및 관리가 쉬워서 데이터의 편집 . 가공. 보존이 쉽도록 해준다.

데이터베이스의 유형

1. 관계형데이터베이스(RDBMS, Relational DataBase Management System)

  • 관계형 데이터 : 데이터를 서로 상호 관련성을 가진 형태로 표현한 것
  • 모든 데이터들은 마치 엑셀과 같은 테이블형태
  • 테이블은 항목을 가리키는 column과 각 항목의 실제 값을 가진 row로 구성
  1. one to one

    Users and user_profiles - one to one

foriegn key

  1. One to Many : 여러개의 연결관계 ex. 한 고객의 여러번의 구매주문
    ex. 한 카테고리에 여러가지의 제품이 있는 것
    하나의 주체가 여러개의 상태값을 가질 수 있는 것을 의미한다.

```각 고객은 여러 제품을 구매할 수 있지만 구매된 제품의 주인은 오직 한 고객 뿐이다 ```
  1. Many to Many (다대다 관계)
    테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계.
    ex하나의 책의 여러명의 저자가 있는 경우 책의 정보의 북 테이블과 저자의 테이블이 하나의 테이블에 연결된다.

책은 여러 작가에 의해 쓰일 수 있고 작가들은 여러 책을 쓸 수 있다

관계를 맺어주는 join table association
one to many 와는 중간테이블의 유무가 가장 큰 차이
데이터들이 복잡하게 얽혀있는 것들을 정리해주기위해서 중간테이블이 필요한것

a,b,c 저자가 공동으로 전자공학 책을 쓴 경우
그런데 a 저자가 책을 여러권 쓴 경우
한테이블에 정리하게되면 한 테이블에 중복이 생기는 경우를 방지할 수 있다.

교수 id          중간테이블  	 책정보 id
1 a                1  1   	 1 전자공학
2 b                1  2   	 2 기계공학
3 c                1  3   	 3 파이썬
                   2  1 
                   3  1

중간테이블 해석 : 
교수1 이 1, 2, 3책의 저자
교수 2, 3도 1 책의 저자

왜 테이블들을 연결하는가??

하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복되어 저장된다.
더 많은 디스크를 사용하게 되고 잘못된 데이터가 저장 될 가능성이 높아진다.
예를 들어, 고객의 아이디는 동일한데 이름이 틀린 로우들이 있다면 어떻게 해야 하는가? 어떤 이름이 정확한건가?
여러 테이블에 나누어서 저장한후 필요한 테이블 끼리 연결 시키면 위의 2문제가 사라진다.
중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓰고,
또한 서로 같은 데이터이지만 부분적으로 틀린 데이터가 생기는 문제가 없어진다.
이것을 normalization이라고 한다.

트랜잭션(Transaction)

  • 질의를 하나의 묶음처리해서 만약 중간에 실행이 중지되는 경우 처음부터 다시 시작하는 롤백(복구)을 수행하고
    오류없이 마치면 커밋하는 실행단위.

  • 질의가 실행되면 전부가 수행되거나 전부 실행하지 않는 작업 수행의 논리적 단위

  • 인터넷뱅킹으로 송금하는 경우를 예를 든다면
    내 계좌에서 만원이 줄고 친구의 계좌에 만원이 생겨야 한다.
    만약 실행 중간에 오류가 생겨 내 계좌에서는 만원이 차감되었지만 친구의 계좌에 만원이 추가되지 않았다면?

  • 이러한 상황이 발생하지 않게 하기 위해서 만약 중간에 오류가 생긴다면 중지하고 다시 처음부터 진행하고 오류가 없이 끝나면 커밋하는 것

  • ACID를 제공함으로 따라서 트랜잭션(일련의 작업들을 한번에 하나의 unit으로 실행하는것) 기능을 제공

    트랜젝션의 4가지 특성 ACID(Atomicity, Consistency, Isolation, Durability)

    원자성(Atomicity)

    트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.

    일관성(Consistency)

    트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.

    고립성(Isolation)

    트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 자세한 내용은 관련 문서를 참조해야 한다.

    지속성(Durability)

    성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.

NoSQL 데이터베이스

  • 비관계형 타입의 데이터를 저장할 때 주로 사용
  • 저장 전에 테이블을 정의할 필요가 없다.

SQL(RDBMS) vs NoSQL

SQL - 구조화 질의 언어(Structured Query Language)

장점:
관계형 데이터베이스는 데이터를 더 효율적으로 그리고 체계적으로 저장할 수 있고 관리 할 수 있다.
미리 저장하는 데이터들의 구조(테이블 스키마)를 정의 함으로 데이터의 완전성이 보장된다.
트랜잭션(transaction)

단점:
테이블을 미리 정의해야 함으로 테이블 구조 변화 등에 덜 유연한다.
확장성이 쉽지 않다.
역시 테이블 구조가 미리 정의 되어 있다보니 단순히 서버를 늘리는것 만으로 확장하기가 쉽지 않고 서버의 성능 자체도 높여야 한다.
서버를 늘려서 분산 저장 하는것도 쉽지 않다.
Scale up (서버의 성능을 높이는것)으로 확장성이 됨.
정형화된 데이터들 그리고 데이터의 완전성이 중요한 데이터들을 저장하는데 유리하다.
예) 전자상거래 정보. 은행 계좌 정보, 거래 정보 등등.

최근 SQL과 같이 데이터베이스의 정렬과 탐색을 활용하여 데이터를 전문적으로 처리하는 데이터 사이언티스트 직업이 주목받고 있다.

NoSQL

장점:
테이터 구조를 미리 정의하지 않아도 됨으로 저장하는 데이터의 구조 변화에 유연하다.
확장하기가 비교적 쉽다. 그냥 서버 수를 늘리면 됨(scale out)
확장하기가 쉽고 테이터의 구조도 유연하다 보니 방대한 양의 데이터를 저장하는데 유리하다.
단점:
데이터의 완전성이 덜 보장된다.
트랜잭션이 안되거나 비교적 불안정하다.
주로 비정형화 데이터 그리고 완전성이 상대적으로 덜 유리한 데이터를 저장하는데 유리하다.
예) 로그 데이타

profile
나만의 속도로

0개의 댓글