본문 바로가기
데이터 모델링/프리미엄 가이드 - 관계형 데이터 모델링

07. 엔터티(Entity)(3) - 실체 엔터티

by Toddler_AD 2024. 11. 28.

7.3. 엔터티 종류

  • 엔터티를 분류하는 목적은 어떤 종류의 엔터티가 존재하는지를 인지해 엔터티의 성격을 파악하는 데 도움을 주기 위해서이다.
    • 어떤 종류의 엔터티가 존재하는 지를 아는 것은 중요하다.
    • 엔터티 종류를 보면 엔터티에 대해 이해하는 데 도움이 될 것이다.
    • 이미 정의된 분류를 기반으로 자신만의 분류 체계를 만들어 엔터티를 정의하는 데 활용하는 것도 좋은 방법이다.
  • 엔터티 분류의 또 다른 목적은 현행 데이터베이스가 존재할 때 작업 순서를 정하는 데 도움이 된다는 점이다.
    • 가공 엔터티보다는 행위 엔터티를 먼저 작업하는 게 좋고 행위 엔터티 보다는 실체나 기준 엔터티를 먼저 작업하는 게 좋다.
    • 단계적으로 접근하기 위해 엔터티를 분류하는 것은 의미가 있다.
  • 하지만, 프로젝트에서 엔터티를 정확하게 분류하는 것은 현실적으로 어렵다.
    • 일정도 문제가 되며 모든 엔터티를 분류하기는 힘들 수 있다.
    • 엔터티를 분류하려면 데이터 성격을 알아야 하는데 수 많은 전체 엔터티를 분석해서 분류하기는 쉽지 않다.
  • 엔터티 분류는 초반에 이루어져야 하는데 분류에 집착하다 보면 앞으로도 한 발자국도 나아가지 못하게 할 수도 있다.
    • 그렇다고, 모델링이 끝나고 분류가 나오는 것은 의미가 반감된다.
    • 이상적인 순서는 먼저 현행 엔터티 전체를 분류하고 실체 엔터티로 분류된 핵심적인 엔터티를 대상으로 개념 모델링을 진행하는 것이다.
    • 하지만, 필자가 경험한 프로젝트에서 이렇게 진행할 수 있는 자원(인력, 시간)이 허용된 프로젝트는 없었다. 다른 사람의 경험도 마찬가지일 것이다.
  • 비록 현실적인 환경이 여의치 않다고 해도 엔터티의 본질을 이해하는 데 도움이 되므로 아래와 같이 분류해 볼 것을 추천한다.
    • 실체 엔터티 : 실체 물체(보이는 실상)에 대한 본질적인 데이터를 관리하는 엔터티
    • 행위 엔터티 : 행위나 활동에 의해서 발생된 원천 데이터를 관리하는 엔터티
    • 가공 엔터티 : 원천 데이터를 추출, 집계한 데이터를 관리하는 엔터티
    • 기준 엔터티 : 실체나 행위 데이터의 기준이 되는 데이터를 관리하는 엔터티
  • 필자가 엔터티를 위와 같이 분류한 기준은 데이터의 성격이다.
    • 엔터티 용도나 생성 순서 등에 따른 분류도 있지만 데이터 성격으로 구분해야 엔터티 정의에도 활용될 수 있어 일관적이라 생각한다.
  • 하지만, 어떤한 분류도 완전할 수 없으며 현실적으로 엔터티를 분류해야 하는 절대적인 이유는 없다.
    • 필자는 무엇인가를 분류해 체계화하는 것을 중요하게 생각하지만 항상 절대적으로 필요하다고는 생각하지 않는다.
    • 본질을 이해하는 데 도움을 주는 부가적인 요소일 뿐이지 그 자체가 본질은 아니다.
  • 어떤 것이든 분류 기준을 일관되게 적용해 정확하게 분류하는 것은 사실상 불가능하다.
    • 가장 단순할 수 있는 남녀의 구분도 쉽지 않을 수 있는 것이 분류이다.
    • 그리고, 어떤 분류 체계를 선택하더라도 범주에 들지 않는 '기타'가 존재한다.
    • 분류에 지나치게 집착하는 것은 바람직하지 않다.
    • 무엇보다 데이터의 본질(주제)을 정확하게 도출하는 것이 가장 중요하다.
    • 이 능력이 모델러가 갖추어야 할 핵심 무기다.

 

실체 엔터티

  • 실체의 사전적 의미는 '실체의 물체(物體) 또는 외형에 대한 실상(實相)'이다.
    • 실체는 물리적인 형태가 있는 보이는 물체다.
    • 실체 엔터티는 보이는 물체에 대한 데이터를 관리하는 엔터티다.
    • 고객/제품/비품/사원/창고/수표/노트북 등이 실체 물체다.
  • 실체 엔터티에서는 실체의 본질적인 데이터를 관리한다.
    • 즉, 실체와 관련 있는 모든 다양한 데이터를 관리하는 것이 아니라 본질적인 데이터만을 관리하는 것이다.
    • 고객 데이터를 관리하면 그 사람의 이름/나이/생년월일/성별 등이 그 사람의 본질을 규정하는 데이터다.
    • 주로 존재(Existence)와 연관된 데이터가 실체 엔터티에서 관리되는 반면에, 그 사람이 발생시키는 데이터는 실체의 본질적인 데이터가 아니다. 
    • 즉, 어떤 계약을 하고 어떤 불만을 얘기하고 몇 번 주문하고 얼마나 출금했는지 등은 실체가 존재하고 나서 그 실체가 발생시킨 데이터(행위 엔터티)이지 본질과 관련된 데이터는 아니다.
  • 실체 엔터티는 보이는 물체의 본질적인 성격을 관리하므로 도출이 용이하다.
    • 반면에 중요한 실체 엔터티를 잘못 도출하면 업무 전반적으로 심각한 상황이 발생하게 된다.
    • 따라서, 실체 엔터티를 행위 엔터티 등으로 도출해 잘못 사용되지 않도록 엔터티를 명확하게 정의하는 것이 중요하다.
    • 다시 강조하지만, 엔터티를 분류하는 것 자체가 중요한 것은 아니다.
    • 엔터티 정의가 정확하면 잘못 분류하는 것은 큰 문제가 되지 않을 것이다.
  • 실제로 구분하기 모호한 엔터티는 얼마든지 존재한다.
    • 분류가 애매할 수 있는 엔터티 중에 카드 엔터티가 존재한다.
    • 엔터티 명이 불분명해 판단하기가 쉽지 않다.
    • 플라스틱으로 만들어진 매체로서의 카드 데이터를 관리하는지 카드계약 데이터를 관리하는지가 명확해야 한다.
    • 플라스틱 카드 데이터를 관리하면 실체 엔터티다.
      • 카드종류, 발급일자 등의 속성이 관리될 것이다.
  • 반면에 카드계약은 고객이 카드를 사용하기 위해 계약한 데이터를 관리하는 엔터티다.
    • 계약일자, 유효기간, 소유자명, 카드번호, 계약조건 등이 주요 속성일 것이다.
    • 카드계약 엔터티는 행위 엔터티로 분류할 수 있다. 
    • 하지만, 카드예약 엔터티가 카드를 계약한 행위에 의해서 발생한 계약서를 관리하는 엔터티라고 확대하여 해석하면 실체 엔터티에 가까울 수 있다.
  • 계좌라는 엔터티는 더 애매하다.
    • 계좌가 눈에 보이는 통장과는 다르지만 일종의 유가증권으로 간주하면 실체 엔터티로 구분할 수 있으며, 
    • 계좌 개설을 신청해 계약한 것으로 보면 행위 엔터티로 구분할 수도 있다.
  • 직업은 보이는 물체가 아니므로 실체 엔터티는 아니다.
    • 그렇다고 행위에 의해 발생된 데이터를 관리하는 행위 엔터티도 아니다.
    • 직업은 기준 엔터티로 분류하는 것이 가장 적절하다고 생각한다.
    • 직업코드, 직업명, 직업분류 등의 속성은 직업이라는 개념을 떠올리게 하는 기준 정보이기 때문이다.
  • 이렇게 실제처럼 보일 수도 있는 카드, 계좌, 직업 등은 어떤 데이터를 관리하는지 명확하게 정의해야 한다.
    • 애매하게 정의하면 실체에 대한 본질 데이터를 관리하는지 실체의 행위 데이터를 관리하는지 불분명해진다. 
  • 실체 엔터티는 대부분 부모 엔터티가 존재하지 않는다.
    • 존재 종속된 엔터티가 아니므로 부모 엔터티는 존재하지 않는다.
    • 간혹 존재 종속 엔터티일 때도 있지만, 실체 엔터티는 주로 업무의 시발이 되는 데이터로 이루어진다.
    • 대부분 행위 엔터티의 주체가 된다.
  • 실체 엔터티의 주 식별자는 단순한 것이 좋다.
    • 주 식별자를 구성하는 속성의 개수는 적을수록 좋다.
    • 실체 엔터티는 타 엔터티와의 관계에서 최상위에 위치하므로 실체 엔터티의 주 식별자가 복잡하면 하위 엔터티로 미치는 파급 효과가 커진다.
    • 실체 엔터티의 주 식별자는 보통 단순화 되어있다.
      • 예를 들어, 고객 엔터티의 주 식별자는 주로 고객번호를 사용한다.
      • 고객의 업무 식별자라고 할 수 있는 이름과 생년월일, 출생지역, 성별 등의 속성을 이용한 복합 주 식별자를 사용하지 않는다.
      • 고객번호와 같은 인조 식별자를 사용하는 것이 오히려 집합의 성격을 파악하는 데 직관적이며 효과적일 때가 많다.
  • 또한, 주 식별자 값에는 어떠한 체계도 존재하지 않는 것이 바람직하다.
    • 실체 엔터티는 코드 성격의 인조 식별자를 주로 사용하는데 코드의 의미를 부여한 체계가 존재할 때가 많다.
    • 의미를 부여한 체계는 값이 변할 수 있으며,
    • 결국 속성에 종속된 형식이므로 사용을 지양해야 한다.
  • 실체 엔터티는 다른 엔터티에 비해 더욱 과감한 통합이 필요하다.
    • 이는 실체 엔터티가 다른 엔터티와의 관계에서 상위에 존재하기 때문이다.
    • 상위 엔터티가 통합돼야 하위엔터티들도 단순해진다.
    • 통합된 집합은 모든 면에서 단순해진다.
  • 좋은 구조의 모델은 대체로 단순하다.
    • 그리고, 통합된 모델은 유연하며 확장성이 좋아지므로 엔터티가 통합되면 전반적으로 데이터를 사용하기 편해진다. 
    • 특히, 실체 엔터티가 통합되면 전체 모델 구조가 단순해진다.