[DA/모델링] Entity (엔터티 이야기) 1
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. 엔터티 설계 원칙
- 데이터 정체성 : 엔티티를 명확하게 정의(Definition)하는 것
- 엔티티 무결성 : 주 식별자가 존재하도록 엔티티를 설계해야 하는 것
- 엔티티 유일성 : 같은 성격의 데이터는 전사적으로 유일해야 하는 것
- 데이터 혼용 배제 : 정체성을 확보하는 것
- 타 엔티티와 관계 존재 : 다른 엔티티와 관계가 존재하는 것
- 프로세스 도출 지양 : 프로세스가 아닌 데이터 성격을 기준으로 엔티티를 생성
- 화면 도출 지양 : 하나의 화면에 하나의 엔티티를 매핑해서 설계하는 것은 지양
- 데이터 관리 요건 : 데이터베이스에서 관리하려는 데이터를 엔티티로 설계
4-3. 엔터티명은 어떻게 정하는가?
엔터티명이 중요한 이유
- 해당 엔터티가 어떤 엔터티인지 정확한 파악을 어렵게 함
- 다른 엔터티와의 관계를 설정함에 있어 중요한 역할을 함
엔터티명 명명 원칙
관리하는 데이터를 가장 명확히 표현할 수 있도록 명명 | 가독성이 좋게 명명 |
- 엔터티의 성격을 표현하고 모호하지 않을 것 고객탈퇴 > 탈퇴고객 매체별수수료 > 매체별고객수수료 진행이력 > 계약진행이력 모니터링현황 > 모니터링대상매수거래내역 - 상황에 맞게 구체적/일반적(유연하게) |
- 일정한 규칙을 준수 - 필요한 단어만으로 가능한 짧게 명사형으로 - 중복되지 않되, 복제( or 외부)의 경우 중복허용 판매입력기본 > 판매 기본 보관용문서 > 보관문서 - 테이블명이 엔터티명에 종속되지 않게 함 엔터티명 바뀔 때 테이블명 바꿀 수는 있는데, 오류발생 가능성이 높아짐 |
Q. 상황에 맞게 구체적/일반적으로 ?
뜨거운 아이스 아메리카노 주세요 같은 말처럼 들릴 수 있는데,
엔터티를 구성하는 집합의 성격에 따라서 유연하게 명명하도록 한다. 라는 의미이다.
예를 들어
집합의 성격이 고정적이라면 '식품' / '의류' 등과 같이 구체적으로
집합의 성격이 가변적이라면 '상품' 과 같이 일반적으로 표현한다.
4-4. 엔터티 설명 기술 원칙
엔터티 설명
: 해당 엔터티가 어떤 데이터를 관리하는지 알게 하기 위해 필수적으로 기술하는 정보
필수 내용 : 데이터의 본질/주제 등 해당 엔터티에서 관리하는 데이터에 대한 설명
선택 내용 : 업무에 대한 설명, 프로세스에 대한 설명 등
해당 엔터티가 관리하는 데이터에 대한 설명
업무/프로세스에 대한 설명
엔터티별 설명 기술 원칙
- 가공 엔터티는 원천 엔터티를, 외부데이터는 출처를 기술
- 서브 타입은 서브 타입 집합에 대한 설명과 고유 속성에 대한 설명을 기술
- 완전한 문장으로 기술 (제안)
5. 업무 식별자
5-1. 업무 식별자?
- 릴레이션의 인스턴스를 논리/업무적으로 유일하게 구분하는 속성/속성그룹
- 업무적으로 새로운 인스턴스를 쌓는 기준 → 릴레이션(엔터티)에 인스턴스를 추가하는 기준
- 때문에 엔터티를 정의하는 시점에 도출
- 해당 이미지에서 '사원번호'는 인조식별자이고 업무적으로 인스턴스를 쌓는 기준이 되는 업무식별자는 '사원주민등록번호'이다
5-2. 업무 식별자 도출 방법
- 기본 원칙 : 최소한의 속성이 되도록 함
- 시각, 순번 속성은 배제하고 생각해본다 -> 업무 식별자로의 의미가 크지 않음 → 배제하고 고민했을 때, 엔터티 성격 파악에 도움이 될 수 있음
- 타임스탬프는 물리적으로 인스턴스를 식별할 수 있지만, 인스턴스 발생 기준이 아니기 때문에 업무 식별자에 부적합
순번 속성은 타임스탬프 보다 업무 식별자로서 더 의미가 없으며, 주 식별자에도 무분별하게 적용 하면 안됨 - 예를들어 일자 등으로 업무식별자를 도출한다면 '시간의 밀도'를 어디까지로 구분해야하는가? (년/월/일/시간/분/초 ....)
- 타임스탬프는 물리적으로 인스턴스를 식별할 수 있지만, 인스턴스 발생 기준이 아니기 때문에 업무 식별자에 부적합
1. 인스턴스가 발생되는 속성 찾기
2. 정규화 수행 기준(결정자) 찾기
엔티티의 종류에 따른 업무 식별자 도출 방법
실체 엔티티 : 보통 식별번호 (ex. 주민등록번호)
행위 엔티티 : 육하원칙에 의해 결정 (ex. 판매번호 - 2020/05/07-1)
집계 엔티티 : 집계 기준
이력 엔티티 : 원천 엔터티(실체, 행위 엔터티)의 업무 식별자 + 일자(언제)
5-3. 업무 식별자 표현 방법
1. 물리적 표현
업무 식별자에 유니크 인덱스*를 생성
유니크 인덱스를 통해 해당 속성에 중복 값이 생기지 않게 할 수 있어 물리적으로 업무 식별자 역할 가능
2. 논리적 표현
업무 식별자 표현할 수 있는 툴이 별로 없어, 대안으로 ‘대리 식별자’로 표현 가능
별도의 표기법을 사용해서라도 논리적인 업무 식별자를 표시해 주는 것이 좋고
최소한 업무 식별자 속성의 정의 항목에는 업무 식별자임을 기술해야 함
ㄴ 인스턴스를 발생시키는 업무 기준이기에 업무 유일성을 확보할 수 있다.