- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=1966771&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
- 데이터 모델링에 절대적인 방법이 존재하는 것인 아니라는 사실을 꼭 기억해야한다.
- 성공적인 데이터 모델링을 위해서는 업무조직에 대한 깊은 참여와 이해 그리고 철저한 분석이 필요하게 된다.
- 서로 다른 프로젝트 수행 중에 비슷한 모델링 작업이 진행되는 경우가 많은데 이런 것이 ERP패키지 같은 유형이 존재하게 되는 것이다
- 완벽한 모델링을 위해 가장 객관적으로 논의하고 검증하는 작업이 지속적으로 유지되어야 한다.
- 2장에서는 엔티티타입 정의 관계 정의, 식별자 정의, 세부 사항 정의, 통합화, 데이터 모델 검증에 대해 설명한다. |
- 다음 같은 순서로 모델링을 진행하면 효과정인 진행 방법이 될 수 있다.
데이터 검증 | 엔티티타입 검증, 관계 검증, 속성 검증 도메인 검증 |
통합화 | 엔티티타입 통합 |
세부 사항 정의 | 속성 상세 정의, 정규화 도메인 정의, 속성 규칙 정의 |
식별자 정의 | 주식별자 정의, 보조 식별자 정의, 식별자 업무 규칙 정의 |
관계 정의 | 엔티티타입 관계 정의 |
엔티티타입 정의 | 엔티티타입 정의 |
2.2 관계 정의
![]() |
데이터 검증 | 엔티티타입 검증, 관계 검증, 속성 검증 도메인 검증 |
![]() |
통합화 | 엔티티타입 통합 |
![]() |
세부 사항 정의 | 속성 상세 정의, 정규화 도메인 정의, 속성 규칙 정의 |
![]() |
식별자 정의 | 주식별자 정의, 보조 식별자 정의, 식별자 업무 규칙 정의 |
![]() |
관계 정의 | 엔티티타입 관계 정의 |
---|---|---|
![]() |
엔티티타입 정의 | 엔티티타입 정의 |
- 관계를 정의하고자 하면 해당 엔티티타입으로부터 타 엔티티타입간의 관계가 존재하는지 확인하는 작업을 먼저 해야 한다.
- 관계를 기술하는 방법에는 여러가지 방법이 있지만 다음과 같은 쌍으로 기술하는 방법이 도움이 된다.
- 관계에서 중요한 것은 방향, 카디낼리티, 선택도 이다.
- 관계를 정의하는 것은 엔티티타입에 대해 어느정도 검증될 수 있으며, 업무 흐름을 이해하는데 절대적인 영향을 준다.
어떻게 관계를 도출할 것인가?
- 엔티티타입을 선정하기 위해 사용했던 6가지 방법과 동일
- 강사는 여러 개의 강좌를 강의할 수 있다. 기술 대학원에서는 여러 명의 강사를 기록하고, 관리한다. 기술 대학원에서 과목당 개설한 강좌는 강사 한 명이 강의를 진행한다
- 업무 기술서, 장표, 인터뷰 정리 문서 등에서 동사를 구분한다.
- '강의한다', '기록하고 관리한다', '개설한다'
- 도출된 엔티티타입과 관계를 이용하여 관계 정의서를 작성한다.
기준 엔티티타입 | 관계 형태(방향, 참여도, 참여 방법) | 참여 방법 | 관련 엔티티타입 |
---|---|---|---|
사원 | 각각의 사원은 한 부서에 속한다. 각 부서에는 여러 명의 사원이 존재할 수 있다. |
필수 선택 |
부서 |
사원 | 각각의 사원은 여러 개의 주문을 접수 할 수 있다. 각각의 주문은 한 명에 사원에 의해서만 접수된다. |
선택 필수 |
주문 |
- 고객에게 질문하여 관계를 좀더 세분화하고 정확하게 도출하는 작업을 한다.
- 각각의 사원은 한 부서에 소속됩니까? ← 사원과 부서의 참여 형태 및 1:1의 카니낼리티 파악
- 각각의 사원은 부서에 소속되지 않을 수도 있습니까? ← 관계의 선택/필수 파악
- 각각의 사원은 여러 부서에도 소속될 수 있습니까? ← 1:M의 카니낼리티 파악
- 데이터 모델링 툴이나 칠판, 포스트잇을 이용하여 모델을 직접 그려본다.
- 고객과 질문하고 협의하여 모델을 검토한다.
관계 정의 예
page 90.
2.3 식별자 정의
![]() |
데이터 검증 | 엔티티타입 검증, 관계 검증, 속성 검증 도메인 검증 |
![]() |
통합화 | 엔티티타입 통합 |
![]() |
세부 사항 정의 | 속성 상세 정의, 정규화 도메인 정의, 속성 규칙 정의 |
![]() |
식별자 정의 | 주식별자 정의, 보조 식별자 정의, 식별자 업무 규칙 정의 |
---|---|---|
![]() |
관계 정의 | 엔티티타입 관계 정의 |
![]() |
엔티티타입 정의 | 엔티티타입 정의 |
- 앞에서 명사를 이용하여 엔티티타입을 도출하고 동사형을 이용하여 관계를 도출하였다.
- 도출된 엔티티타입의 속성 중에서 유일성과 대표성을 이용하여 결정자를 선택 할 수 있다.
- 도출된 엔티티타입 속성들의 관계를 이용하여 결정자를 선택 할 수 있다.
- 엔티티타입은 기본, 중심, 핵심 엔티티타입으로 구분 할 수 있다.
- 여러 식별자 중 주식별자 결정이 데이터 모델에서 가장 중요하다. 주식별자 결정에 따라 모델의 복잡성을 결정하는 요소가 됨
주식별자 정의
- 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다(PK)
- 사원번호
주민번호 우편번호 주소 전화번호 메신저ID 전자메일ID
- 주민등록번호
사원번호 우편번호 주소 전화번호 메신저ID 전자메일ID
- 속성값의 길이가 가변적인 속성은 주식별자로서 적당하지 않다.
← 공통적인 코드를 모아 업무코드를 만들고 부서코드를 포함함
- 속성값이 자주변하는 속성은 주식별자로서 적당하지 않다.
- 전자메일ID
학번 이름 주소 생년월일
- 학번
?메일ID 이름 주소 생년월일
- 주식별자를 선정하기 위한 속성의 수를 적게 한다.
- 복합 식별자일 때 가능하면 주식별자가 7~8개를 넘지 않도록한다.
- 주식별자에 적당한 속성이 존재하지 않으면 주식별자를 생성(Artificail Identifier)하여 지정하도록 한다.
- 접수접수일자관할부서입력자사번접수방법코드신청인구분코드신청자주민번호신청회수
신청자명 장소 계약금 내용 접수상태코드
- 접수번호
신청자명 장소 계약금 접수일자 관할부서 입력자사번 접수방법코드 신청인구분코드 신청자주민번호 신청회수 내용 접수상태코드
주식별자 속성은 반드시 값이 들어와야 한다.
보조 식별자 정의
- 주식별자가 존재하지만 일반 속성 중에서도 다른 속성에 결정자 역할을 할 수 있고, 유일성을 가지고 있는 속성을 보조 식별자로 정의한다(Unique Index)
- 예) 사원번호를 주식별자로 하고 유일성을 가지는 주민번호를 보조 식별자로 활용한다.
외부 식별자 정의
- 다른 엔티티타입과의 관계를 통해 자식 쪽 엔티티타입에 생성되는 속성을 외부 식별자라 한다(FK)
- 엔티티타입에 주식별자가 지정되고 엔티티타입간 관계를 연결하면 부모쪽의 주식별자를 자식 엔티티타입의 속성으로 내려보내진다.
- 이때 자식 엔티티타입에서 부모 엔티티타입으로부터 받은 외부 식별자를 자신의 주식별자로 이용(식별자 관계)할것인지 또는 부모와 연결되는 속성으로서만 이용(비식별자 관계)할 것인지를 결정해야 한다.
- 위와 같이 자식 엔티티타입의 주식별자로 부모의 주식별자가 상속되는 경우를 식별자 관계라 한다.
- 주식별자로 사용않고 일반적인 속성으로만 사용하는 경우를 비식별자 관계라 한다.
비식별자관계 생성 이유
- 부모가 있었지만 자식만 남겨두고 먼저 소멸될 수 있는 경우
- 부모 없는 자식이 생성될 수 있는 경우
- 여러 개의 엔티티타입이 하나의 엔티티타입으로 통합되어 표현될 경우
- 자식 엔티티타입에 별도의 주식별자를 가지고 있는 것이 더 유리하다고 판단되는 경우
- 자식과 관련이 있는 엔티티타입으로의 주식별자 상속을 차단하기 위해서
2.4 속성 정의
![]() |
데이터 검증 | 엔티티타입 검증, 관계 검증, 속성 검증 도메인 검증 |
![]() |
통합화 | 엔티티타입 통합 |
![]() |
세부 사항 정의 | 속성 상세 정의, 정규화 도메인 정의, 속성 규칙 정의 |
---|---|---|
![]() |
식별자 정의 | 주식별자 정의, 보조 식별자 정의, 식별자 업무 규칙 정의 |
![]() |
관계 정의 | 엔티티타입 관계 정의 |
![]() |
엔티티타입 정의 | 엔티티타입 정의 |
- 선정된 엔티티타입에 업무 프로세스가 사용되는 속성을 정의하는 것이 좋다.
속성 상세 정의
- 고객이라는 엔티티타입에서 성명, 우편번호, 집주소, 전화번호, 전자메일, 홈페이지가 속성이되며
- 업무와는 무관한 키, 옷, 몸무게 등처럼 해당 업무상에서 필요로 하는 데이터인지 아닌지를 구분하여 분석해야 한다.
- 각각의 속성은 반드시 하나의 엔티티타입에 속해 있어야 하고, 전체 데이터 모델에서 하나의 의미만을 가지고 있어야 한다.
- 속성을 선정하는 시점
- 업무에 대한 자료를 수집하는 동안
- 엔티티타입을 추출하는 동안
- 프로세스 모델링을 진행하는 동안
- 데이터 모델과 프로세스 모델을 교차 체크하는 상관 모델링 단계에서
- 기존의 시스템을 분석하면서
- 속성은 모델링 이후에도 지속적으로 추가되고, 검증되는 작업이 진행되므로 완벽하게 정의할 필요는 없다.
- 엔티티타입 내에서 하나의 속성은 한 시점에 한 개의 값만을 가지는 것이 원칙이다
- 때로는 시간에 따라 하나의 엔티티타입 내에서 속성값이 변할 수 있다. 이러한 속성을 "다중값 속성"이라 한다.
- 다중값 속성이 발생하는 경우 새로운 엔티티타입이 생성되어야 한다.
정규화
- 속성이 엔티티타입에 배치된 이후에 속성값을 조사하여 정규화 대상을 찾아 적용하도록 한다.
- 위의 다중값 속성은 1차 정규화 대상이 되는 경우에 해당된다.
도메인/용어정의
- 도메인 정의서에 따른 각 속성의 도메인 지정
- 도메인은 속성이 물리적인 데이터베이스에서 데이터값을 어떤 형태로 가지고 있을것이며 얼마만한 길이로 가지고 있을 것인지를 지정하는것.
- 용어사전에 따른 속성명 지정
- 논리명과 물리명을 정의하는 것
- 논리명은 업무로부터 도출된 속성의 이름을 의미(한글)
- 물리명은 데이터베이스에 구축될 속성을 의미(영어)
속성 규칙 정의
- 속성을 좀더 상세하게 분석하기 위한 네가지 속성
- 속성의 3분류를 정의한다.
1분류 BASIC 업무상 수집된 기본속성 2분류 DESIGNED 업무에 필요한 정보를 주기위해시스템에서 고안한 속성(코드 등) 3분류 DERIVED 다른 속성에 의해 계산되거나 영향을 받아 생성된 속성(금액총합,이자 등)
- 속성값의 필요 여부를 정의 한다.(Optional, Mandatory or Null, Not Null)
- 속성값의 기본값을 정의한다.(Default)
- 반드시 정해진 값만을 가져야 하는지 정의한다.(Check)
2.6 용어사전 정의
- 용어사전을 정의하는 이유는 논리 데이터 모델에 기술된 속성명과 테이블명에 업무적인 용어 적용이나 프로젝트에서 사용하기 위한 이름을 부여하여 데이터 모델과 애플리케이션 인터페이스에서 효율적인 정보화 시스템을 구축하기 위함
- 용어사전은 업무 기술서의 내용을 보고 분석하는 것이 가장 좋으며, 엔티티타입을 정의할 때 이용했던 여러 가지 업무 분석 방법을 모두 적용하여 용어를 도출하는 것이 좋다.
엔티티타입의 속성명을 모두 한곳에 모아 기술한다.
- 속성명은 그 업무에서 사용하는 업무적인 특성을 기술한 것이므로 속성명을 통해서 용어사전을 기술하는 것이 가장 효과적
속성명을 업무에서 사용하는 단어의 단위로 분리한다.
- 복합어를 단일어로 분리하고 중복되는 단어는 삭제하여 속성명을 유일하게 만드는 작업을 한다.(급여청구최대한도->급여,청구,최대,한도)
각각의 단위 속성에 의미를 기술하고 물리 속성명을 업무 특성에 적합하게 정의한다.
- 일반적으로 생각하는 의미의 단어뜻이 업무에서 다르게 사용될 수 있으므로 업무 기준의 의미로 기술해야 한다.
물리 속성명 명명 규칙을 정한다.
- LAST_WORK_DATE OR LASTWORK_DATE OR LastWorkDate
단위 속성명에 따라 엔티티타입의 모든 속성명에 대해 논리 속성명을 일치시키고, 물리 속성명을 생성해준다.
- 급여/PAY, 청구/DEMAND, 최대/MAX -> PAY_DEMAND_MAX
2.7 4-STEP 데이터 모델링
- 실제로 업무를 분석하는 많은 분석가들은 엔티티타입 도출에 많은 어려움을 느낌
- 업무에의 흐름을 이해한 상태에서 직접 엔티티타입과 속성 및 관계를 도출하는 방법
- 4-STEP데이터 모델링은 업무를 잘 이해하고 있으면 최상의 모델링 작업을 진행 할 수 있는 모델링 방법이다.
1-STEP | 업무 구조 모델링 | 정적인 엔티티타입이나 속성을 도출 | '직원은 부서에 속해 있다' |
2-STEP | 업무 흐름 모델링 | 행위에 따른 엔티티타입, 속성, 관계를 정의 | '강사가 강의를 한다' |
3-STEP | 모델의 기술적 접근에 의한 모델링 | 업무 흐름에서 제공되지 않고 모델링을 통해 데이터 모델을 완성해가는 단계 | |
4-STEP | 모델 검토 및 정제를 통한 모델링 | 검증단계로 엔티티타입, 관계, 속성 등의 변경 및 추가 또는 삭제, 정제 작업 단계 |
2.8 모델링 용어
데이터 모델링 | 정보화시스템을 구축하기 위해 어떤 데이터가 존재하는지 또는 업무에 필요한 정보는 무엇인지 분석하는 방법 |
엔티티타입 | 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 것으로 영속적으로 존재하는 단위(엔티티의 집합) |
엔티티 | 데이터의 기본 단위로서 업무에서 관리하고자 하는 대상에 대한 정보를 가지고 있는 단위 (물리적 대상, 개념, 활동) |
속성 | 업무에 필요한 엔티티에서 관리하고자 하는 더 이사 분리되지 않는 최소의 데이터 단위 |
-> 엔티티타입에는 두 개 이상의 엔티티가 존재하고 각각의 엔티티는 고유의 성격을 표현하는 속성 정보를 한 개 또는 그 이상 가진다. | |
식별자 | 여러 개의 집합체를 담고 있는 하나의 엔티티타입에서 각각의 엔티티를 구분할 수 있는 결정자(모든엔티티타입에는 반드시 하나 이상의 식별자가 있어야 한다.) |
주식별자 | 엔티티타입의 대표성을 나타내는 유일한 식별자(PK) |
보조 식별자 | 주식별자를 대신하여 보조적으로 엔티티를 식별할 수 있게 한다. (Unique Index) |
내부 식별자 | 자신의 엔티티타입 내에서 스스로 생성되어 존재하는 식별자 |
외부 식별자 | 다른 엔티티타입으로부터 관계에 의해 주식별자 속성을 상속받아 자신의 속성에 포함되는 식별자(FK) |
단일 식별자 | 주식별자의 구성이 한가지 속성으로만 이루어진 경우 |
복합 식별자 | 주식별자의 구성이 한가지 이상의 속성으로 우루어진 경우 |
관계 | 두개의 엔티티타입 사이의 논리적인 관계, 즉 엔티티의 엔티티가 존재하는 형태나 행위로서 서로에게 영향을 주는 것을 말한다. |
관계 카디낼리티 | 두 개의 엔티티타입간 관계에서 참여자의 수를 표현하는 것 (1:M, 1:1, M:N) |
엔티티수퍼타입 | 여러 개의 엔티티타입이 비슷하고 일부의 속성이나 관계만 다를 경우 여러 개의 엔티티타입을 한 개의 엔티티타입으로 묶어 통합한 것 |
엔티티서브타입 | 엔티티 수퍼타입 안에 포함되어 표시된 비슷한 성격의 엔티티타입 |
서브젝트 에이리어 | 해당 업무 내에서 연관이 많은 엔티티타입을 그룹으로 묶어 표시하는 개념 |
ERD | Entity Relationship Diagram 업무 분석에 도출된 엔티티타입과 엔티티타입간의 관계를 이해하기 숩게 그림으로 표시하는 방법 |
도메인 | 컬럼에 입력되는 데이터 형식 및 길이를 지정할 수 있도록 사전에 미리 정의한 데이터의 형식/길이 목록 |
DFD | Data Flow Diagram 데이터가 소프트웨어 내의 각 프로세스를 따라 흐르면서 변환되는 모습을 나타낸 그림으로 4가지의 구성요소로를 가진다. 1) 데이터 흐름(data flow) : 데이터 흐름은 데이터들이 이동되는 통로를 의미하는데, 그림에서 화살표시가 이를 의미한다. 2) 처리과정, 또는 프로세스(process) : 처리과정은 출력되는 데이터 흐름을 위하여 입력 데이터에 가해지는 변형과정을 의미한다. 그림에서 원(bubble)으로 표시된 것이 이를 의미한다. 3) 데이터 저장소(data store) : 데이터저장소는 하나의 처리과정에서 다음의 처리과정으로 데이터가 직접 이동되지 않고, 추후 이용될 목적으로 보관되는 경우에 사용된다. 그림에서 두 줄의 짧은 평행선으로 표시된 것이 이를 의미한다. 4) 종단점(terminator) : 대상시스템이 외부에 존재함으로써 분석대상에서 제외되는 부분이며, 이는 데이터를 제공하는 입력부(source)와 데이터를 이용하는 출력부(sink)로 구성된다. 그림에서 직사각형으로 표시된 것들이 이를 의미한다. |
문서정보
- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=1966771&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.