TIL #30 관계형 데이터베이스 (RDBMS)의 관계종류

채록·2021년 1월 18일
1

Database

목록 보기
1/11
post-thumbnail

🐶 들어가는 말

개념설명 -> 이해 X
실습하기 -> 이해 X
실패, 원인찾기, 의문갖기, 도전하기 -> 이해 OOOOOO !!

따라서 이해하기 위해 고군분투 했던 것을 떠올리며 개념을 정리하기 위해 글을 남긴다.

먼저 Database modeling을 정리하기 전 간단하게 관계형 데이터베이스에 대해 정리했다. (실습과제에 대한 리뷰 이후에 올릴것!!!!)







I. Database

먼저 Database 란 일반적으로 컴퓨터 시스템에 저장된 정보 또는 데이터의 집합을 의미한다.

  • 데이터베이스 관리 시스템(DBMS) = 데이터베이스를 제어하는 것
  • 데이터 + DMBS + 연관된 Application => "데이터베이스 시스템" ==> 데이터베이스 라고도 통칭된다.

이러한 데이터베이스에는 크게관계형 데이터베이스(RDBMS)비 관계형 데이터베이스(NoSQL - Non relational database)이 있다. 이중에서 지금 다뤄볼 내용은 RDMBS에 관한 것이다.





II. 관계형 데이터베이스 (RDBMS)

관계형 데이터 베이스는 말 그대로 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템이다.

  • 각 table은 column과 row 로 이루어져 있다.
  • column = 각 항목 ex) Favorite_color
  • row = 각 항목들의 실제 값 ex) Yellow, Red, Violet ...

각각의 table은 서로 상호연관성을 갖고 관계될 수 있다. 그 관계는 세가지 종류가 있다.

  1. one to one
  2. one to many
  3. many to many

그리고 이 개념을 알기 위해서 필요한 것이 PKFK이다.




1. PK 와 FK


1) PK ?

PK는 Primary Key라는 뜻으로 해당 table의 고유한 id이다. 각 row는 저마다의 PK를 가지고 있다! 주로 이 primary key를 통해서 해당 로우를 찾거나 인용/참조(reference)하게 된다. (--> FK와 연관됨)

위키피디아에서 정의하는 PK는 다음과 같다.

기본 키는 주 키 또는 프라이머리 키라고 하며, 관계형 데이터베이스에서 조의 식별자로 이용하기에 가장 적합한 것을 관계 마다 단 한 설계자에 의해 선택, 정의된 후보 키를 말한다. 0~1개 이상의 속성의 집합으로 볼 수 있다.

또한 PK는 id라고도 명칭한다.


2) FK ?

FK는 Foriegn key를 의미하며 말 그대로 외래 키 이다.
앞서 PK의 인용/참조를 말하면서 FK와 연관되어 있다고 했는데 내가 이해한 것을 나의 말로 풀어쓰자면
"고유의 PK가 존재하는 table의 column으로 외부 table의 값을 가져올때, 그 외부 table의 PK를 가져오는데 이 외부 table의 각 PK는 참조하려는 table의 FK로 작용한다."
라고 할 수 있다. 보다 정확한 의미파악을 위해 위키피디아의 설명을 첨부한다.

  • 관계형 데이터베이스에서 외래 키(외부 키, Foreign Key)는 한 테이블의 필드(attribute) 중 다른 테이블의 행(row)을 식별할 수 있는 키를 말한다.

  • 외래 키는 참조하는 테이블에서 1개의 키(속성 또는 속성의 집합)에 해당하고, 참조하는 측의 관계 변수는 참조되는 측의 테이블의 키를 가리킨다. 참조하는 테이블의 속성의 행 1개의 값은, 참조되는 측 테이블의 행 값에 대응된다. 이 때문에 참조하는 테이블의 행에는, 참조되는 테이블에 나타나지 않는 값을 포함할 수 없다. 이러한 참조 관계는 2개의 테이블을 연관시키기 위한 관계 정규화의 본질적인 부분이다. 참조하는 테이블의 행 여러 개가, 참조되는 테이블의 동일한 행을 참조할 수 있다.

3) PK와 FK 간의 화살표 방향 !

화살표는 FK에서 PF로 향한다. 말 그대로 이렇게 생각하면 된다.!!
그림과 같이 있을 때, user-pofiles 라는 table의 users_id 값은 FK 이다. 즉 여기에 어떤 실제적인 값 이 적히는 것이 아니라 users 라는 table의 PK 값이 들어서게 되는 것이다.
user_profiles의 users_id는 참조 하는 값 으로 users table의 값을 참조한다.!

참조 함 (users_id) ---> 참조 됨 (users)

로 화살표가 향하게 된다.

화살표의 방향은 참조 하는 것 에서 참조 되는 것 으로 FK 에서 해당 FK에 부합되는 PK로 향한다.




2. 관계성

PK와 FK의 개념을 바탕으로 관계형데이터베이스의 3가지 관계성을 공부하였다.
또한 AQueryTool 로 직접 틀을 만들면서 이해했다!

1) one to one

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

user_profile의 users_id 라는 column은 그 값으로 users 라는 table의 PK 값을 받는다.
한명의 유저에 대한 name과 password에 부합되는 profiles는 오직 하나이고, 반대로 하나의 profiles에 부합되는 user도 오직 하나, 즉 "일대일 매칭"의 예를 보여준다.


2) one to many

테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계. (하나 & 여러개)

상황을 예시로 들면, users 에는 한 매장의 손님 이름이 적혀 있다. purcase 에는 product와 price, 그리고 해당 물건을 구입한 손님의 값이 들어갈 것이다.

이런 상황에서 한 손님은 사과를 살 수도 있지만 바나나를 살 수도 있다. user에 속한 손님 값 하나가 purchase에 속한 여러 값에 모두 들어갈 수 있다는 것이다.

위와 같은 관계성을 나타내는 표가 있는데 이의 내용을 가정하여 살펴보면.
이렇게 amanda가 apple과 banana를 구매하였는데 John도 apple을 구매하는 경우이다.

각 고객은 여러 제품을 구매할 수 있지만 구매된 제품의 주인은 오직 한 고객 뿐이다
즉, 참조 하는 table이 하나의 값이 참조 받는 table의 여러 값을 받을 때 one to many라고 한다.


3) many to many

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

작가와 출판 책의 이름에 관한 예를 들어 설명해보면 다음과 같다.


Amanda는 star 라는 책과 lovely_bear라는 책을 출판하였다. 그런데 이 lovely_bear는 공동저자로 출판되어 Tom 역시 저자이다.
즉, 한명의 저자가 여러권을 책을 출판하기도 하지만, 한권의 책은 여러명의 저자가 있기도 하다.

책은 여러 작가에 의해 쓰일 수 있고 작가들은 여러 책을 쓸 수 있다.

이를 table로 나타낼 땐 중간에 table이 하나 더 있어야 표현 가능하다.

이 중간 talbe에는 PK와 FK만 존재할 때도 있지만, 추가적인 column값을 부여할 수도 있다. (인세와 같은 요소가 추가될 수 있다.)

이처럼 한 테이블의 여러개 row가 다른 테이블의 여러개 row와 연결되는 관계를 many to many라고 한다.




🐱 정리 글

이론 설명으로는 이해하지 못했었다. AQuery Tool을 통해 PK와 AK간의 관계성을 생각하고, table 간에 화살표를 이어주면서 이해하 수 있었다.!

참고하면서 이해하는데 확신이 들게 해준 자료 : https://velog.io/@matisse/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B4%80%EA%B3%84-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-One-to

끝 ~ 💕😊😊😊💕

profile
🍎 🍊 🍋 🍏 🍇

0개의 댓글