드디어 마지막 열 번째 방법입니다.
- 마스터에 해당 속성이 존재해 현재 데이터를 관리하고, 속성 그룹의 이력 데이터는 별도의 엔터티에서 관리
- 마스터에 해당 속성이 존재하지 않고, 속성 그룹을 별도 하나의 엔터티를 사용해 현재+과거 데이터를 통합해서 관리
- 마스터에 해당 속성이 존재하지 않고, 속성 그룹을 두 개의 엔터티를 사용해 현재와 과거 데이터를 개별로 관리
유사한 속성을 묶어서 별도의 엔터티로 설계하며, 현재 데이터와 변경된 과거 데이터를 따로 관리합니다.
앞서 밝혔듯이 구분하는 게 도움이 되기 때문에 구별했지만 다섯 번째 방법과 유사합니다.
[그림1]
주식종목가격 엔터티의 속성 값이 하나라도 바뀌면 주식종목가격이력 엔터티에 데이터가 생성합니다.
기준가가 바뀌면(16000에서 17000으로) 주식종목가격 엔터티에는 기준가 속성만 17000으로 업데이트되고, 주식종목가격이력 엔터티에는 변경 전 스냅샷 인스턴스로 인서트됩니다.
물론 [그림2] 상단 릴레이션처럼 스냅샷으로 등록하지 않고, 하단 릴레이션처럼 변경된 데이터만 생성하는 방법도 있습니다.
[주식종목가격이력]
#주식종목번호 |
#변경일자 |
액면가 |
기준가 |
1000 |
2026-01-15 |
5000 |
16000 |
[주식종목가격이력]
#주식종목번호 |
#변경일자 |
액면가 |
기준가 |
1000 |
2026-01-15 |
{null} |
16000 |
[그림2]
하지만 유사한 여러 속성을 묶어서 하나의 엔터티에서 관리하는 주요 이유는 속성이 같이 사용되기 때문인데 하단 릴레이션은 이 점에서 문제가 있어 보입니다.
변경 값만 알려면 [그림2] 하단 릴레이션처럼이 아니라 여섯 번째 방법처럼 종테이블(Vertical Table)로 관리하는 것이 바람직합니다.
변경된 속성과 변경되지 않은 속성이 같이 조회될 가능성이 조금이라도 있다면 스냅샷 방식으로 관리하는 것이 좋습니다.
이 마지막 방법은 이전 방법에 비해 엔터티의 개수가 늘었지만 자주 사용하는 현재 데이터만 별도 엔터티에 존재하므로 현재 데이터를 조회하기 수월합니다.
속성 그룹이라는 거 빼고는 다섯 번째 방법과 특징이 동일합니다.
이상으로 이력 데이터를 설계하는 10가지 방법에 대해 설명드렸습니다. 예상보다 오래 걸렸네요.
이 중에서 2가지(네 번째, 아홉 번째 방법)는 발생 내역 데이터이지만, 이력 엔터티를 설계할 때 도움이 되므로 포함시켰습니다.
이력 데이터는 본질 데이터로부터 영향을 받습니다.
본질 엔터티를 분명히 한 후에 이력 데이터를 설계해야 합니다.
또한 이력 엔터티는 엔터티 정의와 밀접하게 연관돼 있습니다.
엔터티 정의를 어떻게 하느냐에 따라 이력 엔터티도 영향을 받습니다.
이력 엔터티를 올바르게 정의하려면 원천 엔터티가 올바르게 정의돼야 하므로, 즉 원천과 이력 엔터티를 올바르게 정의해야 하므로 이력 엔터티를 제대로 설계하긴 쉽지 않습니다.
1~2가지 방법으로는 다양한 요건을 만족할 수 없습니다. 모든 이력 엔터티를 스냅샷 방식의 선분이력으로 설계한다는 식의 생각은 지양해야 하고요.
이번 시리즈에서 설명한 10가지의 다양한 설계 방법으로 다양한 요건을 대응할 수 있길 바랍니다.
'데이터 Story > 모델링 이론' 카테고리의 다른 글
일반화(Generalization)와 상세화(Specialization) (0) | 2011.07.22 |
---|---|
데이터 통합(서브타입)에 대한 주절거림 (0) | 2011.07.19 |
이력 엔터티를 설계하는 10가지 방법 – 아홉 번째 (0) | 2011.06.26 |
이력 엔터티를 설계하는 10가지 방법 – 여덟 번째 (0) | 2011.06.19 |
함께 변경된 속성을 알아야 할 때 (0) | 2011.06.11 |