본문 바로가기

데이터 Story

이력 엔터티를 설계하는 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] 고객이력 엔터티는 고객 엔터티의.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 첫 번째 이력 엔터티를 설계하는 첫 번째 방법은 하나의 엔터티에서 과거와 현재(미래)의 데이터를 함께 관리하는 것입니다. [그림1] 수수료율 엔터티에는 계좌의 종류에 따라, 어떤 방법으로 거래했는지에 따라 달라지는 수수료율을 관리합니다. 이 엔터티는 현재의 수수료율뿐만 아니라 과거의 수수료율도 함께 관리합니다. [그림1] 이 경우 변경 일자를 관리하게 되는데요. [그림1]과 같이 변경일자 속성이든 입력일자•시작일자 속성이든요. 이력 엔터티 시리즈 글에서는 편의상 변경일자 속성을 일괄적으로 사용하겠습니다. 사실 변경일자 속성이 적절한지는 아직도 고민 중입니다. 현재 인스턴스에 대해서는 입력 일자가 과거 인스턴스에 대해서는 변경 일자가 명확한데, 합치게 되니 어떤 게 더욱 적절할지 고민입니다. 이 고민은 엔터티를 이.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 서론 이력 데이터에 대한 글을 계속 올리고 있는데요. 개요적인 내용은 소개했으니 다른 주제(식별자)로 넘어갈까를 좀 고민했습니다. 느끼신 분들이 있겠지만 엔터티나 관계 등과 같이요. 개인적으로 제가 책을 쓰면서 다른 책과 차별되도록 구성한 장이 정규화와 통합, 이력, 방법론 입니다. 얼마 전에 메일을 한통 받았는데 거의 정확하게 맞추신 분이 있습니다. 각 장의 특징을 조만간 올릴 생각입니다. 군더더기라 생각해서 책에는 생략을 했는데요. 이력 데이터 관리가 전략적인 장이라서 당분간 이력 엔터티 위주로 글을 올리겠습니다. 오늘은 이력 데이터를 관리할 수 있는 10가지 방법의 개략에 대해 쓰려고 합니다. 이 10가지 방법은 실무에서 자주 사용하는 방법을 제 나름대로 구분한 것인데요. 사실 내역 데이터 설계 방법까지.. 더보기