본문 바로가기

데이터 Story/모델링 이론

완전(Complete) 서브타입 & 불완전(Incomplete) 서브타입

지난 번에 서브타입을 구분하는 방법으로 배타(Exclusive)·중복(Inclusive) 서브타입을 설명했습니다. 이번에는 완전(Complete) 서브타입과 불완전(Incomplete) 서브타입을 설명하겠습니다.

 

완전(Complete) 서브타입은 슈퍼타입의 모든 인스턴스가 최소한 하나의 서브타입 인스턴스와 관계가 존재하는 서브타입입니다.

 

반면에 불완전(Incomplete) 서브타입은 슈퍼타입에만 인스턴스가 존재하고 서브타입에는 인스턴스가 존재하지 않는 서브타입입니다. 즉 고유 속성이 존재하지 않는 서브타입입니다.

 

이렇게 슈퍼타입 인스턴스와 서브타입 인스턴스의 관계를 인스턴스 제약(Instance Constraints)이라고 합니다. 인스턴스 제약에 따라 완전(Complete) 서브타입과 불완전(Incomplete) 서브타입으로 구분할 수 있는거죠.

 

완전 서브타입이 대부분을 차지하며 일반적이므로, 실무에서 불완전 서브타입을 주의해서 구별할 수 있어야 합니다.

 

[그림1] 모델에서 서브타입은 개인고객·사원·가망고객이 존재합니다. 이중 가망고객은 이름과 주민등록번호만 관리한다는 요구 사항 때문에 고유 속성이 없습니다.



[그림1]

 

위 모델을 물리 모델로 변환하면 [그림2]와 같이 됩니다1). 가망고객 서브타입은 속성이 없기 때문에 서브타입 엔터티로 변환되지 않습니다.



[그림2]

 

[그림3] [그림2]에 대한 릴레이션입니다. 가망고객인 김길동은 서브타입 릴레이션이 없고, 슈퍼타입인 고객 릴레이션에만 존재하므로 불완전(Incomplete) 서브타입입니다.

 

[고객]

#고객번호

고객명

주민번호

고객구분코드

12345

홍길동

123456-7890123

개인고객

67890

이길동

678901-2345678

사원

34567

김길동

345678-9012345

가망고객

 

[개인고객]

#고객번호

사업자번호

업종구분코드

12345

123-45-67890

개발

 

[사원]

#고객번호

사원번호

입사일자

67890

2345

2025-02-02

 

[그림3]

 

슈퍼타입에 인스턴스가 생성될 때 서브타입에도 인스턴스가 생성되면 완전(Complete) 서브타입이며, 그렇지 않으면 불완전(Incomplete) 서브타입입니다.

 

불완전(Incomplete) 서브타입이 드물기는 하지만 중복(Include) 서브타입보다는 자주 볼 수 있습니다. 엔터티를 과감하게 통합하면 얼마든지 나올 수 있습니다. 또한 중복 서브타입과는 달리 데이터를 관리하는 데 어려움이 없습니다.

 

완전·불완전 서브타입은 배타·중복 서브타입을 도출하는 것보다 훨씬 수월합니다.

 

1)     슈퍼타입과 서브타입을 각자 엔터티로 도출한 유형을 사용