지난 글에서 다룬 요구 사항을 분석했으면, 데이터 모델링의 두 번째 단계인 개념적 데이터 모델링, 즉 ERD를 설계해야한다.
■ 개념적 데이터 모델링(Conceptual Data Modeling)이란?
데이터를 개념적으로 일반화시켜 구조, 타입, 속성, 관계 제약 조건 등을 이끌어 내는 과정을 개념적 데이터 모델링이라고 한다. 즉, 어떤 데이터를 저장할 것인가를 정하는 단계라고 생각하면 된다. 첫 번째 단계에서 진행한 요구 사항이 잘 못 해석되는 오류를 방지하는 기능을 한다.
데이터 구조와 관계를 보여주는 다이어그램을 ERD(Entity Relationship Diagram)라고 한다. ER 모델의 구성 요소는 1) 개체 2) 관계 3) 속성으로 이뤄진다.
■ 개체(entity)
현실 세계에 존재하는 유무형의 사물이나 개념으로 다른 개체와 구분되는 속성을 개체라고 한다. 이 개체들의 집합을 개체 집합이라고 한다.
이커머스 사이트를 예시로 들어보자. A라는 회원이 가입을 했다면, 우리는 이름, 전화번호, 주소, 고객 ID 등의 정보를 가진 회원 DB를 갖게 된다. 이때 고객의 정보를 담는 그릇 “고객”이라는 개체 집합이 생기고, 이름, 전화번호, 주소, 고객ID와 같은 정보는 개체의 속성이 된다. 이커머스 사이트라면 그 외에도 “제품”, “운송” 등의 개체를 가질 수 있겠다.
■ 관계(relationship)
관계는 말 그대로 개체와 개체 사이의 연관성이 있는지 그 관계를 말한다. 예를 들어 “고객”이라는 개체와 “운송”이라는 개체 사이에는 [주문/구매]라는 업무와 연관되어 있을 것이다. 이렇게 각각의 개체가 얼마큼의 관계를 맺느냐에 따라 사상수(mapping cardinality)가 달라지게 된다.
일대일(1:1) vs. 일대다(1:N) vs. 다대일(N:1) vs. 다대다(N:N)
각각의 개체 집합의 원소가 1:1로 대응되는 것을 1:1 사상수라고 한다. 하나의 개체의 원소가 다른 개체의 여러 원소와 관계를 맺을 경우 1:N 사상수 (반대의 경우, N:1 사상수)라고 하며 여러 개체의 여러 원소가 관계를 맺는 것을 N:N 사상수라고 한다.
위 그림 1:1 관계에서 개체 B의 마지막 사각형은 아무 개체와도 관계를 맺지 않고 있다. 이를 ‘부분적 참가’라고 한다. 개체 A는 개체 B에 모두 관계를 맺고 있는데, 이를 ‘전체적 참가’라고 한다. 전체적 참가는 ERD를 그릴 때에 이중선으로 표시한다.
■ 속성
속성의 종류는 다음과 같다.
(1) 더 작은 단위로 나눌 수 있나? — 단순속성 vs 복합속성
예를 들어 고객 가입 일시와 같은 속성은 년/월/일로 더 작게 쪼갤 수 있으므로 복합속성이다. 반면에 나이와 같은 속성은 숫자를 쪼개면 의미가 없어지므로 쪼갤 수 없는 단순속성이다.
(2) 값을 더 가질 수 있나? — 단일값 vs 다중값
하나의 개체에 한 개 값만 가질 수 있을 경우 단일값이라고 한다. 고객 ID와 같은 속성은 한 개체의 고유한 성질이므로 단일값으로 지정해야한다. 반면에 고객 전화 번호는 핸드폰 번호, 집 전화번호, 회사 번호와 같이 여러 개 값을 받을 수 있기 때문에 다중값이다.
추가적으로, 고객 ID는 개체를 구분하는 유일한 값으로, 키 속성이라고도 한다. 키 속성은 ERD를 그릴 때 밑줄을 그어 표시한다.
(3) 다른 정보로 유추할 수 있나? — 저장속성 vs 유도속성
회원 가입할 때 첫 페이지에 오만떼만 정보를 다 입력하라고 한다면? 귀찮은 생각에 뒤로가기를 먼저 누르게 될 것이다. 그만큼 필수적인 정보만을 받아서 간결히 유지하는 것이 중요한데, 이렇게 필수적인 것을 저장속성이라고 한다. 유도속성은 저장속성으로 부터 유추할 수 있는 정보로, 생년월일이란 저장속성을 통해 유추할 수 있는 ‘나이’가 유도속성이다.
■ 특수 속성과 관계
관계 집합 속성은 두 개체 집합 관계에서 생성되는 값을 저장하는 속성을 말한다. 예를 들어 “고객”이 “주문”을 한다면 ‘주문 시각’이라는 관계 집합이 생길 수 있다.
재귀적 관계는 한 개체가 자기 자신과의 관계 집합을 맺는 관계를 말한다. 예를 들어서 ‘1+1 이벤트’를 한다면, 제품 1개를 필수적으로 구매해야 하나를 더 옵션으로 선택할 수 있는 구조이다.
약한 개체 집합이란, 개체의 존재 유무가 관계를 맺고 있는 개체에 종속되는 집합을 말한다. 예를 들어 고객의 “구매 이력”은 고객이 회원을 탈퇴하는 순간 사라질 집합으로 약한 개체 집합이다.
반면에 강한 개체 집합이란, 약한 개체 집합과 관계를 맺는 일반 개체 집합이다. 약한 개체 집합은 강한 개체 집합에 ‘전체적 참가’를 하는 경우가 많다.
샘플 ERD는 다음 블로그를 참고하길 바란다.