DATOR


자판기 데이터모델 시나리오 #2 데이터모델


자판기와 관련된 데이터 모델을 설계해 봅니다. ( 계속 )

 

두번째는 주어진 사물에 대한 추상화를 통해서 개념적으로 재 구성해 보는 방식을 택할 것이다.  단순하고 확장성이 보장된 형태이다.  이해를 돕기 위해서 재료를 투입하는 것을 좀 단순하게 표현해 보도록 한다.

 

< 두 번째 모델링 : 개념적 추상화 >

 

[그림 1]

 1.자판기실물.jpg

4.자판기모델2.jpg

 

 

첫번째 모델링에서와 동일한 자판기 실물과 개념도이다.  그러나 이제 데이터 모델이 좀 바뀌었다.  가장 큰 특징은 자판기슬롯 엔티티에 "슬롯번호"라는 속성일 것이다.  자판기의 콜라, 사이타, 커피를 꽂을 수 있는 투입구를 속성으로 형상화 하지 않고 슬롯이라는 개념으로 추상화 하였다. 

자판기는 여러 개의 슬롯을 가질수 있다.  이 슬롯은 자판기에 따라 1개 혹은 수십개를 가질 수가 있을 것이다.  또한 슬롯마다 어떠한 재료를 투입하여도 된다.   1번 슬롯에서 콜라를 판매하다가 사이다로 상품을 교체 할 수도 있고, 심지어 커피로 교체할 수도 있는 구조이다.  매우 유연하고 확장성있는 모델임에는 틀림없다. 

 

재료 > 첫번째 모델의  재료 테이블과 동일하다.

자판기 > 첫번째 모델의 자판기와 동일한 개체를 관리한다.  다만 콜라, 사이다, 커피, 율무, 껌, 초코릿 속성들이 사라졌다.  개체와 관련없는 속성들이 사라짐으로 인해 자판기 본연의 속성만을 지니게 되어 매우 단순해 졌다.

자판기 슬롯 > 자판기의 슬롯구성을 나타내고 있다.  재료ID는 현재 슬롯에 세팅되어 있는 재료이다.  콜라가 세팅되었다가 사이다 판매로 변경된다면 재료ID는 UPDATE 될 것이다.  

자판기 이력 > 자판기에 재료가 투입될때와  재료가 판매되었을때의 이력이 보관된다.  즉 INPUT과 OUTPUT의 데이터가 누적된다.   슬롯이라는 것을 발견함으로 인해서 많았던 이력의 속성들도 매우 단순하게 변경되었다.   재료수량은 투입되거나 사용되어진 수량을 의미한다.

 

이 모델만 보고서 어떤 데이터가 어떻게 발생되겠구나를 짐작 할 수 있지 않은가 ?

 

이제 데이터를 발생시켜 보겠다.

 

[ 데이터 예시  1 ]

 5. 예시데이터1.jpg

 

재료 > 첫번째 모델의 데이터와 같은 형태이다.  콜라의 총수량 50, 자판기에 30개가 투입되었고 현재 20개를 여유분으로 갖고 있다.

자판기 > 자판기는 JA-10, JA-20 2대가 있다.   매우 단순한 데이터 구조임을 알 수 있다.

자판기 슬롯  >

 JA-10 자판기는 투입구가 2개 짜리이기 때문에 슬롯번호1, 2 가 있다.  JA-10에서 현재 판매하는 재료는 콜라와 사이다이다.

 JA-20 자판기는 투입구가 2개 짜리인데 1번은 콜라용 슬롯이고, 2번은 커피용 슬롯이다.  커피의 재료는 밀크커피, 블랙커피가 있는데 현재는 밀크 커피용으로 사용되고 있다.  이력 데이터를 보면 블랙에서 밀크로 용도 변경되었음을 알 수 있다.  만약 슬롯에서 어떤 재료가 판매 되었었나를 이력으로 관리할 필요성이 있다면 PK를 "자판기번호 + 슬롯번호 + 시작일시 + 종료일시"로 변경하면 될 것이다.  여기서는 이력까지는 관리 할 필요가 없다고 가정해 둔다.

 

[ 데이터 이력  1 ]

5. 이력데이터1.jpg

 

자판기는 JA-10에는 IN, OUT 구분자로서 투입, 출력을 알 수 있다.  IN일 때는 콜라 10개, 사이다 10개가 동시에 투입되었다.  슬롯별로 판매 순번을 취하고 있다.  동시에 콜라 + 사이다가 판매된다면 2개의 데이터를 발생시키는 형태이다.

            데이터를 ROW 형태로 발생시키고 있기 때문에 사용량, 재고량을 구하기가 더 간편해 진다.

         > 이력 테이블의 SUM( IN )    = 콜라 10개,  사이다 10개

         > 이력 테이블의 SUM( OUT ) = 콜라 5개,   사이다 3개

         > 현재 JA-10 자판기의 재고 = 콜라 10개 투입 - 콜라5개 판매 = 5개 재고

            첫번째 모델 처럼  "자판기" 테이블에 재고(잔고) 컬럼이 반정규화 되어 관리되고 있다. 

 

 5. 이력데이터2.jpg

데이터를 row 형태로 변환하여 관리함으로써 데이터 모델의 유연성과 확장성이 보장되었음을 알 수 있다.

 

[ 두 모델 정리 ]

 

첫번째 #1 모델은 컬럼형태의 모습이고,  두번째 #2 모델은 ROW형태의 모습이다.

첫번째 모델의 반복적인 컬럼들을 정규화하여 분리한 모습이 두번째 모델형태 이다.

첫번째 모델이 더 단순하고 편리해 보이고, 두번째 모델이 복잡하고 어려워 보이는가 ?  속성이 모델에 나열되어 있는 것이 단순한 형태는 아니다.   실제 현장에서 사용되고 있는 테이블에는 100여개의 컬럼들이 있는데  이 컬럼들의 용도와 목적을 모를 때가 종종 있다.  프로세스별로 발생하는 속성들을 나열하면  무슨 정보가 있는지는 알겠지만 데이터 발생규칙과 구조적인 모습을 파악하기는 매우 난해 하다.  보통 이런 경우에는 데이터가 존재해야할 구조적인 위치를 잡아 주어야 되는데 이것은 "정규화"를 통해서 이루어 질 수 있다.

 

첫번째 #1 모델의 데이터는 지정된 컬럼의 값 유무에 따라  in/out이 발생한 것을 알수 있고, 두번째 #2 모델은 재료ID 컬럼에 있는 값을 보고서 어떤 재료인지를 판단 할 수 있다.  데이터 모델링에 익숙하지 않거나,  엑셀형태를 그대로 테이블로 설계하는 사이트에서는 종종 첫번째 형태의 테이블들이 설계되곤 한다.  왜냐하면  데이터가 입력되어질 필드가 속성(컬럼)으로 이미 지정되었기 때문에 더 편함을 느끼는 것 같다.

 

첫번째 #1 데이터 모델을 보고서 두번째 #2 데이터 모델로 과감하게 개선해야 겠다는 것을 어떻게 알아 낼 수 있었을까 ? ? ?

 

실제로는 매우 어려운 일이다.  1안을 2안으로 변경해야 한다는 것은 알겠지만 처음부터 2안을 생각해 내지는 못 할 것이다.  " 왜 그럴까?  이상한데 ?  무언가 꼬인것 같아 ?"  라는 질문과 의문을 계속 품고 있는 모델러만 알아챌 수 있다고 생각된다.   데이터 모델에서 관리하는 개체의 실제 모양새와  이 물체들의 개념적이고 추상적인 구조를 연구해 보아야만 2안 처럼 "슬롯" 이란 개념을 만들어 낼 수 있을 것이다.  또한 다양한 경험력도 필요하겠다. 

 

상상력과 창의력을 키워야 겠다. ;;;;

 

* 따뜻한 데이터 세상 만들기 - FROM 핫신 *
Tag :

Leave Comments