하나의 엔터티 | 두 개의 엔터티 |
---|---|
하위 엔터티를 가질 수 없음 (확장성X) | 속성 추가시 두 엔터티 및 두개 프로그램 수정 필요 |
하위 엔터티가 존재할 수 없는 모델 (나쁜사례) |
---|
가정 : 주문 내용의 변경된 데이터를 주문 엔터티에서 관리 하고, 변경은 하루에 한번만 가능 |
#주문번호 | #변경일자 | #배송처 |
---|---|---|
100 | 2019-05-05 | 서울시 |
#주문번호 | #변경일자 | #상품코드 | 주문수량 |
---|---|---|---|
100 | 2019-05-05 | 1010 | 1 |
100 | 2019-05-05 | 1020 | 3 |
100 | 2019-05-05 | 1050 | 2 |
#주문번호 | #변경일자 | #배송처 |
---|---|---|
100 | 2019-05-05 | 서울시 |
100 | 2019-05-06 | 경기도 |
#주문번호 | #변경일자 | #상품코드 | 주문수량 |
---|---|---|---|
100 | 2019-05-05 | 1010 | 1 |
100 | 2019-05-05 | 1020 | 3 |
100 | 2019-05-05 | 1050 | 2 |
#주문번호 | #변경일자 | #상품코드 | 주문수량 |
---|---|---|---|
100 | 2019-05-06 | 1010 | 1 |
100 | 2019-05-06 | 1020 | 3 |
100 | 2019-05-06 | 1050 | 2 |
#주문번호 | #변경일자 | #상품코드 | 주문수량 |
---|---|---|---|
100 | 2019-05-05 | 1010 | 1 |
100 | 2019-05-05 | 1020 | 3 |
100 | 2019-05-05 | 1050 | 2 |
100 | 2019-05-06 | 1010 | 1 |
100 | 2019-05-06 | 1020 | 3 |
100 | 2019-05-06 | 1050 | 2 |
보통 데이터 조작은 한번 이지만, 조회는 수없이 일어나므로 조회에 최적화 하는것은 의미가 있음
주문 이력 엔터티 (좋은사례) |
---|
#주문번호 | #변경일자 | #배송처 |
---|---|---|
100 | 2019-05-07 | 대전시 |
101 | 2019-05-08 | 서울시 |
#주문번호 | #변경일자 | #배송처 |
---|---|---|
100 | 2019-05-05 | 서울시 |
100 | 2019-05-06 | 경기도 |
#주문번호 | #상품코드 | 주문수량 |
---|---|---|
100 | 1010 | 1 |
100 | 1020 | 3 |
100 | 1050 | 2 |
101 | 1010 | 2 |
엔터티 하나로 현재와 과거 데이터 관리
현재+과거 엔터티 |
---|
현재와 과거 데이터를 별도로 관리하는 모델 |
---|
선분 이력이 아닌 엔터티 |
---|
하루에 두번 이상 변경될 때
변경일자, 시작일자, 종료일자는 연/월/일 만 관리 하므로 데이터가 하루에 한번만 변경 가능, 하루에 두번 이상 변경 될 수 있다면 변경일시, 시작일시, 종료일시 사용
변경순번 속성을 사용한 이력 엔터티 |
---|
스냅샷 방식의 이력 관리 모델 |
---|
두 개의 엔터티에서 현재와 과거 데이터를 분리해 관리하는 기본 모델, 현재[보험계약] / 과거[보험계약이력] |
#증권번호 | 상품코드 | 보험가입일자 | 보험가입금액 |
---|---|---|---|
12345 | A10 | 2020-01-01 | 1200 |
23456 | B20 | 2020-05-04 | 500 |
#증권번호 | #유효시작일자 | 유효종료일자 | 상품코드 | 보험가입일자 | 보험가입금액 |
---|---|---|---|---|---|
12345 | 2020-01-01 | 2020-10-09 | A00 | 2020-01-01 | 1000 |
#증권번호 | 상품코드 | 보험가입일자 | 보험가입금액 |
---|---|---|---|
12345 | A10 | 2020-01-01 | 1200 |
23456 | B20 | 2020-05-04 | 500 |
#증권번호 | #유효시작일자 | 유효종료일자 | 상품코드 | 보험가입일자 | 보험가입금액 |
---|---|---|---|---|---|
12345 | 2020-10-10 | 9999-12-31 | A10 | 2020-01-01 | 1200 |
12345 | 2020-01-01 | 2020-10-09 | A00 | 2020-01-01 | 1000 |
23456 | 2020-05-04 | 9999-12-31 | B20 | 2020-05-04 | 500 |
예제1 | 슈퍼타입과 서브타입을 합친 인스턴스별로 이력데이터 관리(서브타입 개념 반영, 연결된 인스턴스 조회 편리) | |
예제2 | 슈퍼타입과 서브타입별 각각의 이력 데이터 관리(이력 데이터 발생 쉽고, 공간 절약) |
계좌비밀번호 속성의 이력 엔터티 |
---|
계좌비밀번호 변경 내역 엔터티 |
---|
여러 유형의 계좌비밀번호 발생 내역 |
---|
여러 유형의 계좌비밀번호의 발생 내역과 변경 이력 |
---|
관계(역할) 이력 관리 모델 |
---|
추출 속성을 사용한 관계(역할) 이력 관리 모델 |
---|
현재와 과거 관리사원을 별도로 관리하는 모델 |
---|
여러 역할을 관리하는 모델 |
---|
여러 역할을 관리하는 모델에 추출 속성을 적용한 모델 |
---|
#속성코드 | 속성명 |
---|---|
100 | 계좌명 |
110 | 계좌관리사원번호 |
120 | 계좌비밀번호 |
#계좌번호 | #속성코드 | #시작일자 | 종료일자 | 속성값 |
---|---|---|---|---|
12345678 | 110 | 2021-05-05 | 2021-07-06 | 홍길동 |
12345678 | 110 | 2021-07-07 | 2021-12-30 | 김길동 |
변경 속성을 코드로 관리하는 모델 |
---|
이전 속성 값을 관리하는 모델 |
---|
동시에 변경된 속성을 관리하는 모델 |
---|
#속성코드 | 속성명 |
---|---|
100 | 계좌명 |
110 | 계좌관리사원번호 |
120 | 계좌비밀번호 |
#계좌번호 | #변경순번 | #속성코드 | 변경일자 | 속성값 |
---|---|---|---|---|
12345678 | 3 | 110 | 2021-07-07 | 123 |
12345678 | 3 | 120 | 2021-07-07 | 2222 |
12345678 | 2 | 100 | 2021-05-05 | 홍길동 |
12345678 | 1 | 120 | 2021-02-10 | 1111 |
유사한 속성을 묶어서 이력 관리하는 모델 |
---|
구분 | 인스턴스(스냅샷)/하나의 엔터티 | 인스턴스(스냅샷)/두 개의 엔터티 | 속성(개별)/이력 속성 엔터티 | 속성(개별)/코드성 엔터티 | 속성그룹 |
---|---|---|---|---|---|
이력 데이터 발생 용이성 | Good | Good | Good | Bad | Normal |
변경 속성 조회 용이성 | Bad | Bad | Good | Good | Bad |
이력 모델 형상 관리 | Good | Bad | Good | Good | Normal |
하위 엔터티 확장성 | Bad | Good | Good | Good | Good |
전체 데이터(스냅샷) 조회 | Good | Good | Bad | Bad | Normal |
모델의 유연성(확장성) | Bad | Normal | Good | Good | Normal |
데이터 중복성 | Bad | Bad | Good | Good | Normal |
데이터 중복성 | Bad | Bad | Good | Good | Normal |
엔터티 성격 명확성 | Bad | Bad | Good | Bad | Normal |
데이터 저장 공간 효율성 | Bad | Bad | Good | Good | Normal |
- 강좌 URL : http://www.gurubee.net/lecture/3650
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.