쇼핑몰 기획 회의록에 "고객이 장바구니에 담은 상품을 주문하면 결제 후 배송한다"는 문장이 있다. 여기서 명사를 뽑으면 고객·장바구니·상품·주문·결제·배송이다. 이 명사들이 엔터티 후보다. 그러나 명사라고 다 엔터티가 되지는 않는다. 아래 특징을 모두 갖춰야 한다.
- 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것(Thing)이다.
- 업무 활동의 대상이 되는 실체 또는 개념이다. 눈에 보이는 상품도, 눈에 보이지 않는 주문도 엔터티가 된다.
- 엔터티는 인스턴스의 집합이다. "고객" 엔터티 안에 C001 홍길동, C002 김영희 같은 인스턴스가 들어 있다.
| 특징 | 뜻 | 엔터티가 아닌 예 |
|---|
| 업무에서 필요한 정보 | 해당 업무가 관리해야 하는 정보다 | 쇼핑몰 업무와 무관한 "고객의 혈액형" 집합 |
| 유일한 식별자로 식별 가능 | 인스턴스 하나하나를 구분할 식별자가 있다 | 구분할 방법이 없는 "방문자 수" 같은 값 |
| 인스턴스가 두 개 이상 | 영속적으로 존재하는 인스턴스의 집합이다 | 회사 정보처럼 인스턴스가 하나뿐인 것 |
| 업무 프로세스에 의해 이용 | 업무 프로세스가 그 엔터티를 생성·조회·수정·삭제한다 | 만들어 두고 어떤 업무도 쓰지 않는 것 |
| 속성을 포함 | 엔터티를 설명하는 속성이 있다 | 이름 외에 속성이 하나도 없는 것 |
| 관계가 하나 이상 | 다른 엔터티와 최소 한 개 이상 관계를 맺는다 | 어떤 엔터티와도 연결되지 않는 것 |
- 인스턴스가 하나뿐이면 집합이 아니므로 엔터티로 보지 않는다. 쇼핑몰 회사 자체의 정보(상호, 사업자번호)가 한 건뿐이라면 엔터티로 만들지 않는다.
- 업무 프로세스가 쓰지 않는 엔터티가 있다면 업무 분석이 덜 됐거나 필요 없는 엔터티라는 신호다. 모델링 중 프로세스가 빠졌는지 점검하는 기준이 된다.
- 속성이 주식별자 하나뿐인 엔터티도 일반 업무 엔터티로는 보지 않는다. 다만 코드 엔터티처럼 예외로 허용하는 경우가 있다.
⚠️ "관계가 하나 이상" 규칙에는 예외가 있다. 통계성 엔터티, 코드성 엔터티, 시스템 처리용 내부 엔터티(트랜잭션 로그 등)는 관계를 생략해 그리기도 한다. 코드 엔터티는 여러 엔터티가 참조해 관계선이 지나치게 많아지기 때문이다.
| 분류 | 뜻 | 쇼핑몰 예 | 교재 예 |
|---|
| 유형 엔터티 | 물리적 형태가 있다. 안정적이고 지속적으로 활용된다 | 고객, 상품, 창고 | 사원, 물품, 강사 |
| 개념 엔터티 | 물리적 형태는 없지만 관리해야 할 개념적 정보다 | 회원등급, 상품카테고리 | 조직, 보험상품 |
| 사건 엔터티 | 업무를 수행하는 중에 발생한다. 발생량이 많고 통계 자료로 쓰인다 | 주문, 결제, 배송 | 주문, 청구, 미납 |
- "유형/무형" 두 가지로 줄여 말하기도 하지만, SQLD 교재의 분류는 유형·개념·사건 세 가지다. 무형에 해당하는 것이 개념과 사건이다.
- 개념 엔터티와 사건 엔터티는 둘 다 형태가 없다. 차이는 업무 수행 중 발생하느냐다. "골드 등급"은 정해 두고 쓰는 개념이고, "주문"은 고객이 행동할 때마다 생기는 사건이다.
- 보험상품은 유형처럼 보이지만 손에 잡히는 물건이 아니므로 개념 엔터티로 분류한다. 이름이 "상품"이라고 유형으로 단정하지 않는다.
발생 시점 분류는 "다른 엔터티 없이 혼자 생길 수 있나"를 본다.
| 분류 | 뜻 | 쇼핑몰 예 |
|---|
| 기본 엔터티 (키 엔터티) | 업무에 원래 존재하는 정보다. 다른 엔터티에 의존하지 않고 독립적으로 생성된다. 자신의 고유한 주식별자를 가지며 다른 엔터티의 부모 역할을 한다 | 고객, 상품, 사원, 부서 |
| 중심 엔터티 | 기본 엔터티로부터 발생하고 업무의 중심 역할을 한다. 데이터 양이 많고, 다른 엔터티와 관계를 맺어 행위 엔터티를 만든다 | 주문, 결제 |
| 행위 엔터티 | 두 개 이상의 부모 엔터티로부터 발생한다. 내용이 바뀌는 일이 잦거나 데이터 양이 계속 늘어난다 | 주문상품, 주문변경이력 |
기본 엔터티 중심 엔터티 행위 엔터티
┌──────┐
│ 고객 │ ─────────▶ ┌──────┐
└──────┘ │ 주문 │ ──────────▶ ┌──────────┐
└──────┘ │ 주문상품 │
┌──────┐ └──────────┘
│ 상품 │ ───────────────────────────────────────▲
└──────┘
- 주문은 고객이 있어야 생긴다. 그래서 고객은 기본 엔터티, 주문은 중심 엔터티다.
- 주문상품은 주문과 상품 두 부모로부터 생긴다. 그래서 행위 엔터티다.
- 행위 엔터티는 분석 초기에는 잘 드러나지 않는다. 상세 설계 단계나 프로세스와 상관 모델링을 하면서 도출되는 경우가 많다.
- 기본 엔터티의 주식별자는 부모에게서 물려받지 않고 자기 것이다. 고객번호는 고객이 스스로 갖는다.
같은 엔터티가 두 기준에서 각각 어디에 드는지 정리하면 헷갈림이 줄어든다.
| 엔터티 | 유무형 | 발생 시점 |
|---|
| 고객 | 유형 | 기본 |
| 상품 | 유형 | 기본 |
| 회원등급 | 개념 | 기본 |
| 주문 | 사건 | 중심 |
| 주문상품 | 사건 | 행위 |
- 두 기준은 서로 다른 축이다. "사건 엔터티 = 중심 엔터티"처럼 일대일로 대응하지 않는다.
- 회원등급은 형태가 없어 개념 엔터티이면서, 다른 엔터티 없이 정해 둘 수 있어 기본 엔터티다.
- 특정 엔터티의 분류는 업무를 어떻게 정의하느냐에 따라 교재·예시마다 달라질 수 있다. 시험에서는 정의 문장(독립적 생성 / 기본 엔터티로부터 발생 / 두 개 이상 부모)을 기준으로 판단한다.
| 원칙 | 좋은 예 | 나쁜 예 |
|---|
| 현업 업무에서 쓰는 용어 | 주문 | 구매요청트랜잭션 |
| 약어 쓰지 않기 | 주문상품 | 주상 |
| 단수 명사 | 고객 | 고객들, 고객목록 |
| 모든 엔터티에서 유일한 이름 | 배송, 반품배송 | 배송(두 곳에서 서로 다른 뜻으로) |
| 생성 의미대로 이름 부여 | 주문변경이력 | 이력 |
- 단수 명사를 쓰는 이유는 엔터티 자체가 이미 집합이기 때문이다. "고객들"이라고 쓰면 집합의 집합처럼 읽힌다.
- 이름이 유일해야 의사소통에서 오해가 없다. 같은 "배송"이 한쪽에서는 출고, 다른 쪽에서는 반품 회수를 뜻하면 모델을 보는 사람마다 다르게 읽는다.
내일은 엔터티를 채우는 속성의 종류와 도메인을 다룬다.
- 엔터티(Entity) : 업무에 필요한 정보를 저장·관리하기 위한 집합. 테이블 후보가 된다.
- 인스턴스(Instance) : 엔터티에 담긴 하나하나의 실제 값 묶음. 고객 엔터티의 홍길동 한 명.
- 식별자 : 엔터티 안의 인스턴스를 하나씩 구분해 주는 속성. 고객번호 같은 것.
- 사건 엔터티 : 업무를 하는 도중 생겨나는 엔터티. 주문·결제처럼 발생량이 많다.
- 기본 엔터티(키 엔터티) : 다른 엔터티 없이 독립적으로 생기는 엔터티. 다른 엔터티의 부모가 된다.
- 중심 엔터티 : 기본 엔터티에서 생겨나 업무의 중심 역할을 하는 엔터티.
- 행위 엔터티 : 두 개 이상의 부모 엔터티에서 생겨나는 엔터티. 데이터가 계속 쌓인다.
- 코드성 엔터티 : 등급·상태처럼 값 목록을 관리하는 엔터티. 관계를 생략해 그리기도 한다.
📝 연습 문제
선택지를 클릭하면 정답·해설이 펼쳐집니다.
다음 중 엔터티의 특징으로 적절하지 않은 것은?
다음 중 발생 시점에 따른 엔터티 분류에서 중심 엔터티에 해당하는 것으로 가장 적절한 것은? (쇼핑몰 업무 기준)
엔터티의 유무형에 따른 분류에 대한 설명으로 가장 적절한 것은?
두 개 이상의 부모 엔터티로부터 발생하고, 내용이 바뀌는 일이 잦거나 데이터 양이 계속 증가하며, 상세 설계 단계나 프로세스와 상관 모델링 중에 도출되는 엔터티는?
엔터티 명명 규칙에 대한 설명으로 가장 적절하지 않은 것은?