엔터티를 도출하는 것이 실질적인 첫 단계이므로 엔터티를 명확하게 정의하는 것은 매우 중요하다.
엔터티가 불분명하게 정의되면, 그 엔터티에 속한 속성이나 주 식별자가 부정확할 수밖에 없고 모델은 최적화되기 어렵다.
모델링에서 엔터티를 제대로 도출하는 것이 가장 중요하다는 점을 염두에 두어야 한다.
7.1. 엔터티란?
- 엔터티가 무엇인지를 정의하는 것은 쉽고도 어렵다. 간단하게 설명하면 필요에 의해 관리하고자 하는 데이터의 집합이라고 할 수 있다.
- 업무를 수행하는 데 필요한 데이터를 특성이 유사한 것끼리 모아 놓은 독립적인 집합이 엔터티다.
- 특성이 유사한 것끼리 모았다는 것은 함수 종속을 의미하므로 업무에서 관리하고자 하는 데이터(속성)를 함수 종속(Functional Dependancy)에 의해 도출한 결과 집합이 엔터티라고 정의할 수 있다.
- 엔터티는 '사람(People)/장소(Place)/사물(Object)/사건(Event)/개념(Concept) 등을 표현한 집합이다.'라는 정의는 가장 일반적인 정의다.
- 엔터티를 우리말로 실체(實體)라고 한다.
- 하지만, 엔터티를 실체의 물체(物體) 또는 실상(實相)이라는 실체의 사전적 의미만으로 정의할 수는 없다.
- 왜냐하면, 보이는 것만이 아니라 개념적인 것도 엔터티가 될 수 있기 때문이다.
- 즉, 보이지 않는 추상적인 것도 집합이 될 수 있고 엔터티가 될 수 있다.
- 보이지 않는 것에 대한 데이터를 엔터티로 도출하는 것은 보이는 것을 엔터티로 도출하는 것보다 어려운 작업이다.
- 또한, 잘못된 집합으로 도출되었을 때 의외로 골칫거리가 될 수 있다.
- 만져서 알 수 있는 것(Tangible)에 대해 테이터로 관리하는 엔터티의 예로는 고객/노트북/상품/자동차 등이 있으며,
- 개념으로 존재하는 것(Conceptual)에 대한 데이터를 관리하는 엔터티로는 환율/강좌/분류 등이 있다.
- 물리적으로 존재하는 물체를 관리하는 엔터티의 인스턴스는 물체의 개수와 동일하다.
- 예를 들어, 노트북을 관리하는 엔터티의 인스턴스가 100개라면 그 회사에서 관리하는 노트북은 100대가 있는 것이다.
- 물론 과거데이터를 어떻게 관리하느냐에 따라 인스턴스의 숫자는 달라질 수 있다.
- 반면에 계좌유형이나 상품카테고리, 코드 등은 볼 수 없고 만질 수도 없다.
- 실제로 존재하는 실체가 아닌 논리적으로만 존재하는 개념일 뿐이다.
- 이런 개념 엔터티에 존재하는 인스턴스는 당연히 실제로 존재하는 물체가 아니다.
- 엔터티에 대한 이해를 돕기 위해 엔터티의 종류를 더욱 세분화해 설명할 것이다.
- 그보다 먼저 실제로 존재하는 엔터티와 개념으로 존재하는 엔터티, 즉 만져서 느낄 수 있는 실체를 관리하는 엔터티와 그렇지 않은 엔터티를 먼저 구분하는 게 엔터티를 도출하는 시발점이 될 수 있다.
- 데이터 모델링에서 가장 중요한 것은 엔터티를 도출하는 것이다.
- 그리고, 엔터티를 도출할 때 가장 중요한 것은 정의를 어떻게 할 것인가이다.
- 집합을 어떻게 정의하는냐에 따라 엔터티가 결정된다.
- 엔터티를 어떻게 정의하느냐에 따라 집합이 달라지기도 한다.
- 여기서 말하는 정의는 엔터티에 대한 설명을 의미하는 것은 아니다.
- 엔터티를 구성하는 데이터의 정체성(주체)을 의미하는 것이다.
- CASE 툴에서 엔터티 박스를 그리고 해당 엔터티에 대한 설명(Definition)을 적은 것을 엔터티 정의라고 하지 않는다.
- 식별자가 무엇이고, 서브타입은 무엇인지, 어떤 집합으로 구성됐는지 등을 도출하는 것이 엔터티 정의다.
- 슈퍼타입과 서브타입도 집합을 정의하기에 따라 도출될 수 도 있고 아예 시도조차 되지 않고 별도의 집합으로 끝까지 존재할 수도 있다.
- 완전하게 같은 집합은 없을 것이므로 집합을 얼마나 일반화하느냐에 따라 서브타입은 도출된다.
- 조금 다른 집합들에 대해 포괄적인 의미를 부여해 동질성을 가지도록 할 수도 있다.
- 물론, 지나치게 일반적인 개념을 기준으로 정의하면 데이터의 본질이 변질될 수도 있다.
- 집합을 어떻게 정의하느냐가 모델링 전체 단계에서 가장 중요하고 어려운 작업이다.
- 엔터티를 도출할 때 가장 기본적으로 판단해야 하는 것은 관리하고자 하는 데이터인지를 판단하는 것이다.
- 데이터베이스로 관리할 필요가 없는 데이터에 대해 어떤 집합으로 정의할지를 고민할 필요는 없다.
- 하지만, 관리할 필요가 없는지에 대한 판단에서도 고민이 필요하다.
- 관리하면 좋을 것 같은 데이터지만 당장에는 필요 없다고 생각해 관리하지 않으면 다시 생각해 볼 필요가 있다.
- 모델러가 판단해서 필요한 데이터라면 관리하는게 바람직하다.
- 모델러가 업무에 대해서는 모를 수 있어도 데이터를 다룬 많은 경험에 의해 필요한 데이터일 수 있겠다는 판단은 정확할 수 있다.
- 머지않은 미래에 대한 판단도 쉽지 않지만, 지나간 과거 데이터에 대한 판단 또한 쉽지 않다.
- 과거 데이터를 이력으로 관리하는 것이 최근에 유행하고 있으며 이는 필연적이다.
- 이력 관리에 대해서는 관리하고자 하는 범주에 포함시켜 엔터티로 도출하는 것이 바람직하다.
- 엔터티를 정의하는 것과 밀접하게 관련된 것이 주 식별자다.
- 엔터티를 정의하는 기준이 되는 것이 주 식별자다.
- 해당 데이터를 유일하게 구분할 수 있는 것이 무엇인지가 엔터티를 정의하는 데 기준이 된다.
- 함수 종속에서 결정자(Determinant)를 찾아야 그 것이 기준이 돼 종속자(Dependent)를 찾을 수 있다.
- 엔터티와 주 식별자는 한 몸이나 마찬가지여서 엔터티 정의와 주 식별자 도출이 한 번에 이루어진다.
- 핵심적인 엔터티를 정의하는 개념 모델링 단계에서 주식별자가 표현돼야 하는 이유이기도 하다.
- 데이터 모델링의 기본 3요소는 엔터티(Entity), 속성(Attribute), 관계(Relationship)다.
- 그런데 엔터티와 속성, 엔터티와 관계가 종종 구분이 애매할 때가 있다. (관계는 속성에 포함된다.)
- 이는 데이터 관리를 얼마나 상세하게 할지와도 연관이 있다.
- 과거 데이터까지 관리하면 속성은 엔터티가 될 것이다.
- 속성으로 관리할 것을 엔터티로 관리하거나 엔터티로 관리할 것을 관계로 관리하는 등의 오류가 종종 발생한다.
- 때에 따라서 유사한 엔터티 사이에 존재하는 관계가 많다면 엔터티로 관리할 수 있다.
- 또한 한 엔터티에 존재하는 유사한 속성들이 별도의 엔터티로 관리될 수 있다.
- 많은 경험이 이러한 구분을 명확하게 하는데 도움을 줄 수도 있지만 엔터테, 속성, 관계라는 정의에 집착하지 않고 데이터 종속성을 기준으로 데이터 무결성과 성능을 고려해 판단하는 것이 중요하다.
'데이터 모델링 > 프리미엄 가이드 - 관계형 데이터 모델링' 카테고리의 다른 글
07. 엔터티(Entity)(3) - 가공 엔터티 (2) | 2024.12.07 |
---|---|
07. 엔터티(Entity)(3) - 행위 엔터티 (0) | 2024.12.07 |
07. 엔터티(Entity)(3) - 실체 엔터티 (0) | 2024.11.28 |
07. 엔터티(Entity)(2) (0) | 2024.11.26 |
01. 데이터 모델링에 대한 상념 (2) | 2024.11.18 |