논리적 모델링 2 - 카디널리티(Cardinality)

KDG: First things first!·2024년 8월 19일
0

DB

목록 보기
4/7

카디널리티(Cardinality)

카디널리티: 데이터베이스의 ERD, ERM에서 엔티티 간의 관계를 정의하는 개념으로 두 엔티티가 어떻게 연결되어 있는지를 나타낸다.




카디널리티 표현

카디널리티를 표현하는 표기법은 여러 개가 존재하지만 가장 일반적으로 쓰이는 표기법은 Crow's Foot Notation이다.


(관계에서 하나도 없어도 되면 ○(Optional)이, 관계에서 적어도 하나는 있어야 하면 |(Mandatory)가 포함되어야 한다.)



카디널리티를 사용하면 엔티티간의 Relationship에 대해 자세하고 직관적으로 파악할 수 있다.




1:1(일대일) 관계

두 엔티티간에 1:1 매칭이 성립되는 관계이다.

예를 들어, 국가 - 수도, 남편 - 아내 등의 관계이다.
(한 국가의 수도와 배우자가 여러 명이 극히 드문 관계도 있지만 일반적이지 않은 상황이니 배제하자)

두 엔티티 사이에 1:1 관계가 성립되면 두 엔티티 중 하나 혹은 두 엔티티 둘 다에 FK를 추가하여 모델링을 할 수 있다.



하지만 무조건 1대1이 성립하는 위의 국가-수도 예시와 달리 예를 들어 어느 쇼핑몰에서 한 유저당 하나의 계좌만 등록할 수 있고, 계좌를 등록하든 말든 유저의 자유라고 가정해보자.

1:1 관계라고 해도 만약 FK로 account_id를 user 테이블에 추가한다면 유저는 등록된 계좌가 있을 수도, 없을 수도 있기 때문에 NULL값이 발생하여 좋은 데이터베이스 설계가 아니다. 하지만 모든 계좌(account)들은 각자 주인(user)이 있기 때문에 account 테이블에 FK로 user_id를 추가하면 NULL값이 발생하지 않는다.

따라서 1:1 관계라고 해도 세부적인 연관 관계를 잘 살펴보고 설계하는 것이 좋다.




1:N(일대다) 관계

1:N 관계는 한 쪽 엔티티가 관계를 맺은 다른 한 쪽의 엔티티의 여러 객체(데이터)를 가질 수 있는 연관 관계이다.

예를 들어 주소를 하나만 등록할 수 있는 한 쇼핑몰의 소비자 정보의 주소에서 한 도시에는 여러 소비자가 살 수 있지만 모든 소비자는 주소에는 하나의 도시만 들어간다.

즉, 테이블 A의 한 개의 Row(행)가 테이블 B의 여러개의 Row(행)와 연결 되는 관계이다.


1:N(일대다) 관계에서는 무조건 항상 '다'인 테이블에 FK를 추가해야 한다.

만약 위의 예시에서 예를 들어 customer가 아니라 city에 FK인 customer_id를 추가한다면 특정 한 도시는 무수히 많은 소비자들의 값을 가질 수 있기 때문에 customer1, customer2, customer3...이런 식으로 컬럼을 엄청나게 늘려야 할 수도 있다.

하지만 customer 테이블에 FK인 city_id를 추가한다면 해당 소비자가 어느 도시에 사는지 city_id를 통해 바로 식별할 수 있고 모든 row는 하나의 city_id를 가지기 때문에 위의 상황처럼 컬럼을 무한정 늘리지 않아도 된다.




N:M(다대다) 관계

N:M(다대다) 관계는 연관 관계를 맺은 두 엔티티가 서로 상대 엔티티에 대해 여러 객체(데이터)를 가질 수 있는 연관 관계이다.


위의 예시에서는 책 한 권이 여러 공동 저자를 가질 수 있고 한 작가가 여러 권의 책을 출판했을 수 있으므로 N:M 관계라고 할 수 있다.



하지만 N:M 관계는 두 엔티티의 테이블로는 제대로 표현할 수 없다.

서로 한 로우당 상대 테이블에 대해 여러 개의 값을 가질 수 있기 때문에 값을 넣을 컬럼을 무한정 늘려야 하는 문제가 발생한다.

이러한 N:M(다대다) 관계의 문제점을 해결하기 위해서는 두 테이블을 이어주는 연결 테이블을 사용해야만 한다.

기본적으로 테이블간 관계 저장은 FK를 통해 테이블에 저장된다.

BOOK과 Author 테이블 사이에 책-작가를 연결해주는 테이블을 생성해주고 각각 1:N 관계로 맵핑해준 후 Book 테이블의 PK와 Author 테이블의 PK를 각각 FK로 연결 테이블에 저장해주면 정상적인 RDBMS 테이블 설계가 가능해진다.
연결 테이블의 각 row는 book_id와 author_id의 각 값을 저장할 것이다.


N:M(다대다) 관계의 두 Entity는 DB 설계 과정에서 두 Entity를 연결하는 새로운 ENtity & 2개의 1:N(일대다) 관계로 재설정된다.
(또한 다대다 관계에서는 명사뿐만 아니라 동사도 Entity 후보가 될 수 있다.)

profile
알고리즘, 자료구조 블로그: https://gyun97.github.io/

0개의 댓글