모델링을 하다보면 기존 엔터티에 몇 개의 속성을 추가하면 그만일지, 별도의 엔터티를 만들어 주어야 할 지 고민이 될때가 자주 있습니다. 오늘은 그런 상황에 대해서 생각해 보도록 하겠습니다.
예를들어 다음과 같은 직원 엔터티가 있다고 하겠습니다.
<모델1. 직원>
아버지의 성명을 관리해야 한다면 속성하나의 추가로 가능합니다. 이것으로 그만이라면 현재의 모델은 이대로 완벽하지요.
그런데, 조금 시간이 지나니 직원 부모의 환갑 축하금을 드리기 위해 아버지의 생년월일도 관리해야 한다고 합니다. 그러다보니 아버지만 드리면 안된다고 어머니도 드려야 한다고 하지요. 몇년이 지나 복지가 확대되어 자녀 출산 축하금도 지급하고 초등학교 입학선물도 준다고 하면 아이들 정보도 관리해야 하겠지요.
어느정도 까지는 아래와 같이 속성을 추가해가면서 커버할 수 있습니다.
<모델2. 직원>
그러나 어느순간 한계에 부딪히겠죠. 자녀가 많은 사람이 생기면 속성을 계속해서 추가할 수는 없으니까요.
이렇게 되면 별도 엔터티를 추가해서 관리해야 합니다.
<모델3. 직원&가족>
이제 속성을 계속 추가할 걱정이 없어져 모델 관리자는 한 숨 놓게 됩니다.
모델1에서 2로, 또 2에서 3으로 진화한 것 처럼 보이시나요?
그렇진 않습니다. 위의 세가지 중 어느 모델이 더 좋고 나쁜건 없습니다. 설명에서 보이듯 우리 회사의 업무 상황이 이들 중 어느 모델 수준에 적합한 상태이냐만이 중요할 뿐입니다.
모델1은 직관적이라는 장점이 있습니다. 모델만 보고도 누구나 아버지라는 가족을 관리한다는 걸 알 수 있죠. 그에비해 모델3는 가족 엔터티에서 어떠한 관계들이 (예를들어 아버지, 어머니, 아들, 딸과 같은) 관리된다는걸 모델만 보고는 알수가 없습니다. 덜 직관적이고 다소 추상화 되었다고 할 수 있습니다.
이에 비해 모델3은 각 엔터티에 대한 정보나 업무규칙을 추가할 수 있다는 장점이 있습니다. 가족의 생년월일 이라든지 복지 유형 이라든지 해당 축하금을 언제 지급했는지 하는 정보를 가족 엔터티에 추가할 수 있구요. 직원에 관계된 가족만 관리하는데, 가족이 없는 직원이 있을 수 있다는 업무규칙을 관계를 통해서 알 수 있습니다.
지금까지는 직원 정보에 가족 정보가 추가되는 정보 측면의 예를 살펴봤는데요. 업무 흐름이 진행되는 모습에도 똑같은 패턴이 적용됩니다.
예를들어 뭔가 접수를 했는데, 이것을 승인하는 정보를 추가해서 관리해야 하는 경우라면 처음에는 다음과 같이 하나의 엔터티로 처리 가능하겠지요.
<모델4. 접수>
그러다가 승인 이후에 지급하고 취소하고 하는 흐름이 추가되면 속성이 계속 추가 됩니다.
<모델5. 접수>
해당 업무 처리의 중요도가 커져 속성이 많이 추가되면 어느순간 엔터티의 분리가 필요하게 됩니다.
<모델6. 접수&승인>
이때도 역시 대상 업무가 어떠한 수준인가가 모델4,5,6 중 어느것이 적합한가를 결정하게 됩니다.
오늘은 속성으로 모델링할지 엔터티로 모델링할지 하는 선택에 대해서 살펴 보았습니다.
'Data Modeling' 카테고리의 다른 글
잘못된 관계를 설정 하면 발생하는 일 (2) | 2013.05.23 |
---|---|
관계 종류 결정하기 (0) | 2013.05.18 |
서브타입 해체하기 (0) | 2013.05.01 |
이력 데이터 관리하기 (4) | 2013.04.24 |
공통 데이터 다루기 (0) | 2013.04.18 |