SQL의 시작

2020/05/24

Data, DB, DBMS

data

세상에 있는 많은 정보들 중에서 중요하고, 관리가 필요하며 그리고 그 정보를 다시 찾아볼 필요가 있어 기록해 놓을 만한 가치가 있는 것.

컴퓨터가 사용되기 전에는 수첩, 다이어리, 메모장 같은 곳에 직접 작성했다. 이러한 방식은 많은 불편한 점을 가지고있다.

  • 데이터가 증가함에 따라 수첩을 계속해서 사야하는 경제적인 불편함
  • 원하는 데이터를 찾는 데 오래 걸린다는 시간적인 불편함
  • 물에 젖거나, 잉크가 번지고, 불에 타버리는 재난적 불편함

이러한 불편함 점들을 해결해 주고 있는 것이 바로 컴퓨터이다.

DB & DBMS

컴퓨터가 등장하고, 사람들은 컴퓨터 파일에 데이터를 저장하기 시작했다.

개인적인 측면에서 보면 굉장히 훌륭한 데이터 관리 수단이지만, 기업 또는 국가적인 측면에서 바라본다면, 단순한 컴퓨터 파일 역시 완벽한 해결책은 아니였다.

컴퓨터 파일 역시, 데이터의 양이 많아지게 되면 특정 파일을 찾느라 시간적인 불편함이 생기기 때문이다.

그래서 등장한 것이 DBMS

DBMS(DataBase Management System) : 데이터베이스 관리 시스템

DataBase(데이터베이스)는 데이터를 모아 놓은 것으로, 이런 데이터베이스를 관리하는 소프트웨어가 DBMS이다.

데이터베이스에 데이터를 저장하고, 필요한 데이터를 꺼내보고, 저장된 데이터를 수정하거나 삭제하는 작업을 DBMS가 처리한다.

DBMS의 종류로는

  • 계층형
  • 관계형
  • 망형(네트워크형)
  • 객체지향형
  • NoSQL

앞으로 살펴볼 것은 관계형 RDBMS이다.

RDBMS란?

간략하게 정리해보자면, 관계형 모델은 2차원 구조에 데이터를 성격에 맞게 분리하여, 가급적 중복되지 않게 저장하고, 필요한 데이터는 테이블간에 관계를 맺어 추출하는 것 이라고 할 수 있겠다.

테이블 관리

데이터 저장 관점

필요한 데이터만 적재적소에 저장해 두는 것이 효율적. 가급적 중복된 데이터는 저장하지 않는 것이 좋다.

데이터 조회 관점

원하는 데이터를 손쉽고 빠르게 찾아볼 수 있어야 한다.

데이터 수정 관점

특정 데이터만 골라서 원하는 값으로 수정할 수 있어야 한다.

데이터 삭제 관점

특정 데이터만 삭제할 수 있어야 한다.

Table

RDBMS는 2차원 형태의 테이블이라는 구조에 데이터를 저장한다.

테이블은 표!!

테이블은 칼럼(column, 열, 가로)로우(row, 행, 세로)로 이루어져 있다.

칼럼 테이블을 구성하는 데이터의 속성(attribute). 여러가지의 칼럼들이 모여서 하나의 테이블을 구성한다

로우 지정된 칼럼 데이터로 이루어진 하나의 묶음.

칼럼별로는 name, age, gender, city처럼 성격이 다르지만, 로우별로는 한 묶음이 되어 그 성격이 다르지 않다.

칼럼이 테이블에 저장될 데이터 유형을 결정하기 때문에, 실제 테이블을 만들 때는 칼럼에 대한 내용만 작성한다.

RDBMS의 단점

  • 테이블 생성 시 칼럼의 유형을 정의하면 추후 변경 시 문제가 발생할 가능성이 많다.

주변 여건이 변하여 기존 칼럼을 삭제하거나 새로운 칼럼을 추가해야하는 상황이 생길 수 있다. 불가능한 일은 아니지만, 칼럼 변경으로 인해 기존의 테이블을 사용했던 프로그램을 모두 수정해야 한다는 번거로움이 생긴다.

  • SNS를 통해 다양하고 변화무쌍한 유횽의 데이터가 만들어지는 환경에서 하나의 칼럼에 다양한 유형의 테이블을 넣을 수 없다.

현재 SNS로 만들어지는 데이터는 NoSQL의 DBMS가 처리하고 있다.

RDBMS, R(realtion), 관계맺기

RDBMS에서 관계는 굉장히 중요한 개념이다.

유저정보를 저장하는 간단한 테이블이 있다고 쳤을 때, 이름, 성별, 나이, 주소 등을 저장할 수 있다. 하지만 데이터 저장 관점에서 유저정보 테이블에 주소까지 있는 것은 비효율적이라고 판단할 수 있다.

주소의 경우는 중복요소가 많기 때문이다.

모든 데이터를 한 테이블에 몰아 넣는 것 보다는 별도의 주소 테이블을 만들고, 유저정보 테이블에 주소 테이블의 특정 주소를 가리키는 데이터 크기가 작은 칼럼을 두는 것이 더욱 효율적이다.

RDBMS의 가장 큰 특징인 관계는 데이터 성격에 맞게 테이블을 여러 개로 분리하고, 분리한 테이블 간에 연결고리 역할을 하는 칼럼을 두어 관계를 맺는 것을 말한다.

데이터 성격에 맞게 테이블을 여러 개 만들고 이들 간의 관계를 결정하는 것을 데이터베이스 모델링 이라고 한다. 모델링에 정답은 없다

key(Primary key, forien key)

데이터의 무결성을 확보하기 위해 테이블에 반드시 한아의 키가 되는 칼럼을 두도록 한다.

  • 무결성 : 데이터의 정확성을 보장해 올바른 데이터를 유지하는 것을 의미

비슷한 데이터, 겉보기에 똑같은 데이터를 구분하고, 원하는 데이터를 가려내야 할 때, 구분자의 역할을 해주는 유니크한 값을 가진 칼럼을 키 칼럼이라고 한다. 이 때의 키를 primary key(기본 키) 라고 한다.

테이블에서 특정 로우 데이터를 식별할 수 있는 값을 가진 칼럼을 말한다. 특정 데이터를 수정하거나 삭제할 때 사용된다.

foreign key(참조 키) 는 다른 테이블의 기본 키와 연결고리가 되는 키이다. 위 사진에서 students의 primary key인 id가 grades테이블에서 foreign key로 students와 grades 테이블의 연결고리 키가 된 것이다.

트랜잭션 처리

트랙잭션 쉽게 이해하기

  1. a가 b에게 10만원을 송금을 한다.
  2. a는 10만원을 인출한 후 b의 계좌에 10만원을 입금한다.
  3. 거래 중간에 원인 모를 장애로 인해 a의 계좌에서는 10만원이 빠져나갔고, b의 계좌에는 10만원이 입금 되지 않았다.

이런 경우 거래 자체를 없었던 것으로 처리한다는 것이 트랙잭션.

RDBMS의 경우, 한 테이블에서 특정 데이터를 삭제한 후 바로 새로운 데이터를 입력하는 상황에서, 삭제하고 입력할 때, error가 발생하여 입력 작업만 이루어진다면, 제대로 처리된 것이 아니기때문 작업 전 상태로 되돌리는 것이다.

최종 입력 작업이 완료되기 전에 error가 발생한다면, 작업전 상태로 되돌리고 작업이 모두 정상적으로 실행된다면, 모든 변경 내용을 최종 적용한다.

트랜잭션 처리의 네 가지 요소

  • 원자성(atomicity)
  • 일관성(consistency)
  • 고립성(isolation)
  • 지속성(durability)

Jotang
Written by@Jotang
일상과 배운 것을 기록합니다.

GitHub