TIL#49 DB) 관계형 데이터베이스

luneah·2021년 12월 14일
0

Database

목록 보기
2/5
post-thumbnail

Database에는 크게 관계형 데이터베이스(RDBMS)와 "NoSQL"로 명칭되는 비관계형(Non-relational) database가 있다.

데이터베이스는 우리가 필요한 방대한 양의 자료를 정리하는 시스템이다. 자료를 정리하는 스타일에는 다양한 방법이 있다. 다양한 분류 기준이 있지만, 크게 관계형 데이터베이스와 비관계형 데이터베이스가 있다.

관계형 데이터베이스

관계형 데이터베이스 (RDBMS, Relational DataBase Management System)는 이름 그대로 데이터 사이의 관계에 기초를 둔 데이터베이스 시스템을 말한다. 여기서 관계란 표들 사이의 관계를 얘기한다.

1. 관계형 데이터베이스에서 모든 데이터는 2차원 테이블(table)로 표현할 수 있다.

관계형 데이터베이스는 행(row)과 열(column)으로 구성되어 있는 2차원 테이블입니다.

  • Column (열) : 컬럼은 테이블의 각 항목 (id, 책 제목, 작가, 출판사, 가격)을 의미합니다.
  • Row (행) : 로우는 각 항목들의 실제 값입니다. 2번 행을 보면, 갈매기의 꿈, 리처드 바크, 나무옆의자, 11,520 이라는 실제 값이 있습니다.

2. 각 행은 저만의 고유 키(Primary Key)가 있다.

테이블의 가장 첫 컬럼은 언제나 id 이다. 엑셀이나 스프레드 시트를 떠올려보면, 제일 첫 컬럼은 언제나 변하지 않는 번호(index)가 매겨져 있는 것을 볼 수 있듯 각 로우는 언제나 고유한 번호를 갖고 있습니다. 이를 고유 키(Primary Key)라고 한다.

따라서 My books 테이블 가운데 개미 라는 책은 id가 4인 데이터 라고 표현할 수 있다. 개미의 primary key가 4번인 것이다. 이 Primary Key를 통해서 특정 로우를 찾거나, 인용(reference)할 수 있다.

관계형 데이터베이스는 각각의 테이블들이 서로 상호관련성 을 가지고 서로 연결되어 있다. 각각의 테이블들이 완전히 독립적인 대상이 아니라, 테이블 A와 테이블 B가 서로 연관되어 있고, 서로 관련이 있다는 뜻이다.

테이블 사이 관계의 종류

테이블끼리의 연결에는 3가지 종류가 있다. One to One, One to Many, Many to Many 한국어로는 일대일, 일대다, 다대다 관계라고 부른다. 관계형 데이터베이스 내부에 테이블 A와 테이블 B가 있을 때, 이 두 테이블은 무조건 세가지 가운데 한가지 관계에 해당한다.

1. One To One

테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계.

하나의 값만 참조한다. 예를 들어, 하나의 테이블에는 유저의 이름이, 하나의 테이블에는 유저 이름과 매칭되는 주민번호가 담겨있다고 가정해보자. 주민번호는 한 사람당 하나만 가질 수 있기 때문에 하나의 테이블의 로우는 다른 테이블 하나의 로우와 연결된다. 반대로 해도 마찬가지다.

2. One To Many

테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계.

하나의 주체가 여러 개의 상태 값을 가질 수 있는 것을 의미한다. 하나의 카테고리에 그에 해당하는 여러 제품이 들어가 있는 것을 예시로 들 수 있다. 테이블 A의 로우 하나는 테이블 B의 여러 로우와 연결되지만, 테이블 B의 로우 하나는 테이블 A의 로우 하나와 연결된다.

3. Many To Many

테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계.

책은 여러 작가에 의해 쓰일 수 있고 작가들은 여러 책을 쓸 수 있는 경우를 생각하면 된다. 테이블 A의 값과 연결된 테이블 B의 값이 각각 참조되어 중간테이블에 기록된다.

똑같은 데이터를 여러번 저장해야하는 문제가 발생하면 , foreign key를 이용해 해결할 수 있다. foreign key는 fk라고 줄여서 표현할 수 있다. 테이블 A의 id를 참조해 테이블 B의 참조한 데이터의 id값(foreign key)을 함께 저장한다.

RDBMS(SQL) vs NoSQL

  • RDBMS
    • 장점
      • RDBMS는 위에서 설명을 하였듯이 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장하고 있다.
      • 또한 관계는 각 데이터를 중복없이 한 번만 저장할 수 있다.
    • 단점
      • 테이블간테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다.
      • 성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up만을 지원한다. 이로 인해 비용이 기하급수적으로 늘어날 수 있다.
      • 스키마로 인해 데이터가 유연하지 못하다. 나중에 스키마가 변경 될 경우 번거롭고 어렵다.
  • NoSQL
    • 장점
      • NoSQL에서는 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있다. 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
      • 데이터 분산이 용이하며 성능 향상을 위한 Saclue-up 뿐만이 아닌 Scale-out 또한 가능하다.
    • 단점
      • 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행을 해야 한다.
      • 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정가 어려울 수 있다.

💡 RDBMS, NoSQL 언제 사용해야 될까?

RDBMS는 데이터 구조가 명확하며 변경 될 여지가 없으며 명확한 스키마가 중요한 경우 사용하는 것이 좋다. 또한 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합하다.

NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장이 될 수 있는 경우에 사용하는 것이 좋다. 또한 단점에서도 명확하듯이 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야 한다. 이러한 특징들을 기반으로 Update가 많이 이루어지지 않는 시스템이 좋으며 또한 Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 Database를 Scale-Out를 해야 되는 시스템에 적합하다.

profile
하늘이의 개발 일기

0개의 댓글