될때까지

((Database)) SQL, NoSQL, RDB, RDBMS 개념정리 본문

학습/개념정리

((Database)) SQL, NoSQL, RDB, RDBMS 개념정리

랖니 2022. 9. 4. 14:29
728x90

SQL (Structured Query Language)

구조적 질의 언어의 줄임말로, 관계형 데이터 베이스(RDB)에서 데이터를 보다 쉽게 검색,추가,삭제,수정같은 조작을 할 수 있도록 고안된 언어다.

SQL문법은 크게 3가지의 종류로 나뉜다.

  1. DML(Data Manipulation Language, 데이터 조작 언어)
  2. DDL(Data Definition Language, 데이터 정의 언어)
  3. DCL(Data Control Launguage, 데이터 제어 언어)
SQL  해석 예시
DML  Data Manipulation Language 데이터 조작 및 데이터 관리를 위한 언어다. INSERT, UPDATE, DELETE, SELECT..
DDL Data Definition Language 데이터베이스의 스키마를 정의하거나 조작하기 위한 언어다. CREATE, ALTER, DROP..
DCL  Data Control Language 데이터의 보안이나 무결성을 정의하고 접근 권한 설정같이 데이터에 접근하고 관리하기 위한 언어다. GRANT, REVOKE..

 

RDB (Relational Database)

관계형 데이터 모델에 기초를 둔 데이터베이스다. 관계형 데이터 모델은 모든 데이터를 2차원 테이블 형태로 표현한다. 다른 테이블과 관계를 맺음으로써 외래키를 사용하고, 이를 이용해서 테이블간에 Join을 사용할 수 있다.

  • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. (스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다.)
  • 데이터는 관계를 통해 여러 테이블에 분산된다.
  • 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없다.

 

스키마란?

데이터베이스를 구성하는 개체(Entity), 속성(Attribute), 관계(Relation) 및 제약 조건 등에 관해 전반적으로 정의한 것

Entity(개체)

  • 단독으로 존재하는 객체를 의미하며, 동일한 객체는 존재하지 않는다.
  • 상품 정보가 품명, 이름, 브랜드가 있을 때 3개의 정보가 모두 같은 상품이 딱 한개일 때 이를 개체라고 한다.
  • 상품 1개가 개체 = Entity
  • 개체들의 집합을 Entity Type이라고 하며 여기서는 Product가 된다.

Attribute(속성)

  • 개체가 갖는 속성을 의미한다.
  • 상품 정보에서 품명, 이름, 브랜드가 속성이다.

Relation(관계)

  • Entity Type간의 관계를 의미한다.

 

RDBMS (Relational Database Management System)

RDB를 생성하고 수정, 삭제하고 관리할 수 있는 소프트웨어를 말한다. 

RDBMS의 종류

Oracle, PostgreSQL, MySQL, SQLite 등

RDBMS의 특징

  1. 2차원 구조 모델(열:속성, 행:데이터)을 기반으로 테이블 형식으로 데이터를 저장한다.
  2. 트랜잭션 ACID(원자성, 일관성, 독립성, 지속성)을 보장하는 기능을 가진다.
  3. SQL이라는 쿼리를 사용해서 데이터를 다룬다.
  4. 반드시 스키마를 준수해야한다.(유연하지 않다)

 

NoSQL (Not Only SQL)

  • 데이터간의 관계를 정의하지 않기 때문에 테이블간의 join이 불가능하다.
  • RDBMS의 복잡도와 용량 한계를 극복하기 위한 목적으로 등장했기 때문에 RDBMS에 비해 훨씬 더 대용량의 데이터를 저장할 수 있다.
  • 정해진 스키마가 없어서 자유롭게 데이터를 저장할 수 있다.
  • 스키마가 없기 때문에 데이터에 대한 규격화된 결과값을 얻기 어렵다.
  • 예시로는 MongoDB, redis등이 있다.

 

RDBMS VS NoSQL 

  RDBMS NoSQL
장점 정해진 스키마가 있다. 스키마가 없다.
명확한 데이터 구조를 보장한다. 유연하고 자유로운 데이터 구조를 가질 수 있다.

각 데이터를 중복없이 한번만 저장할 수 있다. 데이터 분산이 용이하다.
단점 테이블간 관계를 맺고 있어서 시스템이 커지면 join문이 많아져 복잡한 쿼리가 생성된다. 데이터 중복이 발생할 수 있고 중복된 데이터가 변경될 경우 모든 컬렉션에서 작업해야한다.
나중에 스키마가 변경될 경우 번거롭고 어렵다. 명확한 데이터 구조를 보장하지 않으며, 데이터 구조를 결정하기 어려울 수 있다.
언제쓰면 좋을까? - 명확한 스키마 사용이 요구되고, 관계를 맺고 있는 데이터가 자주 변경되는 경우
- 중요한 트랜잭션 처리가 요구되는 경우
- 정확한 데이터 구조를 알 수 없을 때
- 데이터 변경이 자주 없고 막대한 양의 데이터를 다뤄야하는 경우
728x90