본문 바로가기
Data Modeling

엔터티 분류하기

by csk 2013. 6. 26.

요사이는 엔터티의 이름을 짓고 있는데요, 이러한 작업은 엔터티가 어떤 유형인지를 구분하는 것으로부터 시작됩니다. 엔터티 이름의 어미를 유형 구분으로 끝내는 것이 성격을 명확히하고 의사소통을 쉽게 하기위한 기본사항이거든요.


엔터티 이름의 어미에 사용하는 유형을 예로 들면 다음과 같습니다.


~ 코드 : 국가코드와 같이 데이터 건수가 적으면서 변경이 거의 없는 기준 정보 입니다.

~ 기본 : 고객기본, 창고기본과 같이 업무 시작이 되는 주체에 대한 정보 입니다.

~ 내역 : 주문내역, 재고내역과 같이 ~기본 정보에 의해 발생하는 이벤트나 상태를 다루는 정보입니다.

~ 상세 : 고객연락처상세와 같이 ~ 기본 또는 ~ 상세의 성격중 일부 정보를 구체적으로 표현하기 위한 정보입니다. 

~ 이력 : 고객기본변경이력과 같이 다른 정보에 수정을 가하였을때 이를 기록하는 정보입니다.

~ 연계 : BC카드사 결재내역과 같이 외부 시스템에 전달하기 위하여 쌓아두는 정보입니다. 

~ 집계 : 월별주문집계와 같이 기간 또는 유형별 건수, 금액 등을 계산하여 두는 정보입니다.


네. 이정도면 어떤 엔터티를 보고 계시든 하나의 유형에 넣으실 수 있을거에요. 


그런데, 제가 이해를 돕기 위해서 하나씩 예를 들어드렸지만, 엔터티의 이름만으로 어떤 유형인지 결정할 수는 없습니다. 어떤 업무 도메인에서 어떤 시스템을 만들고 있느냐에 따라 해당 엔터티의 유형은 달라지거든요. 위에서 설명드린 '고객'도 쇼핑몰 시스템이라면 '고객기본'이라 이름 짓겠지만, 고객관계를 관리하는 마케팅 시스템이면 여러가지 마케팅 활동에 의해서 발생시킨 '고객내역'이 될 수 있거든요.


이제 유형에 대해서는 감을 잡으 셨을것 같아요. 그런데 유형을 분류하다보면 두 개의 유형 중 어느쪽일지 매우 갈등되는 상황이 생깁니다. 가장 갈등이 많이 되는 유형들을 한 번 살펴보겠습니다.


~ 코드 vs. ~ 기본


코드와 기본은 데이터의 건수가 적고 변경이 적다는 점에서 공통적입니다. 그럼 어떻게 이 둘 사이를 구분하느냐 인데요, 간단하게는 컬럼의 숫자로 구분할 수 있습니다. 코드는 코드명과 코드값, 이렇게 두개의 컬럼으로 이루어진 경우 이구요, 기본은 그 이외에 여러가지 필요한 정보가 추가된 형태이기 때문입니다.

 

아니, 코드란건 원래 완전히 다른 개념이 아니었던가? 라고 의문을 가지실 지도 모릅니다. 그렇다면 예를 하나 들어볼께요. 은행에 관한 정보를 관리해야 한다고 해요. 처음에는 은행명과 그 코드만 필요할 수 있지요. 이때는 확실히 코드라고 이름짓게 됩니다. 그런데, 점점 필요한 정보가 늘어 납니다. 은행의 주소, 전화번호 등등... 이렇게 되면 더이상 코드라고 부르기 어려워지구요. 이때는 은행기본이라는 이름이 적절해 지는거죠.

 이렇다보니 코드와 기본의 경계는 관리해야 하는 컬럼 정보의 숫자로 보는것이 가장 명확한 것 같다는게 제 생각입니다.  



~ 기본 vs. ~ 내역


기본과 내역도 고민이 많이 되는 유형입니다만 맨 앞에서 설명드렸듯이 업무의 시작이 되는 주체 정보는 기본으로 보고 주체가 발생시키는 또는 주체간의 관계에서 발생하는 업무 이벤트나 상태의 기록은 내역으로 본다는 기본에 충실하시면 대체로 해결이 됩니다. 

고객이 발생시키는 주문이 있는 상황은 고객이라는 주체에 대한 '고객기본'과 이벤트를 기록하는 '주문내역'이 생기게 되는 것이구요. 창고에 재고가 있는 상황이라면 창고와 상품이라는 주체가 있으니 '창고기본','상품기본'이 존재할거구요, 그 둘의 관계에서 '재고내역' 이라는 현재 상태를 기록하는 엔터티가 추가되면 됩니다.



가장 고민이 될 두 그룹에 대해서 살펴 봤구요, 다른 유형들은 이에 비해선 좀 명확해서 크게 갈등되지 않을 거라 생각해요. 그리고, 이력에 대한 내용은 이전에 변경이력에 대한 이야기를 다뤘던 글(이력 데이터 관리하기)를 참고 해주시면 될 것 같아요. 


다음번에는 사례를 가지고 유형을 분류해나가면서 고민을 해보도록 하겠습니다.