중복 서브타입은 서브타입끼리 겹쳐지는 부분이 존재하는 서브타입
이 겹쳐지는 부분을 데이터로 어떻게 관리하느냐에 따라 모델링에 영향을 미친다.
중복 서브타입 모델에서 데이터를 관리하는 방법
첫번째 슈퍼타입 인스턴스와 서브타입 인스턴스가 일대일 대응
두번째 슈퍼타입 인스턴스와 서브타입 인스턴스가 일대다 대응
슈퍼타입과 서브타입의 관계비는 논리적 관계비를 의미
슈퍼타입과 개별 서브타입 하나와의 개별관계가 아니라 전체 서브타입과의 관계
즉 서브타입 엔터티를 전부 합쳤을때 슈퍼타입 인스턴스와의 관계를 의미
- 슈퍼타입 인스턴스와 서브타입 인스턴스가 일대일 대응(배타 서브타입과 유사한 방법)
조던은 농구 선수지만 야구선수이기도 하다.
야구선수 슈퍼타입 연관된 서브타입 존재/농구선수 슈퍼타입 연관된 서브타입 존재(1:1)
서브타임 인스턴스 개수 다 합하면 슈퍼타입인스턴스
-슈퍼타입 인스턴스와 서브타입 인스턴스가 일대다 대응
한개의 슈퍼타입 인스턴스가 두개의 서브타입 인스턴스와 대응
운동선수 유형코드 속성값 농구선수, 야구선수, 농구야구선수.... 될수 있음
어떤 인스턴스든지 이 셋중 하나에만 속함.
슈퍼타입 인스턴스 기준으로 보면 배타서브타입( 농구선수, 야구선수, 농구야구선수)셋중하나
서브타입 인스턴스 기준으로 보면 하나의 슈퍼타입 인스턴스가 양쪽 서브타입 엔터티와 모두 관계가 존재해서 배타서브타입과는 다름. 결국 위 개념적으로 표현한 모델은 잘못된 모델이다.
일대일(1:1)이든 일대다(1:M)이든 스키마만 표현한 물리모델만으로는 서브타입인지 확실하지 않다.
배타인지 중복인지 알수가 없다. 배타는 표현가능하지만 중복은 표현할 방법이 없다.
중복서브타입의 주의할 점
중복서브타입의 오해 : 한개의 슈퍼타입 인스턴스와 관계된 서브타입 인스턴스가 여러개라고 생각하는 것
슈퍼타입이라서 여러개의 서브타입 가질수 있다고 생각하는 것 오류!
슈퍼타입과 서브타입은 부모자식 관계가 아님 기본적으로 일대일관계
일대다일 경우
홍길동은 슈퍼타입인 고객 엔터티에 한개의 인스턴스만 존재. 그리고 이 인스턴스와 관계되는 서브타입 인스턴스는 개인고객 서브타입과 사원고객 서브타입이 각각 존재
고객엔터티의 성격을 어떻게 정의하느냐 따라 달라짐
슈퍼타입은 서브타입과 동일한 성격의 데이터를 관리해야 함. 모델의 서브타입인 개인고객과 사원고객은 실체를 의미하기보다 역활을 의미 역활에 대한 정보를 관리하는 데이터
역활을 관리한다면 역활별로 인스턴스가 존재해야 함. 홍길동이라는 사람을 관리하는 인스턴스가 존재하는게 아니라.
개인고객과 사원고객의 역활을 관리하는 두개의 인스턴스가 존재해야함
개별사람을 의미하는 인스턴스와 사람의 역활을 의미하는 인스턴스를 동일한 개념으로 사용하면 문제가됌
일대다인 릴레이션과 같이 데이터를 관리하면, 슈퍼타입에서는 '홍길동'이라는 사람을 관리하게되며 서브타입에서는 홍길동의 역활을 관리하게 됌.
위 릴레이션의 문제! 슈퍼타입에서 홍길동이라는 사람을 관리/ 서브타입에서는 역활을 관리
관리수준이 서로 일치하지 않음. 슈퍼타입과 서브타입은 동일한 데이터를 관리해야 함
위의 릴레이션처럼 관리하면 홍길동에 대한 정보 즉 연락처 주소 취미 등 사람에 종속된 데이터는 중복이 발생
이 중복을 해결하기 위해 별도 엔터티 필요. 아래와 같이 실체 엔터티와 역활 엔터티는 일대다관계
여기서도 문제 발생 고객유형코드 속성이 사용하기 어려워짐 전체고객 개인+사원등 다른종류 서브타입이 많아짐,
조회 시 개인고객 , 개인고객+사원고객 인 경우 다 조회해야함
위 그림은 홍길동이 개인고객이면서 사원고객 여부속성 'Y'값으로 관리되는 릴레이션. 이모델은 변화에 취약하다. 모델만 봐서는 서브타임개념이 보이지 않음
'관계형데이터모데링노트 요약' 카테고리의 다른 글
슈퍼타입&서브타입 물리모델 변환 (0) | 2023.11.04 |
---|---|
완전 서브타입과 불완전 서브타입 (1) | 2023.11.03 |
배타 서브타입 (0) | 2023.10.31 |
Is-A 서브타입과 Part-of 서브타입 (0) | 2023.10.31 |
서브타입과 코드 (0) | 2023.10.30 |