이력데이터란?
원천 데이터가 변경되기 전 과거 데이터, 원천 데이터에 종속되어있다. (변경이력, 유효하지 않은 데이터)
필요성 : 과거 상태를 추적할 필요가 있기 때문
기준 : 주 식별자에 종속된 속성값이 바뀌면 이력 데이터가 생긴다.
Ex) 주문 수량이나 배송지를 수정한다고 주문번호를 새로 생성하지 않고 이력으로 보고 쌓아둔다. -> 이력 데이터를 별도로 관리한다.
원천 데이터와 이력 데이터를 같이 관리할 땐?
단점 :
어떤 인스턴스가 원천 데이터인지, 변경이력 데이터인지 알 수 없다. 대부분 내역으로 생각해 오용의 소지가 있다.
-> 해당 엔터티가 원천 데이터인지를 먼저 판단해야한다.
- 새로운 주 식별자 값을 생성하면서 데이터를 쌓는 것은 ‘발생내역’이다.
- 주 식별자가 기준이 돼서 주 식별자는 변경되지 않고, 속한 속성값이 변경되는지 판단한다.
내역데이터란?
예전에 쌓인 데이터지만 변경되지 않음(발생내역)
-Ex) 학력, 졸업년도에 따라 생성된 데이터일 뿐 변경된 데이터는 아니기 때문에 이력 데이터는 아니다. 대체로 가장 최신 데이터를 확인할 수 있다.
-> 변경에 대한 이력 데이터를 설계해야 한다면 ‘변경일자’를 추가한 이력 엔터티를 설계할 수는 있다. 이력과 내역을 한 엔터티에서 동시에 관리하면 어떤 데이터가 유효한지 혼란스러워 바람직하지 않다.
정정데이터란?
실수를 발견했거나 잘못 입력해 수정한 데이터(잘못된 데이터)
관리방법
1. 기존 데이터를 정정해야 하는 데이터로 업데이트 : 정정에 대한 이력관리 하지 않기
2. 정정 엔터티에서 정정된 데이터만 관리하여 이전 데이터를 참고용으로 관리하기
3. 하나의 엔터티에서 변경이력 데이터 관리하면서, 정정 데이터도 함께 관리 + 변경구분코드 속성 추가, 필요하다면 정정일자 속성 추가
-> 정정 데이터와 함께 조회해야 하는 요구 빈번할 때 사용하기 좋다. 데이터 왜곡이 발생하지 않는 장점이 있다.
정정 데이터 예시)
개념 모델링 단계에서 원천 데이터를 설계할 때 이력 엔터티도 고려(검토) 시작한 후, 이력 엔터티는 논리 모델링 단계에서 설계한다.
장점 : 본질 데이터 먼저 완전하게 설계한 이후 이력 데이터 고려하기에 본질에 집중할 수 있다.
단점
<엔터티 성격, 업무요건, 중요도에 맞춰 적절한 방법 사용>
‘변경순번’ 속성 값을 만들어 동시에 변경된 속성값을 파악한다.
이처럼 데이터를 관리한다면 변경일자 속성은 주 식별자에 포함될 필요가 없다.
Ex) 판매전표 작성 시 전표 묶음 기준이 ‘거래처코드, 출하창고, 거래유형, 판매일자’였지만, 또다른 기준으로 전표를 업로드 하려면, ‘순번’을 사용해 동일한 전표로 인지시켜주는 것과 같다.
선분이력 사용
: 데이터가 유효한 시작 시점과 종료 시점을 관리하는 방법
<종료일자 사용하는 데 문제점>
이력데이터를 설계하기 위한 추출속성이라 성능을 향상시키기 위한 속성이지 본질적인 속성은 아니다. 새로운 인스턴스의 시작점을 참조해 이전 인스턴스의 종료시점을 계산해 업데이트 해야한다.
시작일자와 종료일자를 연결해 선분이 되지 않는다면 데이터 무결성이 깨질 수 있다.
유효종료일자 속성이 추가되면서 용량을 더 차지하게 된다.
원천 엔터티를 명확하게 설계했다는 가정하에,
이력 관리 요건분석 : 원천 데이터를 변경할 때 변경된 데이터를 저장해야 하는지를 분석
이력관리유형 선택 : 본질 엔터티를 정확히 설계한 후 관리유형 중 하나를 선택
선분이력요건 : 성능을 고려
이력엔터티 주식별자 : 다른 엔터티와의 관계까지 감안해서 결정