기록이 힘이다.

[모델링 노트] 3. 데이터 통합과 서브타입 이야기 본문

카테고리 없음

[모델링 노트] 3. 데이터 통합과 서브타입 이야기

dev22 2023. 12. 22. 19:28
728x90

통합이 대세인가? 


데이터가 증가하는 것은 성능과 유관하다.데이터 통합 시 실무자들이 가장 우려하는 것은 성능이다.

지나치게 일반화하면 데이터의 정체성이 희석된다. 
파티와 같이 성격이 다른 데이터를 지나치게 일반화해서 통합하는 것은 의도적인 통합니다.
의도적인 통합과는 다르게 의도적이지 않은 통합이 있다. 데이터 정의에 근본적인 문제구 있어 분간이 힘들다. 다른 데이터라도 정의만 유사하게 선언하면 그럴듯한 통합처럼 보인다. 이런 통합은 아예 틀린 것이다. 이에 대한 해법은 우선 데이터 정의를 제대로 하는 것이다. 먼저 정규화를 하여 엔티티 정체성을 명확하게 해야한다.

의도하지 않은 통합, 스스로도 잘 모르는 통합, 통합을 위한 통합을 하지 않기 위해서는 데이터 정의를 제대로 해야 한다.

필자는 주로 실체.행위.기준.가공 엔터티로 나눈다.

 

데이터를 통합하면 데이터 무결성이 저하될 수 있다. 통합해서 같이 사용하게 됨으로써 제약 조건을 생성하지 못하거나, 도메인을 장확히 설정하지 못할 수 있다. 간혹 데이터 타입니 다른 속성도 하나의 속성으로 같이 사용하기도 한다. 이처럼 데이터를 통합하면 하나의 속성에 여러 데이터를 관리할 수 있기 때문에 데이터를 정밀하게 설계하지 못하고 일반화하여 어림해서 설계하게 된다. 

마지막으로 기존에 사용하던 엔터티를 통합할 때는 데이터 마이그레이션을 고려해야 한다. 이는 현실적인 문제다. 통합하는 데 있어 모든 조건을 만족하더라도 마이그레이션에 문제가 생기면 통합 모델을 사용할 수 없다.  

어떤 경우에 통합을 고려하는가?

 

데이터 성격이 유사할 때
가장 원론적인 원칙은 데이터의 성격이 유사할 때 통합할 수 있다는 것이다.데이터의 성격이 개념적으로 유사하면 통합할 수 있다.

엔터티에서 관리하는 데이터의 본질은 속성으로 나타난다. 따라서 속성이 유사하면 본질이 유사할 가능성이 높다.

 

엔터티의 기초 속성이 유사할 때

데이터가 조회 등에 같이 사용될 때

 

고객우편주소, 고객전자주소, 고객전화번호 - 고객한테 연락할 곳이라는 개념에서 유사성

 

역할을 관리할 때

 

사원은 특정 계좌에 대해 관리사원.유치사원.주문사원 등 여러 가지 역할을 할 수 있다. 이때 여러 역할에 따른 엔터티가 개별로 존재하는 것보다 통합 엔터티로 존재하는 것이 바람직하다.

 

대칭적인 업무일 때

 

매도와 매입, 입고와 출고, 매출전표와 매입전표 등 대칭적인 업무에 해당하는 데이터다.

 

계층 관계가 존재할 때

본사 - 부서 - 팀

 

공통 속성이 존재할 때

주식계좌 - 선물옵션계좌 - 수익증권계좌

여러 엔터티에 공통으로 존재하는 통보주소.통보이메일.통보전화번호 속성은 별도의 엔터티로 빼서 통합 관리할 수 있다. 

고객관련내용으로 고객번호, 텍스트종류코드, 관련내용을 관리 가능.

Clob.Blob과 같은 특수 데이터 타입은 별도의 엔터티에서 통합 관리하는 것이 성능.관리 측면에서 효율적일 수 있다. 

 

베타 관계가 발생할 때

베타 관계는 모델의 구조를 복잡하게 만들고, 복잡한 조인이 발생해 바람직하지 않은 관계다. 따라서 베타 관계가 발생하지 않도록 설계하는 것이 바람직하다. 주 식별자가다른 배타 관계일 때는 더욱 주의해야 한다. 

 

집계 엔터티의 집계 대상이 같을 때

집계 엔터티를 설계할 때, 집계하려는 대상이 같다면 통합을 검토해야 한다. 물론 집계 기준이 달라서 통합하지 못하는 경우도 많다.

 

상품별월매출 - 상품별분기 매출 ==> 월이 모여서 분기가 된다. / 간혹 성능 때문에 중간단계의 계산 엔터티를 만들기도 한다.

 

집계 엔터티는 집계하려는 대상과 집계하려는 내용, 집계하려는 기준을 고려하여 통합을 검토해야 한다. 

 

비정규화를 수행할 때

주문 - 주문상품

주문의 기본 데이터를 관리하는 주문 엔터티와 주문 상품을 관리하는 주문상품 엔터티는 마스터, 상세 관계이면서 일대다 관계다. 주문한 상품을 빠르게 조회해야 하는 요건이 최우선이라면, 주문상품 엔터티의 속성은 그대로 두고, 주문상품 엔터티에 주문 엔터티의 속성을 중복해서 관리한다. 

 

일대일 관계일 때

일대일 관계의 엔터티를 합칠 때는 주의해야 한다. 두 엔터티의 성격이 같은지를 검토해야 하고, 관계비가 불변인지를 검토해야 한다. 

 

유사한 종류의 데이터를 하나의 기준으로 만들 때

같은 성격의 데이터가 여기저기 존재하면 업무를 파악하는 데 어려움이 따르기 때문에 유사한 데이터는 통합돼 있어야 업무를 파악하기 수월해진다.

 

업무가 변경될 가능성이 많을 때

데이터를 일반화시킬수록 업무 변경에 유연한 모델이 된다. 데이터는 마치 생명이 있는 유기체와 같아서 변화(진화.퇴화)한다. 업무는 시간이 지날수록 당연히 바뀐다. 핵심적인 업무일수록 요구 사항이 변경.추가될 가능성은 커진다. 이때 엔터티를 통합할수록 새로운 업무가 생길 때 신규 엔터티를 생성하지 않고, 인스턴스만 추가해서 대응할 수 있다.

 

 

 

아래 조건 중에서 하나라도 만족하면 우선 통합을 고민해 보는 것이 좋다. 

- 데이터 본질(성격)이 유사하다

- 식별자가 동일하면서 유사한 속성이 존재한다

- 식별자는 다르지만, 기초 속성이 유사하다

 

정규화를 한 후에 필요하면 통합을 하는 것이다. 정규화를 한 후에 필요하면 비정규화를 하는 것과 마찬가지다. 

 

통합과 합체

합체는 속성을 합치는 것을 의미한다. 인스턴스를 의미하는 집합의 원소를 합치는 것이 아니라, 원소의 특성이라고 볼 수 있는 속성을 합치는 것이다. 따라서 두 엔터티를 합체한다고 해서 인스턴스가 늘어나지 않는다. 속성이 늘어날 뿐이다. 

모델을 통합한 모델

 

모델을 합체한 엔터티