database.sarang.net
UserID
Passwd
Database
ㆍDBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DBMS Columns 443 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 443
이력관리 Data Model - 선분이력
작성자
정재익(advance)
작성일
2002-07-12 22:59
조회수
8,019
첨부파일: dm1-Pictures.zip (21,779bytes)

Data Modeling을 수행할 때 가장 마지막 단계에 이력에 대한 부분을 고려하게 된다. 이때 많은 독자들이 개념을 잘 이해하지 못해 혼동을 하는 부분중의 하나가 선분이력이라는 개념이다. 보통 이력관리라고 만 막연하게 가지고 있던 개념에서 선분이력과 시점이력이 어떻게 다른지 어떤 의미를 내포하고 있는지 몇가지 예를 들어 설명을 함으로써 독자여러분의 이해를 돕고자 한다.

 

선분이력이라는 것은 한 Entity에서 튜플(Tuple)이 가지고 있는 의미(관리 속성들이 의미하는 정보)가 일정 시점의 정보만을 나타내는 것이 아니라 일정기간(선분)이 유지되는 동안 해당 정보가 유효 하다는 의미이다. 즉, 현 Entity에서 관리하고자 하는 모든 정보는 해당 기간(선분)동안 유효 하다는 개념이다.

 

여기서 선분이라는 개념은 기간을 나타내는 것이다. 과거 역사(이력)를 표현할 때 어느 한 순간을 나타내기도 하고, 특정 기간을 지칭할 때도 있다. 예를 들어 "위화도회군"은 어느 순간(사건)을 지칭할 때 사용되고 고려시대는 왕건이 후 삼국을 통일하고 이성계에 의해서 멸망할 때 까지의 기간을 나타내는 것이다. 이처럼 우리가 관리하고자 하는 시스템역시 과거 이력을 시점으로 관리해야 하는 정보가 있는가 하면 기간개념이 도입되어 관리되어야 할 정보가 있다.

 

현재 운영되고 있는 대부분의 시스템에서 모델링 또는 DB설계 단계에서 선분이력을 사용한 곳이 거의 없었다. 단지 시점이력만 관리할 뿐 이었고, 시점이력에 의미를 부여하여 억지로 선분이력으로 만들어 사용하고 있으며 이로 인하여 많은 성능상의 문제점을 야기 하고 있다.

 

선분이력에 대한 개념을 보다 정확히 하기 위해 다음과 같이 환율관리라는 가상의 시스템을 예로 들어 설명하기로 하자.

 

다음 < 그림 1 >과 같은 환율관리를 위한 "통화"라는 Entity가 있다고 하자.

 

 

 

<그림 1> 에서 표현되는 Entity는 특정 화폐의 현재 환율만을 나타내고 있으며 전혀 이력이 관리되지 않고 있다. 어제의 환율이 얼마였는지 오늘 아침 환율이 얼마였는지 알 수 없으며 오직 현재 환율만을 나타내고 있을 뿐이다. 그런데 환율과 관련된 몇 가지 비즈니스 요구사항(이력)이 발생하고 그에 따라 환율변동에 대한 모든 이력을 관리해야 할 필요성이 있어서 <그림 2 > 와 같이 모델을 변경하여 이력을 관리하고자 할 수 있을 것이다.

 

 

 

그러면 새로 탄생한 Entity, 환율변동이력의 의미상의 주어는 무엇인가 ? 통화_ID + 발생시각 이다. 즉 환율변동이력이 갖고 있는 정보는 특정 통화의 환율이 발생시각에 환율변동이력이 포함하고 있는 정보(속성값)로 변경(발생)하였다는 것을 나타낸다. 즉 시점(발생시각)에 해당하는 정보(환율)를 표현한 것이다. 특정 통화의 환율이 변경되면 새로운 Instance가 생겨나고 그 시점의 해당 통화의 환율과 발생시각을 기록/보관 한다. 이 엔터티에서 우리가 정확히 알 수 있는 것은 "환율이 어느 시점에 얼마의 값으로 변경되었다."라는 정보이다.

 

그럼 <그림 2>의 시점이력을 다시 선분이력으로 변환하면 < 그림 3 > 과 같은 표현으로 나타난다.

 

 

 

선분이력으로 표현된 환율변동이력 Entity가 나타내는 의미는 시점이력이 나타내는 의미와 어떻게 다른가 < 그림 3 > 에서 표현하고 있는 환율변동이력의 의미상의 주어는 통화_ID + 시작시각 + 종료시각 이다. 즉 특정 통화의 환율이 환율속성에 가지고 있는 값(환율)으로 언제부터(시작시각) 언제까지(종료시각) 유지되었으며 그 외에 포함하고 있는 모든 정보는 그 그간동안 유효 하다는 의미이다. < 그림 2 > 에서 표현된 방법과 < 그림 3 >에서 표현된 방법 중 어느것이 현실을 보다 잘 표현한 것인가 ?

 

이 개념을 보다 확실히 이해하기 위해 Sample Data를 가지고 이를 도식적으로 표현하여 보자. 환율변동이 아래의 지문과 같은 상황일 때 시점이력과 선분이력의 표현방법이 어떻게 틀리는지 알아 보자.

 

"오늘 원화대비 달러의 환율이 오전 09:00:00 에 1350 원에서 10:10:10에 1355 원으로 인상되었으며 오전 마감무렵 11:27:30에 1352원으로 약간 내림세로 돌아서 현재의 1352원을 유지하고 있다. "

 

 

 

Data 모델링이 비즈니스를 표현한다는 관점에서 보았을 때 < 그림 4 >에서 표현한 시점이력과 선분이력(기간이력)중 어느 것이 정확한 표현인가? 우리가 관리하고자 하는 실제 정보는 시점이력에서 표현되는 것처럼 발생시각의 정보가 아니라 선분이력과 같이 시작시점에서 발생하여 종료시점까지 유지되었다고 표현하는 것이 보다 정확한 의미가 아닌가?

 

모델링 단계에서 한 Entity를 정의할 때 우리는 그 Entity가 정확히 포함하고 있는 의미가 무엇인가를 아주 조심스럽고 주의 깊게 파헤쳐야 한다. 이력관리가 필요한 성격의 Data중 단순히 시점만을 관리해야 하는 것들이 있는가 하면 때에 따라서 선분으로 기간을 관리해야 하는 정보들도 존재한다.

 

이력을 선분으로 관리한다는 것은 관리 Level을 한 차원 높인다는 것이다. 모델링을 공부하신 분이라면 이력관리가 깊어지면 차원이 한단계씩 증가한다는 것을 배웠을 것이다. ( "데이터모델링 & 데이터베이스 Design" 참조 ) 우리가 앞에서 예로든 < 그림 1 > 은 이력관리를 하지 않았을 때 의 상황이며 UID는 통화_ID 한 개이다. 그러나 시점관리를 하게 되면 통화_ID + 발생시각으로 UID가 두개로 늘어난다. 여기에 시점관리를 선분관리로 관리 차원을 높이면 통화_ID + 시작시각 + 종료시각 으로 UID가 3개로 늘어남을 알 수 있다.

 

이와 같이 시점이력관리를 선분이력으로 관리한다는 것은 특정한 한 개의 점 ( 다음 발생시점을 간주 한다면 두개의 또는 앞뒤를 합쳐 3개의 점 ) 에서 두 점 사이의 선분으로 바뀌는 순간 두 점 사이에 존재 할 수 있는 무수한 점에 대한 관리를 한다는 것으로, 단순이 점 몇 개가 아니라 사이에 존재하는 모든 시점에 대한 관리로 관리 차원이 달라지는 것이다.

 

정보를 관리하는데 있어서 정확한 이력을 관리한다는 것은 여러분이 상상 하시는 것 이상으로 중요한 개념입니다. 잘 숙성된 술이 제값을 받듯이 정보도 정확한 이력관리가 이루어지는 Data Model상에서 관리되어진 정보는 회사의 가장 값진 자산이 되는 것입니다.

 

제가 여기서 말씀 드린 선분이력에 대한 설명만으로는 아직 미흡하겠지만 선분이력의 개념에 대해서 여러분이 정확히 이해하시고 실전에서 이력관리 Data Model에 올바르게 적용할 수 만 있다면 설계하시는 Data Model의 차원이 달라질 뿐 아니라 모델링 하시는 여러분의 수준이 이미 차원이 달라졌음을 느끼실 수 있을 것입니다.

 

다음 기회에 실제 선분이력과 시점이력이 물리적인 DB로 구현되어 사용될 때 어떤 차이가 있는지 다음 지면을 빌어 설명을 드리도록 하겠습니다.

이 글에 대한 댓글이 총 1건 있습니다.
첨부파일: dm1-Pictures.zip (21,779bytes) 이 Down이 안되는데,
어떻게 볼수 있는 방법이 없는지요?

해당 글에 대한 그림인듯 한데, 그림이 없으니 잘 이해가 안되는 군요.

youngfan@paran.com
최지영(youngfan)님이 2009-01-23 17:15에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
446제3회 Aggregate Family(Reporting)의 소개 및 활용사례
정재익
2002-07-12
5081
445제2회 Analytic Function의 소개 및 활용사례
정재익
2002-07-12
8323
444제1회 Analytic Function의 소개
정재익
2002-07-12
5316
443이력관리 Data Model - 선분이력 [1]
정재익
2002-07-12
8019
442RDB 최적활용 기본 테크닉 - 옵티마이징 전략
정재익
2002-07-12
4714
441고성능 DB 구축을 위한 핵심 요소 이해(4)-마지막회
정재익
2002-07-12
5003
440고성능 DB 구축을 위한 핵심 요소 이해(3)
정재익
2002-07-12
5003
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다