데이터 통합 & 서브타입

장우솔·2024년 6월 12일
0

데이터베이스

목록 보기
5/7

데이터 통합

유사한 성격의 데이터를 합치는 것 (데이터를 일반화한다.)

데이터 통합은 정규화를 기반으로 이뤄져야 한다.
-> 동질성을 판단하려면 데이터 성격을 규정해야 하고, 정규화를 통해 속성과 엔터티에 대한 명확한 이해가 선행돼야 한다. 비정규형은 중복 데이터를 채택한 모델이므로 기본적으로 데이터 성격이 명확하지 않아 통합하기 어렵다.

목적
“데이터”는 기업 전체의 공동 자산으로 특정 담당자가 사용하기 위한 데이터를 관리하는 것이 아니라 데이터를 통합하여 기업 전체적으로 일관되게 사용하도록 해야한다.

데이터뿐만 아니라 업무도 일반화하여 설계하므로 미래에 발생할 업무에서 확장해서 사용할 수 있다
모델 가독성 증가
수정하기 쉽다. =유지보수 효율성 증가

일반화와 상세화

  • 일반화 : 개별적인 것이나 특수한 것이 일반적인 것으로 되게 만들다.
  • 상세화 : 뭉뚱그린 개념에서 구체적인 개념으로 만들어 차이를 도출한다.

-> 일반화, 상세화를 하면 슈퍼타입과 서브타입이 생긴다. 일반화, 상세화 모두 결국은 공통과 차이를 보기 위한 것으로 데이터 통합 이다.

주의할 점

  1. 성능: 인스턴스 증가로 성능이 나빠질 수 있다는 것을 염두에 둬야 한다.

  2. 정체성 희석: 지나친 일반화
    • 유사하지 않은 데이터인데 유사하게 선언한 후에 통합을 검토
    • 지나치게 일반화하여 통합하면 데이터의 정체성이 희석된다.
    Ex: 고객/사원/부서/거래처(개별적인 것) -> 파티(지나친 일반화, 파티에 뭐가 있는지 알 수 없다.

  3. 무결성 저하 : Not NULL 제약 생성 못하는 경우
    Ex: 외국인을 포함한 고객 엔터티에 주민번호와 같은 식별번호로 관리하는 상황
    데이터를 일반화할수록 무결성이 떨어질 수도 있지만, 데이터가 통합되면 특정 속성이 하나만 존재한다는 측면에서 일종의 중복속성이 없어지는 것이므로 무결성이 좋아진다고 볼 수 있다.

데이터 통합을 고려하는 경우

<데이터 성격이 유사할 때>

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

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

  3. 역할을 관리할 때: Ex) 관리사원, 주문사원

  4. 대칭적인 업무일 때: Ex) 매출,매입전표

  5. 계층관계가 존재할 때: Ex) 본사>부서>팀

  6. 공통 속성이 존재할 때

  • 여러 엔터티에 공통 속성이 별도의 데이터 성격을 지닌다면 그 속성만을 분리해 통합한다.

    • 통합엔터티가 하위 엔터티가 되면, 여러 상위 엔터티와 배타 관계가 발생해 바람직하지 않다.-> 고객관련내용이라는 공통 엔터티를 상위 엔터티로 생성하여 배타관계를 해소
    • 하위 엔터티로 관계 속성을 가지면 상위 엔터티의 다양한 주 식별자를 상속받아야하므로 사실상 관리가 힘들다.
  1. 배타관계가 발생할 때

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

  • 집계기준 유사하거나 포함 관계가 있다면 통합한다.
  • 월이 모여서 분기가 되기 때문에 월에 대한 총액만 있으면 이를 합해서 분기를 구할 수 있다.
  1. 비정규화를 수행할 때

  2. 일대일 관계일 때(관계비 불변인지 확인)
    두 엔터티 성격이 같은지 검토하고 관계비가 불변인지 검토

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

  • 일반화한 속성 또한 공용으로 사용할 가능성이 커져 업무변경에 유연하다.
  • 엔터티를 추가하는 방식이 아닌 인스턴스를 추가하는 방식으로 처리가 가능하다.
  1. 유사한 종류 데이터 하나의 기준으로 만들 때

데이터 통합을 고려하지 않는 경우

  • 엔터티가 같이 조회되지 않는 경우(같이 조회 = union 구문 활용)
  • 유사 종류 엔터티가 향후에 늘어나지 않는 경우
  • 유사한 하위 엔터티 없는 경우

주 식별자가 다른 엔터티의 통합

데이터 성격이 유사하고, 관리할 속성이 유사하면 주 식별자가 달라도 통합에 문제가 되지 않는다. 통합 엔터티의 주 식별자는 가능하면 통합 대상 엔터티의 주 식별자를 활용하는 것이 좋다.
-> 업무 식별자를 사용해야 데이터를 생성하는 기준이 명확해지기 때문이다.

주의 : 인조 식별자를 주 식별자로 사용한 경우는 다른 성격의 데이터일 수 있으므로 무조건 통합해서는 안된다.

CASE 1 : 주 식별자 속성의 개수가 같을 때

  • 방법1 : 통합한 주 식별자 생성
    • 예를 들어 두 테이블에 주키를 합치면 고객번호인지 계좌번호인지는 고객계좌구분코드 속성으로 구분할 수 있다.
  • 방법2 : 인조 식별자 사용
    • 장점 : 주 식별자의 길이가 통합된다.
    • 단점 : 속성과 인덱스가 각각 하나씩 추가됐으며 업무식별자가 주 식별자가 아니다.

CASE 2 : 주 식별자 속성의 개수가 다를 때

  • 주 식별자를 통합 후, 주 식별자인 종합계좌순번에 널 데이터가 존재할 수 없기 때문에 기본 값을 사용한다.
  • 인조 식별자를 사용한 통합 : 주 식별자였던 속성도 모두 널 값을 허용해야한다. (엔터티의 의미가 희석됨)

서브타입

언제?
엔터티를 일반화하거나 상세화하면 슈퍼타입, 서브타입이 생긴다.

  • 슈퍼타입 속성 : 서브타입으로 상속되는 공통속성(일반적인 속성, 서브타입에 상속된다.)
  • 서브타입 속성 : 고유한 속성, 슈퍼타입에 속하지 않는다.

서브타입과 부분집합
원소 -> 업무 식별자로 대표되는 하나의 인스턴스
집합 -> 엔터티
부분집합 -> 서브타입
전체집합 -> 슈퍼타입

  • 부분집합 : 전체집합 중 일부집합(개념적인 범주)
  • 서브타입 : 슈퍼타입과 1:1관계에 있는 엔터티(실제적인 엔터티를 나타내는 용어)

서브타입 도출 방법
1. 두개 이상의 유사한 엔터티의 공통 속성을 도출하는 방법(일반화)
유사한 성격의 엔터티를 모아서 슈퍼타입을 생성하는 방법
2. 하나의 엔터티에서 유사한 속성끼리 분류하는 방법(상세화)

서브타입 특징

서브타입 인스턴스는 그에 해당하는 슈퍼타입 인스턴스가 존재해야한다. 반대는 아님
슈퍼타입 서브타입은 부모자식 관계X, 상하위 관계X, 동등한 관계O(필요에 의해 분리된 1:1 관계)
슈퍼타입에 서브타입을 식별할 수 있는 속성이 존재해야 한다(구분자코드)
한 엔터티의 최종 서브타입은 그 집합을 가장 잘 표현한 한 개만 존재해야한다.(~에 따라 업무를 수행하는지)
-> 슈퍼타입에 존재하는 속성과 서브타입에 존재하는 속성을 합하면 전체 속성이 돼야한다. 따라서 여러 개의 서브타입이 존재하면 후보 서브타입에 속할 속성은 없게 된다.

서브 타입 용도

데이터가 어떤 종류로 이루어졌는지 한눈에 보여주기 위하여 사용한다. 작게 나눈 세분화된 부분 집합은 전체 집합보다 이해하기 쉽다. 공통 속성과 관계, 고유 속성과 관계가 표현돼 업무 규칙을 모델에 표현하기도 쉽다.

공통점, 차이점을 보기 좋고 데이터 부분집합이 명확해진다.

확장성을 좋게 한다.-> 상품 확장을 대비한 서브타입 모델을 만들 수 있다.

서브타입 구분방법 1 : 배타 서브타입과 중복 서브타입

배타 서브타입
서브타입 간에 중복이 발생하지 않는다. 서브타입들의 인스턴스 개수를 합하면 슈퍼타입 인스턴스의 개수가 된다

중복 서브타입
서브타입끼리 겹치는 부분이 존재하는 서브타입으로 하나의 슈퍼타입 인스턴스가 두 개 이상의 서브타입 인스턴스와 관계가 존재할 수 있다.
-> 판단 기준 : 특정 시점

서브타입 구분방법 2 : 완전, 불완전 서브타입

완전 서브타입
슈퍼타입 모든 인스턴스가 하나의 서브타입 인스턴스와의 관계가 존재, 슈퍼타입에 인스턴스가 생성될 때 서브타입에도 인스턴스가 생성된다.

불완전 서브타입
슈퍼타입에만 인스턴스가 존재하고 서브타입에는 인스턴스가 존재하지 않는 서브타입, 고유속성 존재X

중첩 서브타입
서브타입 내부에 서브타입이 다시 존재하는 경우

  • 하나 이상의 서브타입 구분자가 필요하고, 구분자 사이에 계층체계가 존재한다.
  • 물리 모델을 생성할 땐 엔터티는 계층을 그대로 구현하지 않고 주로 첫 번째나 마지막 서브타입을 기준으로 물리 모델을 생성한다.
    -> 엔터티 관계 복잡해져서

슈퍼타입, 서브타입 관계 요약

슈퍼타입과 서브타입 모델 물리 모델로 변환하는 방법 3가지

1. 서브타입별로 엔터티 분할
서브타입마다 별도의 엔터티를 만든다

  • 방법 : 슈퍼타입의 주 식별자를 포함한 속성전부를 양쪽 엔터티에 추가한다.
  • 특징 : union 발생으로 성능 저하, 널 값 갖는 속성 줄어듬, 슈퍼, 서브타입 사이 조인X

2. 슈퍼타입 엔터티 하나로 통합

  • 방법 : 각 서브타입에 속하는 속성을 슈퍼타입에 포함시키고, 서브타입을 삭제해 슈퍼타입만 남긴다.
  • 특징 : 엔터티 수 감소해 관리 용이, 엔터티 정체성 희석

3. 슈퍼타입 엔터티와 개별 서브타입 엔터티로 분할

  • 방법 : 슈퍼타입과 개별 서브타입 별도의 엔터티로 분할
  • 특징 : 서브타입 개념을 가장 잘 반영한 물리모델로 관리효율 좋고, join 부담은 있음

-> “조회에 대한 사용자 결합도”에 따라 결정

profile
공부한 것들을 정리하는 블로그

0개의 댓글