관계형 데이터 베이스 RDBMS

GY·2021년 12월 6일
0

Basic CS

목록 보기
13/28
post-thumbnail
post-custom-banner

🖍 데이터베이스

🔸 데이터베이스가 뭘까

데이터베이스

컴퓨터 시스템에 저장된 정보 혹은 데이터의 집합
행과 열로 구분해 데이터를 저장한다.

DBMS (database managament system)

데이터베이스를 관리하는 시스템


🔸 데이터 베이스는 왜 필요할까?

  • 앱이 종료되어도 데이터를 보관하기 위해
  • 데이터를 체계적으로 정리하고 보관하기 위해

데이터베이스의 종류에는 관계형 데이터베이스와 비관계형 데이터베이스가 있다.
이 중 관계형 데이터베이스에 대해 알아보자.


🖍 관계형 데이터 베이스

🔸 관계형 데이터 베이스는 무엇일까?

RDBMS (Relational DataBase Management System)

데이터 사이의 관계에 기초를 둔 데이터베이스 시스템

primary key

테이블의 가장 첫 컬럼은 id로, 이것이 primary key이다.
primary key는 번경되지 않는 각 행의 고유 값이다.
이 primary key로 특정 로우를 찾거나 참조할 수 있다.
예를 들어, 한 테이블의 2번째 행의 데이터를 다른 테이블에서 참조하고 싶다면 해당 테이블의 primary key가 2인 데이터를 찾는다.

데이터 참조? 참조는 왜하고, 어떻게 참조한다는 걸까?

행마다 대응할 정보를 넣어줄때, 각 행에 중복된 데이터를 여러번 넣어주는 것보다는
하나의 테이블을 따로 만든 다음 그 테이블에서 가져오는 것이 메모리 낭비를 줄일 수 있는 방법이다. 이것을 참조라고 한다.

그림으로 다시 정리해보자.

일대일관계를 예시로 들었다.



🔸 데이터베이스의 관계?

관계형 데이터 베이스는 데이터를 담은 테이블들끼리 특정한 관계를 형성하며 연결되어 있다.

테이블끼리의 관계라니, 무엇을 말하는 걸까?

크게 3가지 종류가 있다.

◾️ 일대일 관계 (one to one)

두 테이블의 행이 일대일로 대응해 연결되는 관계

예) 사람의 이름, 주민등록번호

사람은 하나의 주민등록번호를 가질 수 있고, 
주민등록번호는 하나의 사람의 것이다. 

따라서 주민등록번호 데이터를 담은 테이블과 사람의 이름데이터를 담은 테이블은 일대일 관계로 연결된다.


◾️ 일대다 관계 (one to many)

한 테이블의 행이 다른 테이블의 여러 행과 연결되는 관계

예) 사람의 이름, 반려동물 이름
*단, 동물 한마리에게는 한 명의 주인만 등록되어 있다고 가정하자.

사람 A는 반려동물 a,b,c를 키울 수 있다.
반려동물 a,b,c의 주인은 모두 A 한사람이다.

사람 A의 가족인 동생 B또한 반려동물 a,b,c의 주인이 될 수 있으니 일대다 관계가 아니라고 할 수 있지만, 이 부분은 위 조건에서 제외했다.


◾️ 다대다 관계

한 테이블의 여러 행이 다른 테이블의 여러 행과 연결되는 관계

예) 작가와 저서

작가 A는 책 a,b,c,d를 출간했다.
책 a의 작가는 A뿐만이 아닌, 공동집필한 B도 포함되어있을 수 있다.

따라서 작가테이블과 책 테이블은 여러 행이 서로 연결될 수 있어 다대다 관계라고 말할 수 있다.

다만... 이런 관계에서는 어떻게 여러행을 다른 테이블의 여러행끼리 연결할 수 있을지, 감이 오지 않는다. 어려운 일이 아닐까?

예를 들어... 한 책을 쓴 작가가 3명이라면 작가 테이블에서 작가 3명의 데이터 행에게 똑같은 책을 각각 참조해야 하며,그 작가들이 쓴 다른 책을 참조하기 위해 같은 작가 이름을 행을 추가해 또 써주어야 한다. 무슨 말이냐, 그림을 보자.

그냥 한 로우에 여러 작가를 묶어서 쓰면 되는 거 아니냐고?

이것은 정규화 제 1법칙을 위반하기 때문에 불가능하다. 다른 방법을 찾아야 한다.


정규화 제 1법칙

간단히 말해서, 테이블의 행 하나에는 하나의 데이터만 들어가야 한다는 것이다.

이 문제를 해결하기 위해, junction table과 foreign key를 사용한다.


◾️ 다대다 관계 - 테이블 연결 (junction table, foreign key)

junction table

양쪽에 foreign key를 가지고 있는 테이블로, 이것을 이용해 테이블과 테이블을 연결해주는 역할을 한다.

foreign key(외부키)

  • 정규화: 외부키를 사용해 제이터들을 여러 테이블에 나누어서 저장한 후 필요한 테이블 끼리 연결시킨다.
    이 방법은 데이터를 정리하고 보관하는 데 있어서 다음과 같은 장점이 있다.

  • 중복된 데이터를 저장하지 않아 효율적으로 저장공간을 사용할 수 있다.

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



🔸 예시

카페 음료에 관한 데이터를 모델링한다면, 어떤 테이블을 어떤 관계로 연결해 관계형 데이터베이스를 만들 수 있을까?

다음과 같은 데이터들을 모델링해야 한다고 생각해보자.

음료이름, 음료 이미지, 음료 설명, 영양성분,
알레르기 성분, 음료 카테고리

정답은 없겠지만, 내가 생각한 관계형 데이터 베이스의 구조는 다음과 같다.

- 음료 테이블 안에 음료이름, 이미지, 설명을 포함한다.
- 영양정보는 음료와 one to one 관계이다.
- 카테고리는 음료와 one to many 관계이다.
- 알레르기 성분은 음료와 many to many 관계이다.

many to many 관계가 가장 헷갈리는데, 이렇게 정리해보자.

예를들어,
알레르기 성분 중 우유가 들어있는 음료를 나열하면 음료1, 음료5, 음료8을 나열할 수 있다.
이렇게 알레르기 성분 별로 포함된 음료를 분류할 수 있다.

반대로 음료별로 포함된 알레르기 성분을 분류할 수 있다.

이것을 다대다 관계로 정의한다.

Reference

profile
Why?에서 시작해 How를 찾는 과정을 좋아합니다. 그 고민과 성장의 과정을 꾸준히 기록하고자 합니다.
post-custom-banner

0개의 댓글