✅ 관계형 데이터베이스


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

데이터베이스는 우리가 필요한 방대한 양의 자료를 정리하는 시스템이다. 자료를 정리하는 스타일에는 다양한 방법이 있다. 다양한 분류 기준이 있지만, 크게 관계형 데이터베이스와 비-관계형데이터 베이스가 존재한다. 대표적으로 mongoDB는 비관계형 데이터베이스의 예시이다. 관계형 데이터베이스(RDBMS, Relational DataBase Management System)는 이름 그대로 데이터 사이의 관계에 기초를 둔 데이터베이스 시스템을 말한다.

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

아래 테이블은 책 목록을 저장하며, 행(row)과 열(column)으로 구성되어 있는 2차원 데이터베이스 테이블이다.

  • Column (열) : 테이블의 각 항목 (id책 제목작가출판사가격)을 의미
  • Row (행) : 각 항목들의 실제 값. 갈매기의 꿈리처드 바크나무옆의자11,520 은 2번 행의 실제값이다
📌 각 로우는 저만의 고유 키(`Primary Key`), PK가 있다.

테이블의 가장 첫 컬럼은 언제나 id 다. 각 로우는 언제나 고유한 번호를 갖고 있으며 이를 고유 키(Primary Key)라고 한다. 따라서 My books 테이블 가운데 개미 라는 책은 id가 4인 데이터 라고 표현한다. 개미의 primary key가 4번인 셈이다. 이 Primary Key를 통해서 특정 로우를 찾거나, 인용(reference)할 수 있다.

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




테이블 사이 관계의 종류

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



One to One

테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계를 one to one 관계라고 한다. 테이블 A의 로우(row) 하나는 테이블 B의 로우(row) 하나와 연결된다. 반대로 테이블 B의 로우 하나도 테이블 A의 로우 하나와 연결된다. Identification numbers 테이블의 user 컬럼은 users 테이블의 id(pk)를 참조한다. 다른 테이블의 pk를 참조한 컬럼에 입력되어 있는 숫자들에도 이름이 있다. 이를 Foreign Key, 혹은 한국어로 외래키 라고 부른다. 따라서 identification numbers 테이블의 user_id 는 모두 FK 로 부를 수 있다.



One to Many

테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 one to many 관계라고 한다. 그림과 같이 users 테이블의 id 1은 pk다. pets테이블의 id 1과 2의 냥돌이 그리고 스위티는 user_id 1(fk)로 users 테이블과 연결된다. 일대 다의 예시이다.



Many to Many

테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 many to many 라고 한다. 두 테이블이 서로 각자 다른 테이블의 여러 데이터와 연결 될 때에는 두 테이블에 속한 데이터의 조합을 입력하기 위한 중간 테이블이 하나 생성된다. Many To Many관계는 N:N이라고 표현하기도 한다. 이와 같은 경우에서 테이블 authors와 테이블 books는 서로 다대다 관계이다 라고 표현한다.





✅ 어떻게 테이블과 테이블을 연결하는가?

  • Foreign key(외부키)라는 개념을 사용하여 주로 연결한다.
  • 앞서 본 one to one 예에서 user_profiles 테이블의 user_id 컬럼은 users 테이블에 걸려있는 foreign key(fk)라고 지정한다.
  • 즉 데이터베이스에게 user_id의 값은 users 테이블의 id 값이며 그러므로 users 테이블의 id 컬럼에 존재하는 값만 생성될 수 있다.
  • 만일 users 테이블에 없는 id 값이 user_id 에 지정되면 에러가 발생한다.

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

  • 하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복되어 저장된다.
  • 더 많은 디스크를 사용하게 되고, 잘못된 데이터가 저장 될 가능성이 높아진다.
  • 여러 테이블에 나누어서 저장한후 필요한 테이블 끼리 연결 시키면 위의 두 문제가 사라진다.
    • 중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓰고,

    • 또한 서로 같은 데이터이지만 부분적으로만 내용이 다른 데이터가 생기는 문제가 없어진다.

    • 이것을 normalization(정규화) 이라고 한다.


✅  정리

  1. 데이터베이스 가운데 관계형 데이터베이스는 모든 데이터를 2차원 테이블에 저장한다.
  2. 테이블에 저장된 데이터들의 관계에 따라 one-to-oneone-to-manymany-to-many 세가지로 타입이 분류된다.
  3. one-to-one : A 테이블의 한 데이터는 B 테이블의 데이터 하나와만 연결.
  4. one-to-many : A 테이블의 데이터가 B 테이블의 여러 데이터와 연결.
  5. many-to-many : A 테이블과 B 테이블 모두 서로 여러 데이터와 연결.
profile
helloworld

0개의 댓글