> [!abstract] Introduction
> 데이터베이스에서 개체와 개체의 대응 관계를 보여주는 것은 바로 대응 카디널리티*Mapping Cardinality*입니다. 이번 글에서는 대응 카디널리티의 개념과 그 유형에 대해 살펴보겠습니다.
# Cardinality
카디널리티*Cardinality*는 본래 수학에서 비롯된 개념으로, 집합의 크기를 의미한다. 데이터베이스에서 카디널리티를 활용할 때는 **대응 관계**, 그리고 **유한 집합에서의 정의**에 초점을 맞춘다.
> [!info] Definition
> 1. 두 집합 $A$와 $B$에 대하여 일대일 대응 $f : A \to B$가 존재한다면 두 집합의 카디널리티 $|A|$, $|B|$는 동일하다. 즉, $|A| = |B|$이다.
> 2. 유한 집합*Finite Set*에서의 카디널리티*Cardinal Number*는 일반적으로 기수*基數*로 번역되며, 집합에 존재하는 원소의 개수를 의미한다.
이 내용을 기반으로 데이터베이스에서 카디널리티가 어떻게 활용되는지 살펴보자.
## Mapping Cardinality
대응 카디널리티*Mapping Cardinality* 혹은 카디널리티 비율*Cardinality Ratio*은 카디널리티를 대응 관계로 정의한다는 점에 기반하여 관계 집합에 연관된 여러 개체 집합 간의 대응 관계를 나타낸다. 대응 카디널리티는 두 개체 집합이 연관된 상황에서 가장 많이 사용되며, 두 개체 집합 $A$와 $B$가 연관된 이진 관계 집합*Binary Relationship Set* $R$에 대한 대응 카디널리티는 다음과 같다.
>[!info] Definition
> 두 개체 집합 $A$와 $B$가 연관된 이진 관계 집합*Binary Relationship Set* $R$에 대하여 대응 카디널리티는 $A$의 원소와 $B$의 원소가 대응하는 비율을 의미한다. 대응 카디널리티는 일대일*One-to-one* 관계, 일대다*One-to-many* 관계, 다대일*Many-to-one* 관계, 다대다*Many-to-many* 관계 중 하나에 속한다.
>
이제 일대일 관계, 일대다 관계, 다대일 관계, 다대다 관계가 무엇인지 차례대로 살펴보자.
### One-to-One
![[OneToOne.png]]
일대일*One-to-one* 관계는 개체 집합의 원소가 다른 개체 집합의 원소 중 최대 1개와 연결된 관계를 나타낸다. $A$와 $B$의 원소가 하나씩 짝을 이루고 있는 것을 확인할 수 있다. 비록 $a_4$는 연결되어 있지 않지만, $B$의 원소 중 2개 이상과 연결된 $A$의 원소가 존재하지 않으므로 두 집합은 일대일 관계다.
![[OneToOneERD.png]]
위 다이어그램은 개체 집합 $instructor$와 $student$를 연결하는 관계 집합 $advisor$를 E-R 다이어그램으로 표현한 모습이다. 양방향 화살표로 개체 집합을 가리키도록 한다.
### One-to-Many
![[OneToMany.png]]
일대다*One-to-many* 관계는 개체 집합의 원소에 다른 개체 집합의 원소 2개 이상이 대응하는 관계다. $a_1$이 $b_1, b_2$와 연결되어 있는 것처럼 $A$의 모든 원소가 $B$의 원소 중 한 개 이상과 연결되어 있고, $B$의 모든 원소는 $A$의 원소 중 최대 한 개와 이어져 있다.
![[OneToManyERD.png]]
E-R 다이어그램으로 나타냈을 때, 아까 봤던 E-R 다이어그램과 비슷하지만 이번에는 개체 집합 $instructor$를 가리키는 쪽에만 화살표가 있고, $student$를 가리키는 반대쪽에는 화살표가 없다. 화살표가 $advisor$에서 나오는 것이 아니라 $student$에서 나와 $advisor$ 뒤를 지나 $instructor$로 향한다 생각하면 조금 더 이해하기 편할 것이다. 대응 카디널리티를 E-R 표기법으로 나타낼 때, 화살표가 가리키는 쪽에 있는 개체 집합이 One, 그 반대편에 있는 관계 집합이 Many다.
### Many-to-One
![[ManyToOne.png]]
다대일*Many-to-one*은 일대다 관계와 정확히 반대다.
![[ManyToOneERD.png]]
그래서 E-R 표기법도 정확히 반대 방향으로 되어 있다.
### Many-to-Many
![[ManyToMany.png]]
다대다*Many-to-many* 관계는 그냥 무작위라고 생각하면 된다. 두 집합의 원소가 어떻게 대응되어야 한다는 규칙이 딱히 없다. 서로가 서로의 원소 0개 이상과 연결되어 있으면 된다.
![[ManyToManyERD.png]]
E-R 표기법에서는 관계 집합 $advisor$가 위치한 선에 화살표가 없는 것을 확인할 수 있다.
# Total Participation
관계 집합 $R$에 참여하는 개체 집합 $E$를 생각해보자. 만약 $E$의 모든 개체가 각각 $R$의 관계 중 최소 하나에 참여하고 있다면, $E$의 참여는 전체적*total*이다. 그렇다면 당연히 $E$의 몇몇 개체가 $R$에 참여하지 못하는 상황도 있을 것이다. 이런 상황에서 $E$의 참여는 부분적*partial*이다.
![[TotalParticipation.png]]
이걸 E-R 다이어그램으로 표현하면 위와 같다. 관계 집합 $advisor$와 개체 집합 $student$ 사이에 선이 두 개 있는 것을 볼 수 있는데, 이는 $student$에 속하는 모든 개체는 $advisor$라는 관계에 참여해야 한다는 것, 즉 개체 집합 $student$가 관계 집합 $advisor$에 전체적으로 참여하고 있다는 것을 나타낸다.
# Cardinality Limits
앞서 대응 카디널리티를 크게 네가지로 구분했는데, 당연히 이것만으로는 모든 대응 카디널리티를 충분히 세밀하게 표현하기 부족할 수 있다. 그래서 E-R 표기법에는 대응 카디널리티를 표현하는 또다른 방법을 제공한다.
![[CardialityLimitsOnRelationshipSets.png]]
위 다이어그램을 보면 선 위에 $0..*$이나 $1..1$과 같은 기호가 추가되어 있는 것을 확인할 수 있는데, 이것이 바로 E-R 표기법에서 대응 카디널리티를 표현하는 또다른 방법이다. 형식은 $l..h$로 정리할 수 있는데, 여기서 $l$은 카디널리티의 하한선, $h$는 카디널리티의 상한선이다.
한가지 더 짚고 넘어갈 점이 있다. 일대다 관계 혹은 다대일 관계에서 그랬던 것처럼 무엇이 어느쪽의 카디널리티를 의미하는지 헷갈릴 수 있다. 한쪽이 $0..*$이고 다른 쪽이 $1..1$이라는 것은 일대다 관계 혹은 다대일 관계라는 뜻인데, 무엇이 맞을까? $0..*$이 $advisor$왼쪽에 있으니 $instructor$가 Many고 $student$가 One이라고 생각하기 쉽지만 정답은 정확히 그 반대다. $student$에서 $instructor$로 향하는 방향을 기준으로 보았을 때 관계 집합 $advisor$는 다대일 관계, 즉 $instructor$가 One이고 $student$가 Many다.
---
# 출처
- Silberschatz, A., Korth, H.F. and Sudarshan, S. (2020) _Database system concepts_. Seventh edition. New York, NY: McGraw-Hill.