관계형 데이터베이스
먼저 관계형 모델은 여러 데이터 모델(데이터를 표현하는 개념의 집합) 중 하나로, 다음과 같은 특징을 만족하도록 고안되었다.
- 데이터베이스를 단순한 자료구조에 저장
- 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를 묶어주는 역할을 하면서 동작하는데, 이 테이블을 통해 어떤 고객이 몇 개의 여행 상품을 구매했는지 또는, 어떤 여행 상품이 몇 명의 고객을 가지고 있는지 등을 확인할 수 있다.
만약 조인 테이블 사용하지 않는다면
- 필드에 저장되는 데이터의 크기를 설정해야하는데 엄청 커지게 되고 데이터가 저장되지 못할 수 도 있다.
- 데이터를 조회하는데 많은 비용이 발생하게 된다.
- 데이터를 수정할 때 두 곳에 수정이 잘 되었는지 확인이 불편하다. (실수를 유발한다.)
와 같은 문제가 발생할 수 있어, 잘 사용되지 않는다.
출처
'Computer Science > 데이터베이스' 카테고리의 다른 글
데이터베이스 튜닝(Database Tuning) (1) | 2023.06.19 |
---|---|
데이터베이스 락(Lock) (0) | 2023.06.18 |
트랜잭션의 개념과 고립 수준 (0) | 2023.03.26 |
데이터베이스 JOIN (2) | 2023.03.26 |
데이터베이스 인덱스 (0) | 2023.03.25 |