관계형 데이터베이스 (RDB, Relational Database)
백엔드 개발자에게 관계형 데이터베이스에 대한 이해와 설계 능력은 필수적 요소이다. 관계형 데이터베이스는 데이터의 체계화된 관리를 위해서 테이블 형식을 이용하여 데이터를 정의하고 설명하는 관계형 데이터 모델에 기반을 둔다. [ic]관계형[/ic]이라는 단어에서 알 수 있듯이, 여러 데이터들이 상호 연결성을 가지는 것이 관계형 데이터베이스의 특징이다.
이번 포스팅에서는 관계형 데이터베이스에서 데이터 간의 관계를 어떻게 설정할 수 있는지 알아보려고 한다. 카페를 운영하는 사장님의 이야기를 통해서 쉽게 이해할 수 있도록 풀어내려고 했다.
?! 테이블을 왜 나누고 연결지어야 하는걸까?
카페를 운영하는 Jason씨. 어느 선선한 봄날 많은 손님들이 가게를 찾았고, 손님들의 주문 목록을 효율적으로 관리하기 위해서 Jason은 엑셀 시트에 주문 목록을 정리하였다.
메뉴 하나 당 주문 번호와 고객 이름, 그리고 고객 자리 번호를 기록하였다. 오전동안 위와 같은 방식으로 고객들의 주문을 기록한 Jason. 점심을 먹으면서 고민하다보니 조금 더 효율적인 방식으로 빠르게 주문 목록을 정리할 수 있는 방법이 있다는 것을 알게 되었다. 한 명이 여러 메뉴를 주문할 때, 고객의 정보가 중복되어서 기록되던 문제를 해결할 방법을 찾은 것이다.
Jason은 주문목록에서 고객에 대한 정보를 따로 빼서, 다른 테이블로 분류하여 만들고 주문테이블에서는 고객에게 부여한 번호를 참조하는 방식을 도입하였다. 오전에 했던 방식과는 다르게 오후에 선택한 방식은 메뉴주문에 대해서 고객의 정보를 하나하나 적지 않고, 숫자 하나로 누가 주문했는지 확인할 수 있어서 음료와 디저트 준비에 신경을 더 쓸 수 있었다.
Jason씨의 일화처럼, 관계형 데이터베이스의 핵심은 데이터를 categorize해서 독립된 테이블로 나누고 필요에 따라서 다른 테이블을 참조하는 것이다. 그래야 데이터를 효율적으로 저장하고 관리할 수 있게 된다. 알고보니 Jason씨는 예전 백엔드 개발자 출신의 카페 사장님이 아닐까?
📦 One-to-One 관계
첫번째 관계 속성으로 일대일 관계를 알아보자. 관련성을 가지는 두 테이블에서, 하나의 테이블의 로우(데이터 객체 하나)가 다른 테이블의 로우 하나와 매칭이 되는 관계를 One-to-One 또는 1:1 관계를 가진다고 말한다. 예를 들어, 전 세계 국가들의 수도를 데이터베이스로 표현한다고 생각해보자. 모든 나라들은 하나의 수도를 가지기 때문에 1:1 관계를 이룬다고 할 수 있다.
데이터 테이블에서 데이터의 고유한 식별자가 되는 요소를 PK(primary key)라고 부르며, 다른 테이블의 pk를 참조하여 관계성을 나타낸 테이블의 데이터는 FK(foreign key, 외래키)라고 부른다. 나라들의 명칭을 담고있는 테이블에서 해당 나라의 수도를 표현하기 위해서 수도 테이블의 PK를 참조하여 FK로 데이터를 저장하고 있다면 두 테이블의 관련성을 나타낼 수 있게 된다.
📦 One-to-Many 관계
다음으로 알아볼 관계는 일대다 관계이다. 명칭에서 유추되는 것처럼 하나의 테이블의 데이터 객체 하나와 다른 테이블의 데이터 객체 여러개와 연결되는 경우를 One-to-Many 혹은 1:N 관계를 이룬다고 칭한다. 1:1 관계보다 실생활에서 많은 예시를 찾을 수 있다. 쇼핑몰 고객의 주문목록, 중고 장터의 판매 상품 목록 등이 1:N 관계의 예시이다. FK를 통해 1:N 테이블을 연결할 때 N이 되는 테이블에 FK column이 있어야 데이터를 효과적으로 관리할 수 있다는 점에 유의하자.
📦 Many-to-Many 관계
테이블 사이의 관계의 마지막으로는 다대다 관계가 있다. 이 관계의 특징은 관계를 가지는 두 테이블이 다른 테이블을 바라볼 때 각각 1:N 관계를 가진다는 것이다. 예를 들어 영화와 영화배우 데이터를 가지고 있는 두 테이블이 있다고 하자. 한 영화에는 여러 영화배우가 출연하기 때문에 하나의 영화와 영화배우 간의 관계는 1:N 관계라고 할 수 있다. 반대로 영화배우는 여러 영화에 출연할 수 있기 때문에 영화배우 한 명과 영화의 관계도 1:N 관계이다. 이와 같은 관계를 가지는 테이블을 N:N 관계 혹은 Many-to-Many 관계를 가진다고 한다.
N:N 관계는 두 테이블에 속한 데이터의 조합을 입력하기 위한 중간 테이블이 하나 생성되게 된다는 특징이 있다. 어느 한쪽 테이블에서 FK로 참조하는 형태가 만들어질 수 없기 때문에 FK로 column이 구성된 테이블을 하나 만들게 되는 것이다.
👏 Conclusion
관계형 데이터베이스의 토대가 되는 테이블 간의 관계에 대해서 알아보았다. 테이블간의 관계를 서로 어떻게 맺어야 하는지 알게 되었으니 백엔드 서버에서도 데이터를 조직화하고 관리하는 작업을 시작할 수 있을 것이다. 이에 대한 내용은 다음 포스팅에서 다루어보도록 하겠다.
댓글