행위 엔터티는 많이 알려진 엔터티입니다. 어떤 실체의 업무 행위나 활동에 의해서 생긴 원천(Raw) 데이터입니다. 엔터티 중에 많은 엔터티가 행위 엔터티입니다. 가공 엔터티가 더 많을 때도 있지만요.
행위 엔터티만의 특징은 엔터티 발생 순서가 존재한다는 것입니다. 일반적으로 데이터에는 순서의 개념이 없습니다(생성 순서가 중요하지 않다는 것이 더 정확한 표현이겠네요). 하지만 일부 행위 엔터티는 발생 순서가 중요합니다. 발생해서 소멸하는 비교적 짧은 라이프사이클이 존재합니다.
행위 엔터티는 관리하는 속성도 대부분 많습니다. 본질 보다는 행위가 더욱 많은 요소를 가지니 속성도 복잡합니다. 엔터티도 많고 속해있는 속성도 많으니 모델링 시 가장 많은 시간이 소요되는 엔터티입니다.
제가 생각하는 행위 엔터티의 가장 큰 특징은 주 식별자가 복잡하다는 것입니다. 행위 엔터티는 주로 업무 식별자를 사용하는데요. 대부분 하위 엔터티가 소수로 존재해서 굳이 인조 식별자를 사용할 필요는 없습니다.
물론 주의할 점은 계약과 같은 엔터입니다. 제 책에서도 사례를 몇 가지 적었지만 계약을 실체 엔터티로 볼지 행위 엔터티로 볼지는 의견이 나뉠 거 같습니다. 그래서 저는 엔터티 분류를 정확히 가르는 것을 좋아하지 않습니다. 어려우니까 피하죠. ㅎㅎ
어쨌든 이 글에서 하고 싶은 얘기는 계약을 행위 엔터티로 보더라도 업무 식별자(지점번호+상품번호+일자)를 사용하지 않고 인조 식별자(계약번호)를 사용하는 것이 바람직합니다. 하위 엔터티에 미치는 영향 등이 이유입니다.
하지만 대부분 행위 엔터티는 업무 식별자를 그대로 사용합니다. 사실 업무 식별자를 사용하는 것이 모든 엔터티의 원칙입니다. 정규화를 하고 비정규화를 고려하는 것이 원칙이듯이 업무 식별자를 선택한 후 인조 식별자를 고려하는 것이 원칙입니다. 인조 식별자를 남발하면 데이터 성격을 파악하기 어려워집니다.
행위 엔터티의 업무 식별자를 도출하는 방법은 이미 널리 알려진대로 누가 무엇을 언제 어떻게 어디에서 했는지를 분석하는 것입니다. 이 중에 전부가 모여야 인스턴스를 유일하게 식별할 수도 있고요. 2~3개가 인스턴스를 발생시킨 주체일 수 있습니다. 따라서 주 식별자가 대개 복잡합니다.
이로 인해 주 식별자만 복잡한 것이 아니라 관계도 복잡합니다. 다양한 실체와 많은 관계가 발생해서 관계 속성이 많습니다. 실체 엔터티와의 관계만큼 많진 않지만 행위 엔터티와의 관계도 발생합니다. 기준 엔터티와도 발생하고요. 하지만 일반적으로 가공 엔터티와 관계가 발생하면 잘못된 모델입니다.
저는 관계선 표현을 중요하게 생각해서 모든 관계는 원칙적으로 표시합니다. 부서나 사원과 다양한 관계도 모두 표시합니다(해당 사이트에서 정한 표준 작도법에 따라 다소 달라지긴 하지만요). 다만 모든 엔터티에 공통적으로 들어가는 속성과의 관계선은 생략하고요.
행위 엔터티의 특징 중 하나는 중복 속성이 많다는 것입니다. 상위 엔터티인 실체 엔터티와 조인을 피하려고 상위 엔터티의 속성을 중복시켜 놓을 때가 많습니다. 실체 엔터티에도 이런 현상은 있죠. 하위의 행위 엔터티에서 여러 인스턴스를 추출해 가져다 놓는데요. 추출 속성과 중복 속성에 대해서는 별도로 다루겠습니다. 어쨌든 추출·중복 속성은 보수적으로 사용해셔야 될 거 같습니다.
마지막으로 행위 엔터티의 통합인데요. 실체 엔터티보다 어렵지만 최대한 통합하는 것이 좋습니다. 통합은 최대한 시도해야 한다고 생각합니다. 그런데 간혹 너무 통합한다 싶을 때가 있어서 심사숙고가 필요합니다.
행위 엔터티의 개수가 가장 많아 유사한 엔터티도 많을 수 있어 통합에 노력을 기울여야 하고요. 통합를 고려하기 전에 업무 식별자가 명확해야 한다는 점은 염두에 두셔야 됩니다.
'데이터 Story > 모델링 이론' 카테고리의 다른 글
기준 엔터티란? (0) | 2011.02.16 |
---|---|
가공 엔터티란? (0) | 2011.02.16 |
실체 엔터티란? (0) | 2011.02.16 |
엔터티 분류(실체/행위/가공/기준) (0) | 2011.02.16 |
종속 엔터티의 식별(Identifying) 관계 (5) | 2011.02.16 |