본문 바로가기

데이터 Story/모델링 이론

이력 엔터티를 설계하는 10가지 방법 – 아홉 번째 아홉 번째 방법은 유사한 속성을 묶어서 별도의 엔터티로 설계하고, 이력 데이터도 같이 관리하는 겁니다. - 마스터에 해당 속성이 존재해 현재 데이터를 관리하고, 속성 그룹의 이력 데이터는 별도의 엔터티에서 관리 - 마스터에 해당 속성이 존재하지 않고, 별도의 엔터티에서 속성 그룹의 현재+과거 데이터를 통합해서 관리 - 마스터에 해당 속성이 존재하지 않고, 속성 그룹을 두 개의 엔터티를 사용해 현재와 과거 데이터를 개별로 관리 이 방법은 네 번째 방법과 유사한데요. 제 기준으로는 내역 엔터티인데, 비교해서 보는 게 이해를 돕기 때문에 10가지의 이력 엔터티 설계에 포함시켰습니다. 여덟 번째 방법, 마지막 열 번째 방법과 비교해 보세요. 유사한 속성을 묶어서 별도의 엔터티에서 현재+과거 데이터를 통합 관리하.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 여덟 번째 이력 데이터를 설계하는 방법이 이제 곧 마무리될 거 같습니다. 시리즈 글 10개 올리는 게 쉽지 않네요. ㅎㅎ 이력 데이터를 설계하는 유형을 정리하면 크게 아래 세 가지입니다. - 전체 속성을 관리(인스턴스 단위) - 속성 하나 하나를 관리(속성 단위) - 유사한 속성을 묶어서 관리(속성 그룹 단위) 위의 두 가지는 이미 설명드렸고 마지막 유형만 남았습니다. 마지막 유형인 유사한 속성을 묶어서 설계하는 방법은 다시 세 가지로 구분할 수 있습니다. - 마스터에 해당 속성이 존재해 현재 데이터 관리, 속성 그룹의 이력 데이터는 별도의 엔터티에서 관리 - 마스터에 해당 속성이 존재하지 않고, 속성 그룹을 별도 하나의 엔터티를 사용해 현재+과거 데이터를 통합해서 관리 - 마스터에 해당 속성이 존재하지 않고, 속.. 더보기
함께 변경된 속성을 알아야 할 때 이번에는 이전에 설명한 변경 속성을 코드로 관리하는 방법(5, 6, 7번 방법)과 연관된 내용입니다. 종테이블(Vertical Table) 방법으로 이력을 관리할 때 동시에 변경된 속성을 알아야 할 때가 있는데요. 동일한 업데이트 트랜잭션에 의해 변경된 속성이 무엇인지를 알려면 [그림1]과 같은 모델을 사용할 수 있습니다. [그림1] 변경순번 속성 값이 같으면 동시에 변경(업데이트)된 속성을 의미합니다. 그리고 변경순번 속성은 이미 인조 식별자 역할을 하기 때문에 변경일자 속성이 주 식별자에 포함될 필요는 없습니다. 순번에 일자 의미가 이미 포함돼 있죠. [그림2] 릴레이션처럼 관리하면, 가장 최근에 함께 변경된 속성은 계좌 관리사원(‘123’)과 계좌 비밀번호(‘2222’)라는 것을 나타냅니다. [계좌.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 일곱 번째 일곱 번째 방법은 여섯 번째 방법의 확장입니다. 엔터티 한 개만 관리하는 여섯 번째 방법에서 두 개의 엔터티로 확장한 모델이 [그림1] 입니다. [그림1] 고객계좌통합번호 속성은 배타 관계(계좌와 고객 엔터티)를 관리하는 속성입니다. 엔터티번호 속성과 함께 사용해야 어떤 엔터티의 식별번호인지를 알 수 있습니다(파란 속성은 같이 사용하는 쌍을 의미). 계좌 엔터티만이 아니라 다른 엔터티의 이력 데이터도 관리하므로 포괄적으로 속성통합이력 엔터티라고 붙이고요([그림1]처럼 단 두 개의 엔터티라면 ‘고객/계좌속성이력’도 좋음). ‘이력엔터티’라는 엔터티에서는 이력 데이터를 관리하는 대상 엔터티를 관리합니다. 이 방법은 여섯 번째 방법의 단점은 모두 가지고 있으며 더 유연하기 때문에 업무를 파악하기 더욱 어려워진.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 여섯 번째 여섯 번째 방법은 모델링하기 가장 쉬운 방법입니다. 적어도 표면적으로는요. 변경된 모든 속성의 데이터를 하나의 엔터티에서 관리하는 방법입니다. 흔히 종테이블(Vertical Table)이라고 하는데요. 속성 단위로 관리하기 때문에 이력 관리 대상 속성을 코드화해서 관리하는 것이 특징입니다. [그림1] 계좌 엔터티 속성 중에서 역할을 의미하는 계좌관리사원번호 속성은 별도의 엔터티에서 이력 데이터를 관리하기로 하고요(역할에 대해서는 이전 글을 참조 하세요. http://dataprofessional.tistory.com/62). [그림1] 그리고 나머지 속성은 이번에 설명하는 방법인 [그림2]와 같이 관리합니다. [계좌이력속성] #속성코드 속성명 100 계좌명 110 계좌비밀번호 [계좌이력] #계좌번호 #속.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 속성 단위 이력 관리 예제 이번 시간에는 속성 단위로 이력 관리하는 방법을 정리하는 의미로 다양한 예제를 설명드리겠습니다. 처음부터 다시 읽지 않으려면 잘 따라오셔야 합니다. ㅎㅎ 세 번째, 네 번째, 다섯 번째 방법처럼 한 속성만으로 이력 데이터를 설계하는 방법은 역할(Role)을 관리할 때 자주 사용합니다. 실체 엔터티 간 관계(역할)는 주로 별도의 엔터티에서 관리합니다. 계좌 관리 사원을 관리한다면 [그림1]과 같은 모델이 기본입니다. [그림1] 위 모델에서 변경된 과거 관리 사원까지 관리한다면 [그림2]와 같이 됩니다. [그림2] 계좌관리사원 엔터티에서 현재 계좌를 관리하고 있는 사원과 과거에 관리했던 사원을 함께 관리합니다. 현재 데이터도 관리하므로 ‘~이력’이란 단어를 엔터티명에 사용하지 않았고요. 역할을 관리하는 엔터.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 다섯 번째 이력 엔터티를 설계하는 다섯 번째 방법은 간단합니다. 앞의 두 방법의 혼합입니다. -마스터에 해당 속성이 존재해 현재 데이터를 관리하고 이력 데이터는 별도의 엔터티에서 관리 -마스터에 해당 속성이 존재하지 않고 별도의 한 엔터티에서 현재+과거 데이터를 통합해서 관리 -마스터에 해당 속성이 존재하지 않고 별도의 두 엔터티에서 현재와 과거 데이터를 개별로 관리 [그림1]과 같이 현재 비밀번호를 관리하는 엔터티가 있고, 변경된 과거 비밀번호를 관리하는 엔터티가 있습니다. [그림1] 이 모델에서 계좌비밀번호 엔터티는 발생 내역을 관리하는(발생일자 존재) 엔터티이고, 계좌비밀번호이력 엔터티는 변경 이력을 관리하는(변경일자 존재) 엔터티입니다. 최초에 발생한 비밀번호를 관리하는 계좌비밀번호 엔터티는 계속 업데이트되.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 네 번째 이력 엔터티를 설계하는 네 번째 방법입니다. -마스터에 해당 속성이 존재해 현재 데이터를 관리하고 이력 데이터는 별도의 엔터티에서 관리 -마스터에 해당 속성이 존재하지 않고 별도의 한 엔터티에서 현재+과거 데이터를 통합해서 관리 -마스터에 해당 속성이 존재하지 않고 별도의 두 엔터티에서 현재와 과거 데이터를 개별로 관리 비밀번호가 계좌 비밀번호와 홈페이지 비밀번호, ARS 비밀번호가 존재하면 [그림1]과 같이 설계할 수 있는데요. [그림1] 어떤 종류의 비밀번호가 더 생길지 모르니 정규화를 하면 [그림2] 엔터티와 같아질 것입니다. [그림2] [그림2]가 원천 데이터를 설계한 모델입니다. 마스터 엔터티인 계좌 엔터티에는 비밀번호 속성이 존재하지 않고요. 여러 비밀번호를 구분하기 위해 계좌비밀번호 엔터티에.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 세 번째 이력 엔터티를 설계하는 세 번째 방법입니다. 첫 번째, 두 번째 방법은 인스턴스를 대상으로 이력 데이터를 관리했지만 세 번째 방법부터는 개별 속성을 대상으로 이력 데이터를 관리합니다. 개별 속성의 이력 데이터를 관리하는 방법은 다시 아래와 같이 세 가지로 나눕니다. - 마스터에 해당 속성이 존재해 현재 데이터를 관리하고, 이력 데이터는 별도의 엔터티에서 관리 - 마스터에 해당 속성이 존재하지 않고, 별도의 한 엔터티에서 현재+과거 데이터를 통합해서 관리 - 마스터에 해당 속성이 존재하지 않고, 별도의 두 엔터티에서 현재와 과거 데이터를 개별로 관리 [그림1]은 계좌 비밀번호의 이력 데이터를 관리하는 모델입니다. 계좌비밀번호 속성이 마스터 엔터티인 계좌 엔터티에 존재해서 현재 비밀번호를 관리하며, 계좌비밀.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 두 번째 오랜만에 이력 관련 글을 올립니다. 이력 엔터티를 설계하는 방법 10개 중에서 두 번째 방법입니다. 현재와 과거 데이터를 두 개의 엔터티에서 별도로 관리하는 방법인데요. 현재 데이터를 관리하는 엔터티에는 현재 데이터만 존재하고요. 변경된 과거 데이터는 이력 엔터티에서 관리합니다. 하나의 엔터티에서 현재와 과거 데이터를 관리하는 첫 번째 방법과 달리 두 종류(현재 데이터와 과거 데이터)의 데이터가 같이 사용될 일이 별로 없을 때 사용합니다. 그리고 하위(자식) 엔터티가 하나라도 존재할 때 사용합니다. 모델은 [그림1]과 같습니다. 엔터티명을 ‘고객이력’이라고 붙인 이유는 과거의 데이터를 관리하기 때문이기도 하며 이미 ‘고객’이라는 엔터티명이 사용되었기 때문입니다. [그림1] 고객이력 엔터티는 고객 엔터티의.. 더보기