Douglas' Space
Data Modeling 본문
1. 들어가면서
"program = algorithm + data strucucture"라는 제목의 책을 보신 적이 있으신가요? 프로그램은 결국 데이터를 처리하는 알고리즘, 명령의 집합인 셈이죠. 다시 말해 모든 컴퓨터시스템은 데이터를 입력받아 뭔가를 처리하고 데이터를 외부 출력하는 시스템인 것입니다. 이때 필요에 따라 데이터를 저장하고 관리하기도 합니다. 따라서 데이터는 시스템을 구성하는 매우 중요한 구성요소의 하나라고 할 수 있습니다.
data modeling은 시스템의 데이터를 분석하고 설계하는 모든 행위를 말합니다. 따라서 시스템 개발에서 data modeling은 프로그램 개발과 함께 병행되는 중요한 개발축이라고 할 수 있습니다. 소프트웨어 분석과 설계의 한 과정이라고 할 수도 있고, 소프트웨어와 구분하여 소프트웨어 시스템을 구성하는 하나의 구성요소로 취급할 수도 있습니다. 이러한 관점에서 data modeling의 결과를 data architecture라고 부르기도 합니다.
2. data architecture의 개념
이러한 데이터들의 구조를 지칭하는 말이 data architecture입니다. 데이타도 논리적인 모델과 물리적인 모델로 존재할 수 있습니다. 논리적인 모델이나 물리적인 모델이나 모두 클래스다이어그램으로 표현할 수 있습니다.
데이터를 분석한다는 것은 데이타 객체들을 분석하고 이 객체들의 속성, 객체들 간의 관계를 식별하는 것이라 말할 수 있습니다. 데이터의 경우도 시스템의 규모에 데이터 객체를 식별하기 위해 데이터를 하향식으로 분석하고 표현하는 것이 필요합니다. 마치 functional architecture에서 기능의 구조를 계층구조로 표현하는 것과 같다고 할 수 있습니다.
가장 최하위의 데이터의 단위를 데이터요소(data element)라고 합니다. 데이타요소는 데이터의 가장 기본적인 단위입니다. 프로그램언어 관점에서 primitive data type들과 같다고 생각할 수 있습니다. 이러한 데이터요소들이 그룹핑되어 특정 데이터객체(data entity)를 표현하게 됩니다. 프로그램언어 관점에서는 structure type과 비교해서 이해할 수 있습니다. 궁극적으로 데이터를 분석한다는 것은 시스템에서 사용할 이 데이터객체들과 이들 간의 관계를 알아내는 것이라 할 수 있습니다.
시스템의 규모에 따라 데이터객체를 바로 식별할 수도 있지만 있지만 시스템의 규모가 커질수록 데이터객체들을 바로 식별하는 것이 불가능하거나 전체적으로 이해하기 어려울 수 있습니다. 따라서 데이터를 분석하거나 표현하고자 할 때 데이터를 하향식으로 주제별데이터영역(subject data area), 데이터셋(data set), 데이터객체(data entity)의 3계층으로 추상화하여 분석하거나 표현할 필요가 있습니다.
3. 데이타의 개념적 모델
데이터도 논리적 모델과 물리적 모델로 구분할 수 있습니다. 데이터의 논리적 모델을 개념적 모델이라고 합니다. 논리적 모델은 특정 기술이나 구현 방법과 무관하게 데이터의 개념적인 구조를 표현하는 모델입니다. 따라서 개념적 모델은 시스템의 성능 등을 고려하여 저장하는 방법이나 물리적으로 저장하는 구조와 무관하게 표현된 논리적 모델을 의미합니다. 결론적으로 데이터의 개념적 모델을 정의하면 "시스템의 분석 단계에서 기술적인 저장방법 및 구조를 고려하지 않은 데이터객체 및 이들 간의 관계, 의미적인 규칙 또는 제약사항을 정의한 모델" 이라고 할 수 있습니다. 이에 반해 데이터의 물리적 모델은 설계모델로서 저장방법이나 구조가 성능 등의 품질을 만족하도록 기술 종속적인 데이타 모델입니다.
위의 예는 데이타모델을 설명하기 위해 많은 예로 들고 있는 강의와 관련한 데이타모델의 일부를 클래스다이어그램으로 표현하고 있습니다. 일반적으로 데이타의 개념적 모델의 표현은 객체-관계 다이어그램(entity-relationship diagram)을 사용하였습니다. 이와 동일한 개념을 UML의 경우 클래스다이어그램으로 표현할 수 있습니다.
위의 예에서는 학생, 강좌, 교수라는 3개의 객체와 수강이라는 관계를 객체화한 관계객체를 표현하고 있습니다. 수강이라는 관계는 별도의 속성을 갖고 있어 별도의 객체로 표현하고 있습니다. "@" 는 객체의 유일한 identifier로서 키를 의미합니다. 각 관계는 cardinality라는 객체 간의 관계를 갖는 객체 인스턴스들 간의 의미적인 규칙을 표현합니다. 예를 들어 수강 관계에서 강좌는 최소한 10명의 학생이 수강을 해야 개설이 된다는 것을 의미합니다. 반대로 학생은 최소한 3개, 최대 8개의 강좌를 수강할 수 있다는 것을 의미합니다. 그리고 수강이라는 관계의 의미적 규칙으로 "한학기에 18점 이상을 신청할 수 없다"는 것을 표현하고 있습니다.
각 객체이 속성 중 녹색으로 표현된 학과, 강의실은 특히 객체로서 확장이 가능한 대상들입니다. 현재 표현된 모델에서는 별도의 객체로 표현이 되지 않았지만 학과와 강의실에 대한 별도의 속성이 존재한다면 우리는 학과와 강의실은 별도의 객체로 분리해야 할 것입니다.
4. 데이터타입 모델
모든 객체는 속성을 갖고, 각 속성은 데이터타입을 갖습니다. 이러한 데이터타입을 정의한 모델을 데이터타입 모델이라고 합니다. 프로그램언어의 데이터타입과 같다고 생각하시면 될 것 같습니다. 따라서 데이터타입 모델은 데이타모델을 구성하기 위한 가장 최하위 빌딩블럭이라고 할 수 있으며, 인터페이스 및 데이터저장소의 개념적 모델에 대한 속성을 정의합니다. 또한 프로그램에서 사용하는 변수의 타입을 정의하는 기반을 제공하기 때문에 데이터타입을 모델링하는 것은 데이터와 시스템의 품질을 좌우하는 매우 중요한 작업입니다.
데이터타입모델은 실제 값을 갖는 enumeration과 primitive datatype, 다수의 속성을 갖는 객체타입로서의 structure type의 세종류로 분류할 수 있습니다.
위의 그림은 EA도구로 표현한 3가지 형태의 데이타타입을 표현한 것으로, primitive는 특정 값의 범위, 단위, 해상도로 타입을 설명하며, enumearion은 타입이 갖는 값을 나열하고, data type은 structure type의 데이터를 표현하고 있습니다.
ATPparameterT는 enumeration의 타입으로 타입이 가질 수 있는 값이 나열되어 표현되며, TeaperationLevelT는 primitive 타입으로 해당 값이 가질 수 있는 값의 범위로서 "-10~80", 단위는 "도", 값의 해상도로서 "0.01"씩 증가한다는 것을 나타내고 있습니다. ATUserInfoT라는 data type은 user_id, password, user_role이라는 속성을 갖는 structured type으로 각 속성은 데이타타입을 가져 순환적으로 정의될 수 있습니다.
'Development Diary > Data Model' 카테고리의 다른 글
Knowledge Modeling (0) | 2023.05.29 |
---|