게시판
      
상위분류 : 잡필방 중위분류 : 서류가방 하위분류 : 전산과 컴퓨터
작성자 : 문시형 작성일 : 2016-01-26 조회수 : 5,037
제 목 : 구매 주문 논리 데이터 모델링

구매 주문 논리 데이터 모델링

 

아래 그림구매 주문서는 구매 담당자가 구입하고자 하는 물품을 주문 할 때 발생하는 서류로써, 전사적인 관점에서 공유, 활용하기 위하여 통합되어 있는 것이 아니라, 구매 담당자 관점에서 바라보는 정보의 구조와 규칙을 보여주고 있다. 이 구매 주문서를 다른 구매 주문서와 분리되어 존재하는 하나의 실체(Entity)라 할 수 있다.




 

실체(Entity)란 다른 사물과 분리되어 존재하며, 자기 자신만의 명확한 정체성을 갖는 어떤 것을 말하며, 실체유형(Entity Type)이란 조직의 업무를 수행하는데 필요로 하는 사물(Thing: 사원, 고객, 상품), 사건(Event: 계약, 주문, 납품), 개념(Concept: 부서, 계정과목)을 나타내는 어떤 것으로, 동일한 업무 행위나 유사한 속성을 갖는 단일 개념으로 정의한 실체들의 집합체라 할 수 있다.

“1번 구매 주문서”, “2번 구매 주문서”등동일한 특성을 갖는 구매 주문서들을 모아 하나의 단일 개념으로 추상화(Abstraction)한 유형(Type)을 생성한다면, 우리는 “구매주문”이라는 실체유형(Entity Type)을 정의할 수 있는 것이다.

그림실체유형 정의에는 여러 학자들이 정의한 실체유형의 정의를 보여주고 있다. 다시 한번 강조하자면 실체유형이란 조직의 업무에서 발생하는 정보 또는 데이터를 관리, 저장하고자 하는 어떤 구별 가능한 사람, 장소, 사물, 사건 또는 개념이라고 할 수 있다.



위의 그림구매 주문서와 같이 현실 세계에서 발생하는 각각의 구매 주문서를 추상화를 한다면 아래 그림 구매 주문서 추상화와 같을 것이다.



현 실 세계 구매주문 업무에서 발생하는 “1번 구매 주문서”, “2번 구매 주문서”등 각각의 구매 주문서(실체)를추상화를 이용하여 개념 세계의 논리 데이터 모델을 생성하고, 물리 테이블 구조를 생성한다면 그림플랫 파일주5)(Flat File) 데이터 구조와 같이 만들 것이다





그 림플랫 파일 데이터 구조에 실제 발생되는 데이터 값을 대입해 보면 그림구매 주문 발생 데이터와 같이 보일텐데 “주문번호”가 ‘200901001’, ‘200901002’ 등의 구매 주문은 현실 세계 업무에서 다른 구매 주문과는 분리되어 존재하며, 자기 자신만의 정체성을 갖는 하나의 실체(Entity)라고 할 수 있다.

그림플랫 파일 데이터 구조에 발생한 그림구매 주문 발생 데이터의 가장 큰 특징은 정규화(Normalization)되어 있지 못하여, 데이터 값이 여러 문서나 화면에 중복되어 나타난다는 것인데, 정규화가 안된 데이터 구조나 중복 데이터 구조는 입력, 수정, 삭제 이상이라는 데이터 이상 현상이 발생하여 데이터의 정확성(Correctness)과 일관성(Consistency)을 보장하지 못하여 정보의 품질에 나쁜 영향을 미칠 수 있다는 것이다.
 

입력 이상(Insertion anomaly)

그림플랫 파일 데이터 구조의 구매 주문 실체유형은 별도의 사실이 발생하기 전까지 원하는 데이터를 입력할 수 없다.어떤 데이터를 입력하려고 할 때 불필요하게 원하지 않는 데이터도 함께 입력해야 하는 구조로 되어 있는 것이다. 일반적으로 제조, 유통회사에서 자재나 상품을 납품하는 회사(고객)들은 사전에 미리 승인되어 있는 경우가 대다수이다. 이런 경우 새로운 납품 회사(고객)를등록하려고 하면 반드시 구매 주문을 입력해야만하는 구조로 되어 있어 구매 주문이 발생하기 전까지는 새로운 납품 회사(고객)를 등록할 수 없는 문제가 발생하게 된다.이러한 문제를 해결하기 위해서는 납품 회사(고객)실체유형을 생성해야 한다는 것을 인식할 수 있을 것이다. 또한 상품과 납품지점(부서)에서도 이러한 문제는 동일하게 발생한다는 것을 알 수 있을 것이다.
 

수정 이상 (Update anomaly)

일부 속성 값을 수정 함에 있어서 원하지 않는 정보의 이상 현상(데이터의 정확성과 일관성을 보장 못하는 현상)이 발생할 수도 있다.그림구매 주문 발생 데이터의 납품 회사 ‘S09001’의 회사명을 바꾼다고 하면 ‘S09001’ 모든 건의 회사명을 바꾸어야만 한다. 수백, 수천만 아니 그 이상의 데이터가 될지도 모르는 구매 주문 데이터에서 납품 회사 ‘S09001’을 찾아 회사명을 다 수정해야 하는데 일부만 수정한다면 납품 회사 ‘S09001’ 회사명이 동일하지 않을 것이다. 입력 이상과 마찬가지로 이러한 이유로 납품 회사 실체유형을 별도로 생성해야 한다는 것을 인식할 수 있을 것이다.
 

삭제 이상 (Delete anomaly)

일부 정보를 삭제함으로써 유지되어야 할 정보까지도 연쇄 삭제되는 현상이 발생할 수 있다.만일 어떤 납품 고객에게 어떤 특정한 상품을 한 번 주문한 경우, 이 상품을 삭제하게 되면 고객도 삭제되고, 고객을 삭제하면 상품도 삭제되어 정보를 잃게 된다. 또한 주문번호 ‘200901001’의 제품 ‘스마트TV’의 등록을 취소한다고 하였을 때, 자연히 주문번호 ‘200901001’의행(Row)에서 품명 ‘스마트TV’만 삭제해야 하는데, 행 전체를 삭제하게 되는 삭제 이상 현상이 발생한다.

이러한 플랫 파일 데이터 구조가 갖는 데이터의 중복성과 종속성으로 인하여 발생하는 입력, 수정, 삭제 이상이라는 문제점을 해결하고자 응용 프로그램과 데이터의 중재자로서 모든 응용 프로그램들이 데이터베이스를 공유할 수 있게끔 관리해 주는 데이터베이스 관리 시스템(DBMS: DataBase Management System)이라는 소프트웨어 시스템을 만들게 되었다.

관계형 데이터베이스 모델이 상용화 되기 이전 데이터베이스 관리 시스템 초기의 데이터베이스 모델에는 계층형(Hierarchical) 데이터베이스 모델이나 망형(Network) 데이터베이스 모델이 있는데, 이 두 가지 데이터베이스 모델도 플랫 파일 데이터 구조에서 나타나는 데이터의 중복성과 종속성의 문제를 해결하는데 실패하였고, 이러한 문제는 코드(E.F. CODD) 박사가 주창한 관계형 데이터베이스 모델에 와서야 많은 부분 해결할 수 있었다.

관계형 데이터베이스 모델에서는 데이터의 입력, 수정, 삭제 이상이라는 현상을 제거하기 위하여정규화(Nomalization)라는 기법을 사용 한다. 물론 정규화는 계층형 데이터베이스 모델이나 망형 데이터베이스 모델에도 적용할 수 있겠지만, 이 두 개의 데이터베이스 모델은 구조적인 한계 때문에 정규화의 목적을 제대로 구현할 수 없는 결함을 내포하고 있다.

정규화를 수행하는 가장 큰 목적은 최대한 데이터 중복을 제거하여 데이터의 정확성(Correctiness)과 일관성(Consistency)을 보장하는 데이터 구조를 만드는 것이다. 즉, 정규화라는 것이 기본적으로 데이터의 무결성을 보장하는 구조라는 것을 명확하게 이해해야 할 것이다.

정규화에 대한 자세한 사항은 정규화를 얘기할 때 좀 더 자세히 할 것이며, 여기서는 구매 주문이라는 플랫 파일 데이터 구조의 입력, 수정, 삭제 이상을 제거하기 위해서 정규화 이론을 간단히 도입하면서 구매 주문 업무에 대한 논리 데이터 모델링을 진행해 보겠다.

본서에서 얘기하는 정규화는 데이터베이스 이론 책에서 얘기하는 함수 종속성이니, 이행 종속성이니 하는 대학교에서 컴퓨터 공학을 전공하는 학생들에게나 필요한 수학적으로 정의하는 그런 정규화에 대한 이론이 아니다. 현실적으로 업무에서 필요로하는 정보 시스템을 구축할 때 논리 데이터 모델링을 수행하는 사람들이 반드시 고려해야 할 매우 단순한 방법이다.

단순한 논리 데이터 모델링을 소개하면서 정규화에 대한 얘기가 처음부터 나오니 매우 당황하는 독자도 있겠지만, 위에서도 얘기한 바와 같이 정규화를 수행하는 가장 큰 목적은 최대한 데이터 중복을 제거하여 데이터의 정확성과 일관성을 보장하는 데이터 구조를 만드는 것으로 논리 데이터 모델링을 수행하는 가장 중요한 기법 중 하나라고 할 수 있으니 매우 유심히 살펴 보았으면 한다.
 

1차 정규화(First Normalization)

그림구매 주문 발생 데이터를 살펴 보면, 색깔이 칠해져 있는 “주문번호”, “주문일자”, “납품회사코드”, “납품회사명”은 동일한 주문번호에서 “상품코드”가 바뀔 때 마다 동일한 값들이 반복(중복)되어 보이고 있다. 플랫 파일 데이터 구조의 실체유형 “구매주문”에서 이러한 반복 그룹을 별도의 실체유형으로 생성하는 것을 1차 정규화(First Normalization)라고 한다.



초 기의 관계형 모델 이론에서는 모든 속성은 반드시 하나의 값을 가져야 한다라고 정의하고 있다. 1차 정규화는 이렇게 두 가지 방법으로 정의하고 있는데 이에 대한 자세한 사항도 정규화를 얘기할 때 좀 더 자세히 논할 것이며, 여기서는 일단 입력, 수정, 삭제 이상이라는 데이터 이상 현상을 제거하기 위하여 반복 그룹 속성을 별도의 실체유형으로 생성해야 한다라고만 기억하자.

그림반복 그룹 제거 구매 주문 발생 데이터를 보면 “상품코드” 왼쪽의 데이터들은 같은 “주문번호”에 한번씩 만 보이고 있다. 우리는 이제 이러한 데이터를 보면서 구매 주문 1차 정규형 데이터 모델을 생성할 수 있다.

그 림 구매 주문 1차 정규형 데이터 모델에서 바커(Richard Barker)의 CASE*Method 표기법(Notation)에서는 실체유형을 모서리가 둥근 사각형으로 표현하고, 실체유형명은 이 사각형 안에 표현한다. 이와 비교하여 정보 공학 방법론(IEM: Information Engineering Methodology)에서의 실체유형 표현 방법을 살펴보면, 실체유형을 각진 사각형과 모서리가 둥근 사각형 두 가지의 방법으로 표현하고, 실체유형명은 이 사각형 위에 표현한다. 이는 ER-Win이라는 케이스 툴에서 실체유형을 정보 공학 방법론으로 표현한 것인데, 각진 사각형은 독립 실체유형이라 하고, 모서리가 둥근 사각형은 종속 실체유형이라고 한다. 여기서는 실체유형의 표현이 표기법에 따라 약간 다르다는 것 만을 이해하고, 자세한 것은 실체유형 정의에서 알아보기로 하겠다.



일반적인 상거래에서 하나의 구매 주문에 여러 개의 상품이 주문된다는 업무적인 사실은 구매 주문 1차 정규형 데이터 모델을 보면서 직관적으로 이해할 수 있을 것이다.

속 성 앞에 샵(#) 또는 별표(*) 표시가 되어 있는 일련의 속성을 볼 수 있다. 속성 앞에 샵(#) 표시가 있는 속성은 유일 식별자(Unique Identifier) 또는 프라이머리 키(PK: Primary Key)를 나타내는 것이고, 별표(*) 표시가 있는 속성은 필수(Mandatory, Not Null) 속성을 나타낸다. 실체유형 “주문”에서는 “주문번호”가 식별자이고, 실체유형 “주문상품”에서는 “주문번호” + “상품코드” 즉, 두 개의 속성이 식별자를 이루고 있다. 이러한 식별자는 반드시 값이 존재하며, 유일해야 한다는 특성을 가지고 있는데 자세한 내용은 식별자 정의에서 살펴보기로 하고, 여기서는 바커(Richard Barker)의 CASE*Method 표기법에서 속성 앞에 표기되는 기호만 이해하고 넘어가기로 하자.

1차 정규화를 수행한 그림구매 주문 1차 정규형 데이터 모델은 우리가 앞에서 살펴본 입력, 수정, 삭제 이상이라는 데이터 이상 현상 문제를 아직은 해결 못하고 있다. 이러한 데이터 이상 현상을 해결하기 위해서는 “고객”, “상품”, “부서” 실체유형이 각각 필요하다.
 

2차 정규화(Second Normalization)

2차 정규화란 식별자를 구성하는 전체 속성에 종속되지 않고 식별자 일부에 종속적인 속성이 있다면, 이 속성을 현재의 실체유형에서 빼내 다른 실체유형을 생성하라는 것이다.



그 림1차 정규형 구매 주문에서 실체유형 “주문상품”의 식별자(PK: Primary Key)를 보면 “주문번호” + “상품코드” 두 개의 속성으로 구성되어 있다. 여기서 “상품명”이라는 속성은 식별자(“주문번호” + “상품코드”) 전체에 종속되는 속성이 아니라, 식별자 중 일부 속성인 “상품코드”에만 종속되는 속성이다. 그러므로 우리는 “상품”이라는 실체유형을 새로 생성하여 “상품코드”와 “상품명”을 관리할 필요가 있는 것이다. 다시 말해서 “상품” 실체유형을 정의하지 않는다면, 즉, 2차 정규화를 하지 않는다면 입력이상, 수정이상, 삭제이상이라는 데이터 이상 현상이 발생할 것이기 때문에 정규화를 해야 하는 것이다.
 

3차 정규화(Third Normalization)

3차 정규화란 식별자를 제외한 속성들 간에는 종속성이 없어야 한다는 것이다. 즉, 식별자 이외의 속성 간에 종속성이 있다면, 이 속성을 현재의 실체유형에서 빼내 다른 실체유형을 생성하라는 것이다.

그 림1차 정규형 구매 주문에서 실체유형 “주문”의 속성 “납품회사코드”와 “납품회사명”을 살펴보면 “납품회사명”이라는 속성은 식별자 “주문번호”에 종속되는 속성이 아니라, 식별자가 아닌 “납품회사코드”에 종속되는 속성이라는 것을 알 수 있을 것이다. 그러므로 우리는 “납품회사”라는 실체유형을 새로 생성하여 “납품회사코드”와 “납품회사명”을 관리할 필요가 있는 것이다.

이러한 “납품회사” 실체유형을 정의하지 않는다면, 즉, 3차 정규화를 하지 않는다면 여기서도 입력이상, 수정이상, 삭제이상이라는 데이터 이상 현상이 발생할 것이기 때문에 정규화를 해야 하는 것이다



그 림3차 정규형 구매 주문은 3차 정규화까지 실시한 3차 정규형 구매 주문 논리 데이터 모델을 보여주고 있다. 여기서 정규형이라는 용어는 정규화를 실시한 결과의 논리 데이터 모델을 말한다. 즉, 1차 정규화를 행한 모델을 1차 정규형 모델이라 하고, 2차 정규화를 행한 모델을 2차 정규형이라 하는데 2차 정규형은 1차 정규화와 2차 정규화가 끝난 논리 데이터 모델을 말한다. 그러므로 3차 정규형 논리 데이터 모델이란 1,2,3차 정규화가 모두 실행된 논리 데이터 모델을 말한다.

실체유형 “고객”과 “주문”의 관계에 있어서 실체유형 “고객”과 “주문”의 식별성은 현실 세계에서 주문 한 건을 식별할 때, 정보 시스템 구축 이전부터 유일한 값을 갖는 “주문번호”라는 속성으로 식별 했기 때문에 비식별 관계로 표현을 했고, 선택성은 실체유형 “고객”에 하나의 실체(멤버)를 입력할 때 “주문”의 실체(멤버)가 필요없기 때문에 선택(Optional) 관계이고, 역으로 실체유형 “주문”에 하나의 실체(멤버)를 입력할 때 “고객”의 실체(멤버)가 반드시 필요하기 때문에 필수(Mandatory) 관계로 표현하고 있가 여러 번의 주문을 할 수 있기 때문에 일 대 다의 관계로 표현하고 있는 것이다.

3차 정규형 구매 주문 논리 데이터 모델에서 보는 바와 같이 논리 데이터 모델링의 최종 산출물인 논리 데이터 모델 즉, ERD(Entity Relationship Diagram)는 조직에서 업무를 수행하는 사람들이 필요로 하는 정보의 구조와 규칙을 직관적으로 이해할 수 있게 도형(Diagram)과 문장(Text)을 사용하여 표현해 놓은 것이다.

필자가 강조하려는 것은 정규화가 아니다. 이러한 정규화에 대하 기법은 모든 책에 다 있다. 여기서 강조하는 내용은 어떻게 업무에서 발생하는 데이터의 구조와 규칙을 추상화하여 나가는가 하는 과정을 보여주고자 가장 쉬운 업무를 가지고 얘기한 것뿐이다.

아래 그림과 같은 데이터 모델에서 정규화를 수행하려면 손해 보험 업무를 모르고서는 정규화를 할 수 없을 것이다. 즉, 필자가 강조하고 싶은 것은 어떻게 업무를 이해하고, 분석하여 이를 데이터 모델에 표현하느냐 하는 것이다. 업무를 이해하고, 분석하는 것은 데이터 모델링의 가장 중요한 사항이며, 논리 데이터 모델링의 전부라 할 것이다.



논 리 데이터 모델을 생성하는데 입력, 수정, 삭제 이상이라는 데이터 이상 현상을 없애기 위하여 기본적으로 정규화를 수행해야 하지만, 반드시 정규화를 수행해야 하는 것은 아니다. 정규화 보다도 더 중요한 것이 논리 데이터 모델을 이용하여 업무를 수행할 수 있느냐 하는 것이다. 이에 대한 자세한 사항은 지면 관계상 정규화에서 얘기하도록 하겠다.

 








 

출처 : 한국데이터베이스진흥원

제공 : DB포탈사이트 DBguide.net

| | 목록으로