본문 바로가기
데이터 모델링/모델링 노트 - 관계형 데이터 모델링

1. 엔터티 이야기(7)

by Toddler_AD 2024. 11. 24.

1.12. 행위 엔터티란?

  • 행위 엔터티는 어떤 실체의 업무 행위나 활동에 의해서 생긴 원천 데이터를 관리하는 엔터티다.
    • 엔터티 중에 가장 많은 엔터티가 행위 엔터티다.
  • 행위 엔터티만의 특징은 엔터티 발생 순서가 존재할 수 있다는 것이다.
    • 일반적으로 데이터에는 순서의 개념이 없다. 생성 순서가 중요하지 않다는 것이 더 정확한 표현일 듯 하다.
    • 하지만, 일부 행위 엔터티 간에는 발생 순서가 중요하다.
    • 발생해서 소멸하는 비교적 짧은 라이프 사이클이 존재한다.
  • 행위 엔터티는 관리하는 속성도 대부분 많다.
    • 엔터테도 많고 속해 있는 속성도 많기 때문에 모델링시 가장 많은 시간이 소요되는 엔터티다.
  • 행위 엔터티의 가장 큰 특징 중 하나는 주 식별자가 복잡하다는 것이다.
    • 행위 엔터티는 대부분 하위 엔터티가 적어서 굳이 인조 식별자를 사용할 필요가 없고, 업무 식별자를 사용하기 때문에 주 식별자가 복잡하다.
  • 업무 식별자를 사용하는 것은 모든 엔터티의 원칙이다.
    • 정규화를 한 후에 비정규화를 고려하는 것이 원칙이듯이 업무 식별자를 선택한 후 인조 식별자를 고려하는 것이 원칙이다.
    • 인조 식별자를 남발하면 데이터 성격을 파악하기 어려워지는데, 특히 행위 엔터티에서 이런 현상이 많이 나타난다.
  • 행위 엔터티의 업무 식별자를 도출하는 방법은 이미 널리 알려진 대로 누가/무엇을/언제/어떻게/어디에서 했는지를 분석하는 것이다. 
    • 이 중에 전부가 모여야 인스턴스를 유일하게 식별할 수도 있고, 2~3개가 인스턴스를 발생시킨 주체일 수도 있다.
    • 이와 같은 방법으로 업무 식별자를 도출하기 때문에 행위 엔터티는 주 식별자가 대개 복잡하다.
  • 행위 엔터티는 주 식별자만 복잡한 것이 아니라 관계도 복잡하다.
    • 고객/계좌/부서/사원/상품 등과 같은 다양한 실체 엔터티와 관계가 발생해서 관계 속성이 많다.
    • 실체 엔터티와의 관계만큼 많진 않지만, 생성 순서에 의해 행위 엔터티와의 관계도 발생하고 기준 엔터티와도 관계가 발생한다.
    • 하지만, 일반적으로 가공 엔터티와 관계가 발생하면 잘못된 모델이다.
  • 행위 엔터티의 또 다른 특징은 중복 속성이 많다는 것이다.
    • 상위 엔터티인 실체 엔터티와 조인을 피하고자 상위 엔터티의 속성을 중복시켜 놓을 때가 많다.
    • 실체 엔터티에도 유사한 현상이 있는데, 하위의 행위 엔터티에서 여러 인스턴스를 추출해 가져다 놓는 것이다.
    • 이런 추출 속성이나 중복 속성은 가능한 사용하지 않는 것이 바람직하다.
  • 행위 엔터티의 통합은 실체 엔터티보다 어렵지만, 최대한 통합하는 것이 좋다.
    • 최대한 시도해야 한다. 하지만, 간혹 통합을 위한 통합을 할 때가 있어서 심사숙고해야 한다.
    • 행위 엔터티의 개수가 가장 많고, 유사한 엔터티도 많을 수 있어 통합에 노력을 기울여야 한다.
    • 통합을 고려하기 전에 업무 식별자가 명확해야 한다는 점은 염두에 두어야 한다.
  • 개수도 많고 속한 속성도 많아서 행위 엔터티를 분석하는 데 오랜 시간이 소요된다.
    • 따라서 시간에 쫒겨 대략 설계하기도 한다.
    • 또한, 어떤 행위를 관리할지, 주 식별자를 어떻게 정할지에 따라 모델러마다 행위 엔터티를 달리 설계할 수 있다.
    • 정형화되지 않아 설계하기 어려운 면도 있어 시간 할당을 잘해서 설계해야 한다.

 

 

1.13. 가공 엔터티란?

  • 행위 엔터티와 함께 가장 많은 엔터티가 가공 엔터티다.
    • 업무에 따라 가공 엔터티가 월등히 많아지기도 한다.
    • 많은 만큼 제대로 설계하면 시스템 전체가 깔끔해진다.
  • 가공 엔터티는 원천 데이터가 아닌 데이터를 관리하는 엔터티다.
    • 원천 데이터는 실체/행위/기준 엔터티의 데이터를 가공한 데이터를 관리하는 엔터티로 주로 집계/요약/임시 데이터를 관리하는 엔터티가 가공 엔터티다.
  • 집계 엔터티는 주의해서 정의해야 한다.
    • 어떤 데이터를 집계한 속성이 하나 이상 있다고 집계 엔터티가 되는 것은 아니다.
    • 그 엔터티의 기초 속성은 일반 속성이며, 일부 속성만이 집계 성격의 속성일 수 있다.
    • 이때의 집계 속성은 성능 때문에 관리하는 추출 속성일 뿐 그 엔터티의 성격을 좌우하는 속성은 아니다.
      • 예를 들어, 고객명, 주민등록번호 등을 관리하는 고객 엔터티에 포인트총합 속성이 있다고 고객 엔터티가 집계 엔터티가 되는 것은 아니다.
  • 반대로, 포인트총합/사용포인트총합 등을 관리하는 집계 엔터티에 고객명 속성이 있다고 그 엔터티가 실체 엔터티가 되는 것은 아니다.
    • 기초 속성이 무엇이냐에 따라 그 엔터티의 성격이 정해진다.
    • 집계 성격의 속성때문에 집계 엔터티를 홍동하는 때가 있어 주의해야 한다.
  • 가공 엔터티는 다양한 방법으로 사용된다.
    • 업무에서 가장 많이 사용하는 가공 엔터티는 DW 시스템에서 많은 부분을 차지하는 집계 엔터티다.
    • 집계 엔터티를 사용하는 이유는 조회 시간을 줄이기 위해서다.
    • 만약 원천 데이터를 바로 집계해도 크게 불편하지 않다면 굳이 집계 엔터티를 사용할 이유는 없다.
    • 따라서 원천 데이터를 실시간으로 집계하는 것이 가능한지에 대한 판단은 매우 중요하다.
  • 그리고, 업무 처리 대상을 한정시키기 위해 해당 데이터만 별도로 보관하는 작업용 엔터티가 간혹 존재한다.
    • 처리 예정 내역을 관리하거나, 오류를 대비해 대상을 별도로 관리하곤 한다.
    • 일단 이런 작업용 엔터티는 없앨 수 있는지를 먼저 고려해야 한다.
    • 작업용 엔터티가 없다고 가정하고 설계해보면 실제로 필요치 않을 수 있다.
    • 어떤 데이터의 부분집합을 별도로 보관하는 엔터티도 흔하다.
    • 또한 조회 성능을 고려해서 데이터를 분산시키기 위해 엔터티를 복사해서 사용하기도 한다.
  • 가공 엔터티는 보통 집계 기준(dimension) 역할을 하는 엔터티 이외의 엔터티와는 관계가 존재하지 않는다.
    • 집계 엔터티가 행위 엔터티와 관계가 존재하거나, 다른 집계 엔터티와 관계가 존재하면 잘못된 관계가 아닌지 주의해서 검토해야 한다.
  • 가공 엔터티의 주 식별자는 집계하려는 기준을 의미한다.
    • 따라서, 복잡한 기준으로 집계한다면 주 식별자가 복잡할 수 있다.
    • 하지만, 가공 엔터티는 대부분 주 식별자가 복잡한 게 문제가 되지 않는다.
  • 실무에서 가공 엔터티는 별로 통합하지 않지만, 가공 엔터티 역시 통합할 만한 충분한 가치가 있다.
    • 시스템에 따라 다르지만 보통 집계 성격의 데이터는 시스템 전체에서 상당한 부분을 차지한다.
    • 집계 요건은 갈수록 많아질 수밖에 없으므로 요건이 생길 때마다 엔터티가 생성되면 안 될 일이다.
    • 통합을 적극적으로 고려하는 것이 좋다.
  • 집계 엔터티의 통합이 중요한 가장 커다란 이유는 데이터가 중복됨으로 말미암아 데이터 정합성이 문제가 되기 때문이다.
    • 집계는 보고하기 위하거나 자료를 작성하기 위해서 사용되므로 서로 일치하지 않는 데이터가 존재하면 데이터는 신뢰할 수 없게 된다.
    • 정합성에 문제가 없더라도 엔터티 개수가 많은 것은 시스템에 좋지 않은 영향을 미치기 때문에 바람직하지 않다.
  • 가공 엔터티는 일반적으로 원천 엔터티보다 숫자가 월등히 많다. 원인은 몇 가지가 있을 것이다.
    • 우선 원천 엔터티를 가공하는 방법이 많기 때문에 가공 엔터티가 많아진다.
    • 원천 데이터를 다양하게 가공한다.
    • 같은 데이터이지만 화면이 달라서 집계 엔터티가 달라지기도 하고, 사용자가 달라서 엔터티가 달라지기도 한다.
    • 작업의 편이성을 위해 데이터를 중복으로 관리하기도 한다.
  • 또한 일반적으로 가공 엔터티를 정제하는 프로젝트가 많지 않다.
    • 대부분 원천 데이터를 중요시하기 때문에 가공 데이터는 신경을 덜 쓰게 된다.
    • 따라서 엔터티 통합도 제대로 이뤄질 수 없다.
    • 게다가 사용하지 않는 가공 엔터티를 식별해 삭제하는 일도 제대로 이뤄지지 않는다.
  • 연관된 문제지만 가공 엔터티는 프로젝트 후반에 개발이 진행되므로 일정에 쫒기게 된다.
    • 원천 데이터가 확정돼야 집계 데이터가 결정될 수 있기 때문에 분석 시기도 뒤로 밀려 흐지부지되기 쉽다.
    • 이런 이유 때문에 집계 엔터티는 충분한 분석 없이 화면 단위로 생성되는 것이 현실이다.
  • 현실적으로 원천 엔터티조차 분석하는 시간이 충분하지 않기 때문에 가공 엔터티에 신경 쓸 여력이 없는 것도 사실이다.
    • 하지만, 원천 엔터티가 깔끔해도 가공 엔터티가 무분별하면 시스템 전반적으로 문제가 발생하기 때문에 가공 엔터티도 신경 써서 분석해야 한다.
    • 그래야 전체적으로 효율적이고 안정적인 시스템이 된다.
    • 물론 가공 데이터의 사용을 지양할수록 시스템의 효율성은 높아진다.

 

 

 

 

 

1.14. 기준 엔터티란?

  • 기준 엔터티는 크게 두 가지로 구분할 수 있다.
    • 코드 데이터처럼 기준 정보 성격의 데이터를 관리하는 엔터티가 있고,
    • 과목 데이터처럼 기본 정보 성격의 데이터를 관리하는 엔터티가 있다.
    • 둘 다 업무의 기준이 되는 엔터티로서, 업무를 수행할 때 참조되기 때문에 참조(Reference) 엔터티라고도 한다.
  • 기준 엔터티 중에 기본 정보를 관리하는 엔터티는 실체 엔터티와 여러 면에서 유사하다.
    • 보이는 것을 관리하는 실체 엔터티와 달리 개념적인 것을 관리하는 게 다를 뿐이다.
    • 인조 식별자를 사용하거나 변경 이력 데이터는 별도로 관리해야 하는 등 실체 엔터티의 특징을 그대로 따르게 된다.
  • 환율 데이터와 같은 업무 기준 정보를 관리하는 엔터티는 개념적이기 때문에 연상하기 어려워 엔터티로 도출하기 어려울 수 있다.
    • 이런 엔터티는 하위 엔터티가 존재하지 않기 때문에 업무 식별자를 주 식별자로 사용하며, 변경 이력 데이터까지 같이 관리하도록 설계하는 게 주요 특징이다.
    • 집계 엔터티와 특징이 겹치는 엔터티다.
  • 기준 엔터티를 설계할 때, 관심을 둬야 할 부분은 역시 통합이다. 통합에는 두 가지 의미가 있다.
    • 우선 기준이라는 의미에는 원천적으로 하나만 존재한다는 의미가 내포돼 있어, 기준 데이터가 중복으로 존재해선 안 된다.
    • 데이터를 하나로 통합해야 한다.
      • 예를 들어, A 부서에서 관리하는 환율 엔터티와 B 부서에서 관리하는 환율 엔터티는 통합하여 하나의 엔터티에서 관리하는 게 바람직하다.
    • 통합의 다른 의미는 구조를 통합하는 것이다.
      • 업무의 기준이 되는 금액이나 날짜 등을 개별 엔터티에서 관리하는 것이 아니라 하나의 엔터티에서 통합 관리하는 것이다.
      • 이처럼 기준 엔터티는 두 가지 의미의 통합을 해야 한다.
  • 그 밖에 행위 엔터티에 비해 데이터 건수가 적다는 것이 기준 엔터티의 특징이다.
    • 자체 건수가 많지 않아 비록 소량의 데이터지만, 행위 엔터티 등에서 사용되므로 시스템 전반적으로 영향을 미치는 것이 기준 데이터다.
  • 기준 엔터티를 제대로 설계하면 무엇보다 데이터 품질이 좋아진다.
    • 실체나 행위 엔터티의 데이터 품질과 직결되는 것이 기준 엔터티다.
    • 또한 어떻게 정의하고 어떻게 통합하느냐에 따라서 전체 모델 구조가 좋아지므로 숙고하여 설계해야 한다.
  • 이상으로 엔터티 분류법인 실체/행위/가공/기준 엔터티의 특징에 대해 설명했다. 마지막으로 강조하고 싶은 것은 엔터티 정의가 혼합돼서는 안 된다는 것이다.
    • 예를 들어, 실체와 행위 엔터티의 성격이 혼합돼 있으면 안 된다.
    • 행위 엔터티로 정의했으면 행위 엔터티의 성격만을 가지고 있어야 한다.,
    • 혼합된 상태로 엔터티를 사용하면 언젠가는 오용하게 된다.
  • 엔터티 정의가 혼합되면 엔터티 정의를 제대로 하지 못한 것이다.
  • 현행 엔터티를 분석할 때도 엔터티 정의가 혼합되진 않았는지 주의해서 검토해야 한다.