본문 바로가기

데이터 Story/모델링 이론

서브타입은 어떻게 도출하는가?

서브타입을 도출하는 방법은 크게 두 가지입니다.

 

두 개 이상의 유사한 엔터티에서 공통 속성을 분류하는 방법과, 복잡한 엔터티에서 유사한 속성끼리 분류하는 방법이 있습니다.

 

전자는 엔터티를 통합(Generalization)하는 행위이고, 후자는 엔터티를 상세화(Specialization) 또는 논리화(Logicalization)하는 행위입니다.

 

모든 엔터티가 서브타입이 존재하는 것은 아닙니다. 서브타입이 도출되는 엔터티는 소수인데요. 통합할 수 있고 상세화할 수 있는 엔터티에서는 서브타입을 반드시 도출해야 합니다. 물리 모델링 단계에서 다시 하나의 엔터티로 통합되더라도 과정 중에는 도출해야 합니다. 모델링은 과정을 의미하니까요.

 

[그림1] 모델에는 유사한 엔터티가 있습니다. 두 개 이상의 엔터티가 유사하다고 판단해서, 같은 성격의 속성을 찾으면 슈퍼타입을 도출하게 됩니다.


[그림1]

 

[그림2]가 서브타입을 도출한 모델입니다.



[그림2]

 

[그림1] 모델에서 개인고객·법인고객 엔터티가 유사한 엔터티이고 고객번호·고객명 속성이 유사한 속성이어서, 유사한 속성을 분리해 고객이라는 슈퍼타입을 생성했습니다. 그리고 개인고객·법인고객 엔터티에 고유한 속성은 남아서 서브타입이 됐습니다.

 

슈퍼타입 엔터티에는 서브타입을 구분할 수 있는 속성(고객구분코드)을 관리해야 합니다. 이를 서브타입 구분자(Subtype Discriminator)라고 하는데 슈퍼타입의 특정 인스턴스가 어떤 서브타입과 연관되는지를 구분하는, 슈퍼타입 엔터티의 고유 속성입니다.

 

위의 예제는 유사한 엔터티를 통합하는 과정에서 생기는 서브타입 예제입니다. 반면 아래 예제는 엔터티를 논리화(Logicalization)하는 과정에서 생기는 서브타입 예제입니다.

 

[그림3] 모델도 자주 보게 되는데요. [그림1] 보다는 바람직한 모델이지만 결과를 표현한 모델이 아니라면 바람직하지 않습니다.

 

서브타입을 도출할 수 있는 엔터티(복잡한 엔터티)인데 서브타입이 없어 고유 속성이 도출되지 않았고 관계가 상세하게 표현되지 않았습니다.


[그림3]

 

고객 엔터티에서 고객구분코드 속성이 눈에 띕니다. 이 속성으로 고객 구분이 개인 고객과 법인 고객이라는 것을 알게 되고요. 속성을 하나씩 분석(Logicalization)하면서 개인 고객에만 해당하는 속성, 법인 고객에만 해당하는 속성을 찾게 됩니다.

 

고객 엔터티와의 관계도 마찬가지입니다. 취미·주요제품 엔터티가 개인 고객에 해당하는 관계인지, 법인 고객에 해당하는 관계인지를 분석합니다.

 

이렇게 분석 과정을 거쳐 도출된 모델이 [그림2]입니다. 고객이 어떤 종류로 구성됐는지를 알 수 있고, 각 서브타입에 고유한 속성과 관계를 한눈에 알 수 있습니다.

 

속성과 관계가 복잡하게 얽혀 있는 엔터티는 위와 같은 상세화(Specialization) 과정을 거쳐 서브타입이 도출됩니다.

 

[그림2] 모델에서 다양한 면을 검토해서 결정한 최종 모델이 [그림3] 모델일 수 있습니다. 하지만 [그림2] 모델을 도출하지도 않고 그냥 [그림3] 모델로 남는 것은 모델링을 했다고 볼 수 없습니다. 이는 정규화를 하지 않고 그냥 비정규형 엔터티인 채로 남겨두고 모델링을 했다고 하는 것과 마찬가지입니다.

 

유사한 성격의 엔터티를 모아서 슈퍼타입을 생성하는 방법(Roll-Up Supertypes)이 일반화(Generalization)이며, 복잡한 엔터티를 분해해서 서브타입을 생성하는 방법(Break-Down Subtypes)이 상세화(Specialization)입니다.

서브타입은 위의 두 가지 방법에 의해 도출됩니다.