본문 바로가기

데이터 Story/모델링 이론

이력 엔터티를 설계하는 10가지 방법 – 여덟 번째

이력 데이터를 설계하는 방법이 이제 곧 마무리될 거 같습니다.

시리즈 글 10개 올리는 게 쉽지 않네요. ㅎㅎ

 

이력 데이터를 설계하는 유형을 정리하면 크게 아래 세 가지입니다.

 

- 전체 속성을 관리(인스턴스 단위)

- 속성 하나 하나를 관리(속성 단위)

- 유사한 속성을 묶어서 관리(속성 그룹 단위)

 

위의 두 가지는 이미 설명드렸고 마지막 유형만 남았습니다.

 

마지막 유형인 유사한 속성을 묶어서 설계하는 방법은 다시 세 가지로 구분할 수 있습니다.

 

- 마스터에 해당 속성이 존재해 현재 데이터 관리, 속성 그룹의 이력 데이터는 별도의 엔터티에서 관리

- 마스터에 해당 속성이 존재하지 않고, 속성 그룹을 별도 하나의 엔터티를 사용해 현재+과거 데이터를 통합해서 관리

- 마스터에 해당 속성이 존재하지 않고, 속성 그룹을 두 개의 엔터티를 사용해 현재와 과거 데이터를 개별로 관리

 

위 방법은 유사한 속성을 묶어서 설계한다는 것을 제외하고 속성을 개별 엔터티에서 관리하는 방법(세 번째, 네 번째, 다섯 번째)과 동일합니다.

 

이 방법은 성격이 유사한 속성을 같이 관리하는 것인데요.

 

주로 도메인 유형이 같은 속성을 같이 설계합니다.

또는 같이 조회되는 요건이 명확하다면 해당 속성을 같이 설계하고요.

동시에 입력되는 속성도 같이 설계할 수 있고요.

일대일 관계로 관리할 수 있는 요건이면 이 유형으로 설계할 수 있습니다.

 

[그림1]은 모든 종목 속성을 마스터인 종목 엔터티에서 관리하며 가격과 관련된 속성은 별도의 가격 이력 엔터티에서, 이름과 관련된 속성은 별도의 이름 이력 엔터티에서 관리하는 모델입니다.



[그림1]

 

주식종목 엔터티의 가격 속성(주식종목가격이력 엔터티에 속한 속성) 중에서 하나라도 바뀌면 이력 데이터를 생성합니다.

 

예를 들어 장이 끝나고 다음날 기준가가 바뀌면 주식종목 엔터티의 기준가 속성은 업데이트되고, 변경되기 전의 기준가는 주식종목가격이력 엔터티에 인서트됩니다.

 

이때 다른 가격 속성(발행가·액면가)은 변경되지 않는다고 가정하면 주식종목 엔터티의 값과 일치합니다. 변경되지 않은 속성은 널(Null)로 인서트할 수도 있지만(이렇게 하면 변경된 속성을 알 수 있음) 같이 조회될 수 있다는 요건을 만족하기 위해 변경되지 않은 속성도 데이터를 그대로 인서트합니다.

 

물론 주식종목이름이력 엔터티에는 데이터를 인서트하지 않습니다.

 

[그림2] 인스턴스는 사례 데이터입니다. 2026115일에 기준가가 16000에서 17000으로 변했을 때의 인스턴스입니다.


[주식종목]

#주식종목번호

주식종목

한글단축명

주식종목

영문단축명

발행주식수

발행일자

발행가

액면가

기준가

1000

홍길동사

HONG

100

2025-12-31

6000

5000

17000


[주식종목가격이력]

#주식종목번호

#변경일자

발행가

액면가

기준가

1000

2026-01-15

6000

5000

16000

 

[그림2]

 

[그림1]과 같은 예제 모델은 일반적인 방법이고 좀 더 전략적으로 설계할 수 있습니다.

 

예를 들어 변경되지 않는 속성은 이력 엔터티에서 관리하지 않는다든지…

매우 빈번히 변경되는 속성과 변경될 가능성이 적은 속성으로 분리할 수도 있고요.

외부에서 데이터를 받는다면, 동시에 받는 속성만을 별도 이력 엔터티에서 관리할 수도 있고요.

 

[그림1] 모델에서 발행가는 변경되지 않으니 주식종목 엔터티에서 관리하고, 변할 수 있는 가격(액면가·기준가)만 이력에서 관리할 수 있습니다.

 

이 경우 더욱 정밀한 분석이 필요하고 물론 더 판단할 게 있습니다.

 

조회가 같이 되느냐와 정정인데요.

 

변경되느냐와는 무관하게 조회가 같이 되는 속성이라면 같은 엔터티에 위치하는 게 좋을 수 있고요.

 

원래는 변하지 않는 게 맞지만 잘못 입력한 정정 데이터를 고려해야 할 때가 많습니다. 정정에 대해서는 별도로 설명하겠습니다.

 

어쨌든 조회 요건과 정정 요건은 고려해야 할 요소입니다.

 

속성별로 하나의 엔터티에서 관리하는 방법(세 번째, 네 번째, 다섯 번째)은 엔터티가 늘어나는 단점이 있었지만 이 방법은 엔터티의 정체성도 비교적 좋고 엔터티도 많이 늘어나지 않습니다.

 

일대일(1:1) 관계의 엔터티와 연계해서 이력 데이터를 설계하기도 좋고요.

모델로 업무 파악하기에도 비교적 좋아 적절하게 사용하면 효율적인 모델이 됩니다.