2장 데이터분석 및 모델링.

 

데이터베이스 설계와 구축관련 해선 근 세달만에 다시 정리를 하는 것 같다.

생각하긴 쉬워도 실천은 어렵다는 말을 매일 공감하면서도.. 그냥 공감만 하나보다..

때문에 인생의 위기를 자주 느끼고 있다.

 

이장에서는 정보시스템을 구성하는데 있어 엔티티타입, 관계, 속성을 선정하는 방법에 대해

설명한다. 모델링에 있어 가장 핵심적이고 많은 부분을 차지하는 아주 중요한 부분이다.

~ 간략하게 정리할려고 했는데..

모델링절차는 다소 복잡하고 생각하고 고민해야할게 한두가지가 아니다. 한마디로 쉽지 않은

작업이다. 물론 어떤 작업이든 깊게 파고들면 쉬운게 어딨겠냐만은

특히나 정보시스템의경우는 효율적이지 못한 모델링뒤에 따르는 출혈의 감내정도가 큰편인듯하다.

나 또한 이런 최소한의 출혈을 위해 노력중이다. ~ 감이 없어서..

 

1.엔티티타입 정의

 

데이터 모델링을 진행하는데 있어 초기단계는 엔티티타입의 정의다.

엔티티타입의 선정을 위해선 보다 계획적이고 여러방법을 동원해 분석/설계에 필요한 많은 정보등을 수집해야한다. 이러한 예로 아래와 같은 방법등이 있다.

 

업무와 관련해서 설명한 업무 기술서를 이용한다.

현업 담당자와의 인터뷰를 활용한다.

기존 시스템의 산출물을 검토한다.

DFD를 통해 업무분석을 진행했다면 DFD DATA STORE를 활용한다.

현업의 업무를 직접 견학하고 인터뷰와 업무 기술서에서 누락된 정보가 있는지 검토한다.

현재 업무에 나타나지 않았지만 BPR(Bisiness Process Reengineering)에 의해 업무를 재정의 한

경우 관련 엔티티타입을 찾아내야한다.

 

: 당연하고 일반적인 내용도 있겠지만 예측하지 못한 내용들도 많다.

특히나 업무기술서와 담당자와의 인터뷰는 중요하고 집중해야하는 과정이기도 하다.

종합적인 분석을 하기위해선 위와같은 준비 및 기록도 잘돼어 있어야한다.

 

엔티티타입을 선정하는 작업은 개념적이고 구체적으로 드러나지 않는 작업이므로 자신이 도출한 엔티타입에 대해 확신하지 못하는 경우가 많다고 한다. 또한 이런작업에 나 같은 서툰사람을

위한 가이드도 제시해 주었다. (난 왜 이걸 볼 때 더 혼란스럽지..)

 

1.업무기술서,장표,인터뷰 정리 문서 등에서 명사를 구분한다.

2.개념이 불분명한 것, 광범위한 것은 제거한다.

: 개념이 명확치 않은 것 가령 이것,저것,취소등과 같은 의미가 불분명한 것 들 을 제거한다.

또한 회사라는 명사의 경우 너무 포괄적인 의미를 담고있어 제거대상이 된다.

3.엔티티타입의 특성이나 속성값은 제거한다.

: 엔티티타입의 특성으로 보이는 것은 제거한다. 크기,길이,색상등은 엔티티타입의 속성에 포함될

수있으므로 제거. 하지만 속성도 엔티티타입이 될수있으므로 반복적인 검증이 필요하다.

4.포괄적인 업무 프로세스에 해당되는 명사는 제거한다.

:온라인,취소 등은 특정업무가 진행되는 과정을 나타내고있어 역시 제거대상.

5.중복되는 명사는 제거한다.

: 물론 동의어의 경우 별도기록후 엔티티타입의 변경이 필요하다.

6.누락된 엔티티타입이 존재하는지 유추해본다.

: 기본,중심 엔티티타입과는 달리 행위엔티티타입은 위 분석단계에서 도출하기가 어렵다.

이러한 경우는 업무의 흐름을 보고 식별해야한다. 또한 경험을 바탕으로 훈련할수록 보다 수월하게 도출할수 있다.


업무 기술서를 이용해 엔티티타입 선정하는 예를 들어보자.

게임업계에서 일하다 보니 책에있는 예제보다 직접적인 예제가 보기 좋을 듯 싶다.

게임회사에선 기획서와 각 유관부서별 담당자들과의 협의로 엔티티타입이 선정된다. 

온라인게임 섬은 이번에 길드시스템을 도입하기로 결정했다.

길드는 게임내 동일목적수행을 위해 길드장을 기준으로 한 조직이다.

길드는 공정성을 위해 100명의 구성원으로 제한하며 군단이라는 길드네 소조직 으로 나눠 각각의 군단장이 관리한다. 군단장은 길드의 기여도에 따라 구성원들에게 계급을 다르게 줄 수 있다.

길드당 하나의 길드창고를 소유하고 창고는 돈과 아이템을 축적 할 수 있다.

대충 이런 시나리오가 있다 치자.

(게임의 일부 컨텐츠에 대해서 간략한 예를 들어본것이다.)


1.
시나리오에서 명사를 구분한다.
온라인게임, , 길드시스템, 도입, 결정, 길드, 게임, 동일, 목적, 수행, 길드장, 기준, 조직
길드, 공정성, 100, 구성원, 제한, 군단, 소조직, 군단장, 관리, 기여도, 계급
길드, 하나, 길드창고, 소유, 창고, , 아이템, 축적

2.개념이 불분명한 것, 광범위한 것은 제거한다.
온라인게임, , 도입, 결정, 게임, 동일, 목적, 수행, 기준, 조직, 공정성, 제한, 관리, 소조직, 하나, 소유, 축적
길드시스템, 길드, 길드장, 길드, 100, 구성원, 군단, 군단장, 기여도, 계급, 길드, 길드창고
, 아이템

3.엔티티타입의 특성이나 속성값은 제거한다.
길드장, 100, 군단장, 기여도, 계급, , 아이템
길드시스템, 길드, 구성원, 군단, 길드창고

4.포괄적인 업무 프로세스에 해당되는 명사는 제거한다.
5.중복되는 명사는 제거한다.
길드시스템
길드, 구성원, 군단, 길드창고

6.누락된 엔티티타입이 존재하는지 유추해본다.
반복검증, 업무흐름을 통해 놓치는 부분에 대해선 담당자들과의 확인 및 지속적 검증이 필요하다.
 
해서 다음과 같은 엔티티타입이 도출됐다. 약간 억지성도있지만
2_3_1.JPG


2.
관계정의

관계란 두개의 엔티티간에 존재의 형태나 행위로 영향을 주는 것이다. 즉 둘 사이에 관련성과
연관성이 있어야한다는 소리다.

2_6_1.JPG

각각의 고객이 여러 개의 주문을 신청할 수 있다. 각 주문은 한 명의 고객에 의해 신청된다.

 

관계에서 중요한 점 세 가지는 방향, 카디널리티, 선택도다. ‘한 명의 고객이 주문을 신청할

수 있다에서 고객->주문으로 방향이 있으며, 한 명과 여러 주문은 관계에 참여한 카디널리티

에 해당되어 그림에서는 1:N으로 표시하였다.그림에서 똥글래미는 참여방법이 선택적인지 필수

적인지에 대한 형태를 나타낸다. 관계정의는 데이터 혹은 업무의 흐름 및 분석에 유용하다.

 

어떻게 관계를 도출할 것인가?

업무기술서나 장표등을 이용해 도출하는 엔티티타입과는 달리 관계는 업무 내용을 보고 유추하는작업 이라 할수있다. 그렇다고 업무기술서나 장표가 의미없는 자원이란 소린 아니다.

관계를 다음과 같은 방법으로 선정할수 있는데 아~ 복잡스럽다.

 

1)업무 기술서, 장표, 인터뷰 정리 문서 등에서 동사를 구분한다.

엔티티타입간에 동작, 행위, 작용등에 해당하는 내용을 찾아본다.

) 강사는 여러 개의 강좌를 강의할수 있다.에서 강의한다라는 동사를 찾아낼수 있다.

2)도출된 엔티티타입과 관계를 이용하여 관계 정의서를 작성한다.

기준 엔티티타입

관계 형태(방향,참여도,참여방법)

참여방법

관련 엔티티타입

사원

각각의 사원은 한 부서에 속한다.

각 부서에는 여러 명의 사원이 존재할수 있다.

필수

선택

부서

각각의 사원은 여러 개의 주문을 접속 할수있다.

각각의 주문은 한 명에 사원에 의해서만 접수된다.

선택

필수

주문

3)고객에게 질문하여 관계를 좀더 세분화하고 정확하게 도출하는 적업을 한다.

질문의 내용에는 반드시 관계의 원천이 되는 기분 엔티티타입명을 중심으로 한다.

하나/

각각

기준엔티티타입

하나/

여러

관련 엔티티타입

선택

필수

참여

방법

각각의   사원은                부서에              속할수   있습니까?

       부서에는         여러   사원이             항상   소속되어 있습니까?


이처럼 보다 정확하고 많은 정보수집을 위해 치밀하고 계획적인 준비가 필요하다.

(사담: 이회사에 와서 인상이 안좋다는 소릴많이 듣는다. 아니 예전부터 그랬을지도 모른다.

어디 불편하느냐, 불만있느냐. 내얼굴 원래 이런데.. 원래 인상인데.. 오해다.

나 같은 사람은 위 같은 상황에선 무엇보다 선~ 한 인상이 필요할 것 같다. )
4)
데이터 모델링 툴이나 칠판, 포스트잇을 이용하여 모델을 직접 그려본다.

좋은 방법이다.

5)고객과 질문하고 협의하여 모델을 검토한다.

고객과의 협의를 통해 누락된 부분이나 모호한 부분, 예외적 상황에 대해 재검증 과정을 거쳐

보다 완벽한 관계를 이끌어 낼수도 있다.

 

 
3.식별자 정의

 
내용들이 중복의 연속이다. 나 같은 사람들한테는 아주 좋다.

식별자는 엔티티타입 도출 시 개략적으로 도출된 속성 중에서 유일성과 대표성을 고려하여

결정자 속성을 선정하는 것과 관계를 이용하여 식별자를 구성하는 방법을 사용 할 수 있다.

데이터 모델링을 전개하면서 엔티티타입의 특성과 개략적으로 도출된 특성, 즉 속성을 이용하여

주식별자를 선정하여 데이터 모델에 표현하도록 한다. 일반적으로 개략적인 속성이라 할지라도

식별자에 관련된 속성은 아주 밀접한 함수 종속성을 갖고 있기 때문에 조기에 속성이 도출될 수

있다. )회원은 주민번호나 회원번호, 업체는 사업자번호

물론 도출된 주식별자 외에도 그 엔티티타입을 고유하게 하는 속성에 대해 보조 식별자로 지정하

여 이후에 물리적인 데이터베이스에서 활용한다. 외부 식별자는 엔티티타입간의 관계에 의해 도출되는 항목이므로 관계가 도출된 상태에서 주식별자를 지정하면 상속되는 외부 식별자를 쉽게 파악할 수 있다.

 

주식별자정의

1)해당 업무에서 자주 이용되는 속성을 주식별자를 지정한다.

예로 각 엔티티타입의 대표속성 중 자주사용하는 직원엔티티타입의 직원번호,

게임이라면 캐릭터엔티티타입의 캐릭터고유번호 가 될것이다.

2)속성값의 길이가 가변적인 속성은 주식별자로서 적당하지 않다.

책의 설명은 설득력이 다소 부족해 보인다. 해서 대충 억지성 예로 짜맞춰 넣어보면

값이 길이제한 및 내부물리구조적인 측면 및 통상 PK는 고정형 속성이라는 전통적 관례상

가변적인 속성은 적당치 않다.          

3)속성값이 자주변하는 속성은 주식별자로서 적당하지 않다.

주식별자의 특징은 관계를 통해 다른 엔티티타입으로 지속적으로 상속되기 때문에 관계엔티티타입의 상속된 속성값도 같이 변경해줘야 하고 많을 경우 성능상 이슈가 될 수도 있다.

4)주식별자를 선정하기 위한 속성의 수를 적게한다.

역시 상속문제로 인해 하위엔티티타입으로 갈수록 속성의 추가로 복잡도가 커지고 인덱스생성시

키값의 규모는 I/O증가와 비례하게 돼 좋지 못한 성능이 예상된다 . 또한 어플리케이션역시 불필요한 처리가 예상된다. 주식별자의 속성이 많은 경우 대표속성 추가로 단순화시켜야 한다.

5)주식별자 속성은 반드시 값이 들어와야 한다.      

예로 캐릭터엔티티타입에 주식별자인 캐릭터고유코드번호가 없다면 유저들과 정보를 매칭시켜 줄수 없는 이유에서다.

 

보조 식별자 정의

주식별자가 존재하지만 일반 속성중에서도 다른 속성에 결정자 역할을 할수도 있고, 유일성을 가지고 있다. 보조식별자는 보통 물리적으로 유니크인덱스로 지정되어 활용된다.

 

외부 식별자 정의

자기자신의 엔티티타입에서 필요한 속성이 아니라 다른 엔티티타입과의 관계를 통해 자식 쪽

엔티티타입과의 관계를 통해 자식 쪽 엔티티타입에 생성되는 속성이다. 보통 FK 역할을 한다.

부모로부터 받은 식별자를 자식 엔티티타입의 주식별자로 이용하는 경우는 PK영역으로, null

이 오면 안 되므로 반드시 부모 엔티티가 생성되어야 자기 자신의 엔티티가 생성된다.

부모로부터 받은 속성을 자식 엔티티타입이 모두 사용하고, 그것만으로 주식별자로 사용한다면

부모 엔티티타입과 자식 엔티티타입의 관계는 1:1의 관계가 되고, 부모로부터 받은 속성을 포함하여 다른 부모 엔티티타입에서 받은 속성을 포함하거나 스스로 가지고있는 속성과 함께 주식별자로 구성되는 경우는 관계가 1:M 관계가 된다.


이 게시물을..