Data Architect/modeling

[DA/모델링] Entity (엔터티 이야기) 1

meegu 2024. 9. 5. 23:17

1. 엔터티(Entity)?

1-1. 엔터티

  • 복합적인 정보를 포괄적으로 수용하는 것
  • 관리하고자 하는 데이터를 특성에 따라 모아 놓은 것

 

예를 들어 위 이미지를 보면

→ 매장정보, 상품은 판매 발생 전부터 관리해야 함

→ 상품은 여러 개가 판매 될 수 있음

 

이렇듯 엔터티란 관리하고자 하는 데이터에 대해

매장, 판매, 상품, 카드, 주문상품 등으로 나눠

데이터 특성에 따라 복합적인 정보들을 포괄적으로 수용하게 하는 것

업무를 수행하는 데 필요한 데이터를 특성이 유사한 것끼리 모아놓은 집합 이다.

 

판단 기준 : 관리하고자 하는 데이터인가?

설계 목적 : 업무에 필요한 데이터의 효율적 저장 및 관리

 

Q. 집합과 엔터티의 차이점 ?

집합은 어떤 분명하고 명확한 조건,기준에 의해 그 대상을 분명히 알 수 있는 것들의 모임이고

누가 판단하더라도, 누가 만들어도 집합에 속하는 원소는 같아야 한다.

( 요즘 제일 인기 많은 인플루언서 : 이사배, 해쭈 X , 10만 구독자 이상을 가진 인플루언서 : 이사배, 해쭈 O )

 

즉,

집합의 원소는 명확하게 구분이 되며 마찬가지로 엔터티에서 인스턴스는 유일하게 구별돼야 한다

엔터티에서 이를 위한 구분자가 식별자이다.

 

두 개념이 동일해보이지만 사실 차이점이 존재한다.

집합은 비슷한 특성을 가진 개체들의 모임을 나타내고, 구체적인 개체를 식별하지 않는다.
반면, 엔터티는 고유한 속성을 통해 구체적으로 식별되는 개체를 의미한다.

 

예를 들어 {A, B, C}라는 집합에서 A, B, C는 그저 집합의 구성원으로, 개별 요소들 간의 차이는 따로 논의되지 않는다. 

즉 개체간의 고유성은 중요치 않다.

 

하나의 엔터티는 이름, 나이, 주소와 같은 속성을 통해 정의되며, 같은 집합에 속하더라도 속성에 따라 구별된다.

즉, 각각의 엔터티는 자신만의 고유한 속성값(예: ID, 이름 등)으로 다른 엔터티와 구분된다.

 

2. 엔터티 정의

2-1. 엔터티를 정의한다는 것

  • 엔터티를 구성한 집합의 본질을 명백하게 하는 것
  • 엔터티에 대한 설명으로 관리하는 데이터 집합을 규정하는 것
  • 엔터티를 구성하는 데이터의 발생 규칙, 업무 규칙(관계) 등을 명확히 하는 것

2-2. 엔터티 정의의 중요성

엔터티(Entity) 간에 존재하는 연관성(관계)을 기반으로 모델링이 이루어지기 때문에

엔터티가 무엇인지를 명백히 하지 않으면 그 뒤의 작업들이 모두 모호해질 수 있음
→ 무의미한 작업이 될 수 있다. 

 

2-3. 엔터티 정의가 잘못된 경우

정의 자체가 틀린 상황

 - '상품' 이라는 엔터티를 '고객' 이라고 정의하는 상황

 

엔터티에 여러 집합이 존재하도록 정의한 경우

- 라는 엔터티에 ‘A’도 함께 있는 경우

 

3.  엔터티를 정의하는 방법

3-1. 엔터티 분류 목적

여러 범주로 엔터티를 분류해 봄으로써 엔터티의 특성을 더 잘 이해할 수 있음
모델링 작업의 순서를 정할 때 도움이 됨

 

3-2. 엔터티 분류 방법

  • 만질 수 있는 것과 만질 수 없는 것
  • 자립 엔티티와 종속 엔터티
  • 원천 데이터와 가공 데이터
  • 실체/행위/가공 엔터티

 

3-3. 원천 데이터와 가공 데이터

원천 데이터 (Raw Data) 가공 데이터 (Processing Data)
직접 입력 받아 생성된 데이터 or 외부에서 받은 데이터 원천/가공 데이터를 사용해서 프로그램에 의해 만들어짐
엔터티간 참조 무결성 관계 존재
원천 엔터티간 관계 존재
집계 기준 역할 엔터티와만 관계 존재
정규화를 철저히 수행해야 함 비정규화가 빈번하게 일어남
주 식별자는 주로 업무 식별자가 됨 주 식별자는 집계 기준과 같은 목적에 의해 결정

 

원천 데이터와 가공 데이터간의 정합성 맞추는 방법

1. 원천 데이터 수정 시점에 가공 데이터 실시간으로 수정
2. 특정 시간에 배치로 가공 데이터를 원천 데이터와 맞춤

 

3-4. 데이터 본질에 따른 엔터티 분류법

실체 엔터티
- 보이거나 혹은 만질 수 있는 것과 연관된 것들을 관리
- 만질 수 있는 것에서 “행위”를 한 것에 대한 관리는 실체 엔터티가 아님. (ex : 계약)

행위 엔터티 
- 업무 행위나 활동으로 인해 생긴 것들을 관리
- 발생 순서가 존재할 수도 있으며 발생과 소멸이 존재
- 업무 식별자를 사용하여 누가/무엇을/언제/어떻게/어디서 했는지 분석해 인스턴스를 생성하는지를 봐야 함.
  
가공 엔터티
- 원천 데이터를 추출해 집계한 데이터를 관리, 즉  집계/요약/임시 데이터를 관리
- 주 식별자는 집계하려는 기준

 

4. 엔터티 설계 원칙

4-1. 엔터티 설계 대원칙

특성(성격, 본질, 주제)에 따른 정체성이 분명한 엔터티로 설계해야 함
(엔터티 : 명확한 조건이 기준이 되고, 서로 명확히 구별되어야 함)

 

4-2. 엔터티 설계 원칙

  1. 데이터 정체성 : 엔티티를 명확하게 정의(Definition)하는 것
  2. 엔티티 무결성 : 주 식별자가 존재하도록 엔티티를 설계해야 하는 것
  3. 엔티티 유일성 : 같은 성격의 데이터는 전사적으로 유일해야 하는 것
  4. 데이터 혼용 배제 : 정체성을 확보하는 것
  5. 타 엔티티와 관계 존재 : 다른 엔티티와 관계가 존재하는 것
  6. 프로세스 도출 지양 : 프로세스가 아닌 데이터 성격을 기준으로 엔티티를 생성
  7. 화면 도출 지양 : 하나의 화면에 하나의 엔티티를 매핑해서 설계하는 것은 지양
  8. 데이터 관리 요건 : 데이터베이스에서 관리하려는 데이터를 엔티티로 설계

 

4-3. 엔터티명은 어떻게 정하는가?

엔터티명이 중요한 이유

  • 해당 엔터티가 어떤 엔터티인지 정확한 파악을 어렵게 함
  • 다른 엔터티와의 관계를 설정함에 있어 중요한 역할을 함

엔터티명 명명 원칙

관리하는 데이터를 가장 명확히 표현할 수 있도록 명명 가독성이 좋게 명명
- 엔터티의 성격을 표현하고 모호하지 않을 것
고객탈퇴 > 탈퇴고객
매체별수수료 > 매체별고객수수료
진행이력 > 계약진행이력
모니터링현황 > 모니터링대상매수거래내역

- 상황에 맞게 구체적/일반적(유연하게)
- 일정한 규칙을 준수
- 필요한 단어만으로 가능한 짧게 명사형으로
- 중복되지 않되, 복제( or 외부)의 경우 중복허용
판매입력기본 > 판매 기본
보관용문서 > 보관문서

- 테이블명이 엔터티명에 종속되지 않게 함
엔터티명 바뀔 때 테이블명 바꿀 수는 있는데, 
오류발생 가능성이 높아짐

 

Q. 상황에 맞게 구체적/일반적으로 ?

 

뜨거운 아이스 아메리카노 주세요 같은 말처럼 들릴 수 있는데, 

엔터티를 구성하는 집합의 성격에 따라서 유연하게 명명하도록 한다. 라는 의미이다.

 

예를 들어

집합의 성격이 고정적이라면 '식품' / '의류' 등과 같이 구체적으로

집합의 성격이 가변적이라면 '상품' 과 같이 일반적으로 표현한다.

 

4-4. 엔터티 설명 기술 원칙

엔터티 설명

: 해당 엔터티가 어떤 데이터를 관리하는지 알게 하기 위해 필수적으로 기술하는 정보

필수 내용 : 데이터의 본질/주제 등 해당 엔터티에서 관리하는 데이터에 대한 설명
선택 내용 : 업무에 대한 설명, 프로세스에 대한 설명 등

 

 

해당 엔터티가 관리하는 데이터에 대한 설명

 

업무/프로세스에 대한 설명

 

 

엔터티별 설명 기술 원칙

- 가공 엔터티는 원천 엔터티를, 외부데이터는 출처를 기술
- 서브 타입은 서브 타입 집합에 대한 설명과 고유 속성에 대한 설명을 기술
- 완전한 문장으로 기술 (제안)

 

5. 업무 식별자

5-1. 업무 식별자?

- 릴레이션의 인스턴스를 논리/업무적으로 유일하게 구분하는 속성/속성그룹
- 업무적으로 새로운 인스턴스를 쌓는 기준 → 릴레이션(엔터티)에 인스턴스를 추가하는 기준

- 때문에 엔터티를 정의하는 시점에 도출

 

- 해당 이미지에서 '사원번호'는 인조식별자이고 업무적으로 인스턴스를 쌓는 기준이 되는 업무식별자는 '사원주민등록번호'이다

 

5-2. 업무 식별자 도출 방법

  • 기본 원칙 : 최소한의 속성이 되도록 함
  • 시각, 순번 속성은 배제하고 생각해본다 -> 업무 식별자로의 의미가 크지 않음 → 배제하고 고민했을 때, 엔터티 성격 파악에 도움이 될 수 있음
    • 타임스탬프는 물리적으로 인스턴스를 식별할 수 있지만, 인스턴스 발생 기준이 아니기 때문에 업무 식별자에 부적합
      순번 속성은 타임스탬프 보다 업무 식별자로서 더 의미가 없으며, 주 식별자에도 무분별하게 적용 하면 안됨
    • 예를들어 일자 등으로 업무식별자를 도출한다면 '시간의 밀도'를 어디까지로 구분해야하는가? (년/월/일/시간/분/초 ....)


 1. 인스턴스가 발생되는 속성 찾기
 2. 정규화 수행 기준(결정자) 찾기

 

엔티티의 종류에 따른 업무 식별자 도출 방법
실체 엔티티 : 보통 식별번호 (ex. 주민등록번호)
행위 엔티티 : 육하원칙에 의해 결정 (ex. 판매번호 - 2020/05/07-1)
집계 엔티티 : 집계 기준
이력 엔티티 : 원천 엔터티(실체, 행위 엔터티)의 업무 식별자 + 일자(언제)

 

5-3. 업무 식별자 표현 방법

1. 물리적 표현
업무 식별자에 유니크 인덱스*를 생성
유니크 인덱스를 통해 해당 속성에 중복 값이 생기지 않게 할 수 있어 물리적으로 업무 식별자 역할 가능

2. 논리적 표현
업무 식별자 표현할 수 있는 툴이 별로 없어, 대안으로 ‘대리 식별자’로 표현 가능

별도의 표기법을 사용해서라도 논리적인 업무 식별자를 표시해 주는 것이 좋고
최소한 업무 식별자 속성의 정의 항목에는 업무 식별자임을 기술해야 함

인스턴스를 발생시키는 업무 기준이기에 업무 유일성을 확보할 수 있다.