데이터 모델링
Entity
,attribute
,relationship
파악으로 시작한다.비즈니스 룰(사업규칙)
으로 정리한다.
비즈니스 룰
이란 특정 조직이 운영되기 위해 따라야 하는 정책, 절차, 원칙들에 대한 간단명료한 설명이다.
- 모든
명사
는Entity
후보다- 모든
동사
는Relationship
후보다- 하나의
값
으로 포현할 수 있는명사
는Attribute
후보다
ex) 비즈니스 룰
유저
는 상품
을 주문
할 수 있다.
동일한 주문 내역
은 한 번의 배달로, 3일 안에 유저
가 지정한 배송지
에 전달 돼야 한다. 만약 그렇지 못할 시, 유저
에게 최대한 빨리 알려줘야 한다.
유저
는 상품
에 대한 평가
를 줄
수 있다. 평가
는 두 종류의 데이터 별점
,줄 글
을 통해 할 수 있다.
Bisiness Rule
은 간단명료하면서도 필요한 내용을 모두 담고 있어야 한다.
Attribute
와 Relationship
들의 특성에 따라 모델링이 바뀔 수 있다.
하나의
값
으로 포현할 수 있는명사
는Attribute
후보다
위 규칙에 대한 예외 경우에 대해 알아보자.
값으로 표현할 수 있는 명사여도 Attribute
가 아니라 Entity
로 만드는 경우이다.
유저
는 여러 개의 주소
를 가질 수 있다.카디널리티(Cardinality)
란 Entity type A와 B 사이에서 A Entity 한 개가 B Entity 몇 개와 연결될 수 있고, B Entity 한 개가 A Entity 몇 개와 연결될 수 있는지를 나타낸다.
일대일
, 일대다
, 다대다
로 나뉜다. Entity
들 사이에 어떤 카디널리티
가 있는지에 따라 모델링 하는 방법이 달라진다.
📝 1:1 일대일
하나의 A에 대해서 B도 하나 밖에 없고, 하나의 B에 대해서도 A가 하나 밖에 없다는 것을 의미한다. ex) 법적 부부 관계, 주민등록증
📝 1:N 일대다
하나의 A에 대해서 여러 개의 B가 있을 수 있고, 반대로 하나의 B에 대해서는 하나의 A만 있다는 것을 의미한다. ex) 쇼핑몰 리뷰는 한 명의 유저가 여러 개의 평가, 한 명의 선생님이 여러 수업
📝 M:N 다대다
하나의 A에 대해서 여러 개의 B가 있을 수 있고, 하나의 B에 대해서도 여러 개의 A가 있을 수 있다는 것을 의미한다. ex) 찜하기 기능
따라서 비즈니스 룰을 제대로 파악한 후 카디널리티를 파악해야 한다.
Crow's foot
표현법을 이용한다.
ERM
에서 relationship
은 선으로 표현한다.
카디널러티
는 선 양 끝에 특정 표시를 하여 표현한다.
관계에서 일(1)
에 해당하는 Entity일 때
관계에서 다수
에 해당하는 Entity일 때
📝 1:1 일대일
📝 1:N 일대다
📝 M:N 다대다
- 한 개의 Entity가 다른 Entity와 최대 몇 개까지 연결될 수 있는지
- 한 개의 Entity가 다른 Entity와 최소 몇 개까지 연결될 수 있는지
relationship
에서 최소 연결될 수 있는 숫자는 최대 연결될 수 있는 기호보다 선 안쪽에 표시한다.
관계에서 하나도 없어도 되는 Entity일 때
관계에서 적어도 하나는 있어야 하는 Entity일 때
✅ user와 review의 관계
user는 review가 없어도 되고, review는 반드시 한 명의 user가 있어야 한다. 최소 카디널러티와 최대 카디널러티를 합쳐서 표현하면 다음과 같다.
✅ 1:1 일대일
1:1 일대일
관계가 있을 때는 두 Entity 중 하나 또는 둘 다에 Foreign Key
를 추가해서 모델링 할 수 있다.
예를 들어 한 명의 유저는 하나의 결제용 카드만 등록할 수 있다고 하자.
card
Entity에 user_id
를 넣어준다.
유저가 항상 카드가 있어야만 할 때는 user 테이블에 Foreign Key
를 설정하고, 카드가 있어도 되고 없어도 되는 경우에는 card 테이블에 Foreign Key
를 설정한다.
✅ 1:N 일대다
예를 들어 한 명의 유저는 여러 개의 평개를 할 수 있지만, 하나의 평가는 하나의 유저만 가질 수 있다고 가정하자.
1:N 일대다
관계가 있을 경우엔 항상 다수 쪽에 해당하는 Entity에 Foreign Key
를 만들어 준다. review 테이블에 user_id 컬럼을 추가한다.
유저와 상품 사이의 찜하기 관계를 예시로 사용한다.
M:N 다대다
관계에 있는 두 Entity는 테이블 두 개만으로 표현할 수 없다. 이 문제를 해결하기 위해 연결 테이블(Junction Table)
을 사용한다. 관계를 저장하기 위한 테이블이다.
연결 테이블
에는 위의 선 하나 하나를 저장한다.
다대다
관계에 있는 두 Entity는새로운 Entity
+두 개의 일대다 관게
로 모델링 한다.