본문 바로가기
Computer Science/데이터베이스

관계형 데이터베이스 설계 - 1:1, 1:N, 1:M

by eunnnn 2023. 3. 27.

관계형 데이터베이스

먼저 관계형 모델은 여러 데이터 모델(데이터를 표현하는 개념의 집합) 중 하나로, 다음과 같은 특징을 만족하도록 고안되었다.

  • 데이터베이스를 단순한 자료구조에 저장
  • high-level language로 데이터에 접근
  • 물리적 저장소는 구현에 맡겨짐

관계형 모델에서는 데이터를 저장할 때 2차원 테이블 형태의 릴레이션(Relation)이라는 구조가 사용되는데, 이 릴레이션끼의 관계를 정의한 것이 관계형 모델이라고 할 수 있다.

관계를 가진다는 것은 두 릴레이션이 서로 관련이 있을 때를 말하는 것으로, 릴레이션끼리는 1:1, 1:n, n:m 관계를 맺을 수 있다.

 

1:1 관계

1:1 관계란 상대 엔티티와 반드시 하나의 관계를 가지는 것을 말한다.

를 들어 우리나라의 결혼제도 상으로, 한 남자는 한 여자와, 한 여자는 한 남자와 결혼할 수 있다. 이러한 관계가 1:1 관계다.

 

그러나 실제로는 잘 쓰이지 않는 방법이기도 하다.

이 중 phone_id는 외래키(foreign key)로써, Phonebook 테이블의 ID 와 연결되어 있다. 그러나 이와 같은 경우에 Users 테이블에 phone_id를 대신해 phone_number를 직접 저장하는 게 나을 수 있다.

 

1:N 관계

1:N 관계는 한 쪽 엔티티가 관계를 맺은 상대 엔티티 쪽의 여러 객체를 가질 수 있는 것을 의미한다.

예를 들어 부모와 자식 관계를 생각해보면, 부모는 자식을 여러 명 가질 수 있다. (이를 부모가 자식을 소유한다고 표현한다) 그러나 자식은 부모를 하나만 가질 수 밖에 없다. 이러한 관계를 1:N 관계라고 하며, 계층적인 구조로도 이해할 수 있다.

 

실제 구현에서는, 자식(N)의 입장에서 부모(1)중 어떤 부모에 속해있는 지 표현해야 하므로 부모 테이블의 PK를 자식 테이블에 FK로 집어 넣는 것이 일반적이다. (spring에서 '다'인 쪽에 mappedBy가 걸린다.

부모 테이블(1)에서는 내 자식들이 누구인지 정보를 넣을 필요가 없고, 자식 테이블(N)에서만 각각의 자식들이 자신의 부모 정보(FK)를 넣음 으로써 관계를 표현할 수 있다.

 

N:M 관계

N:M 관계는 관계를 가진 양쪽 엔티티 모두에서 1:N 관계를 가지는 것을 말한다. 즉, 서로가 서로를 1:N 관계로 보고 있는 것이다.

예를 들어 한 학원은 여러 명의 수강생을 가지므로 1:N 관계를 가진다. 그러나 반대로 학생도 여러 개의 학원을 수강할 수 있으므로 1:M 관계를 가진다. 그러므로 학원과 학생은 N:M 관계를 가진다고 할 수 있다.

 

일반적으로 N:M 관계는 두 테이블의 대표키를 컬럼으로 갖는 또 다른 테이블을 생성해서 관리한다. 

이렇게 다대다 관계를 위한 테이블을 조인 테이블이라고 한다. customer_package 테이블이 customer_id와 package_id를 묶어주는 역할을 하면서 동작하는데, 이 테이블을 통해 어떤 고객이 몇 개의 여행 상품을 구매했는지 또는, 어떤 여행 상품이 몇 명의 고객을 가지고 있는지 등을 확인할 수 있다.

 

만약 조인 테이블 사용하지 않는다면

  • 필드에 저장되는 데이터의 크기를 설정해야하는데 엄청 커지게 되고 데이터가 저장되지 못할 수 도 있다.
  • 데이터를 조회하는데 많은 비용이 발생하게 된다.
  • 데이터를 수정할 때 두 곳에 수정이 잘 되었는지 확인이 불편하다. (실수를 유발한다.)

와 같은 문제가 발생할 수 있어, 잘 사용되지 않는다.

 

 

출처