티스토리 뷰
모델링 순서
개념 모델링(업무파악) → 논리 모델링(업무를 바탕으로 DB 설계) → 물리 모델링(DB구축)
데이터 모델링이란?
- 모델링 : 모델을 만드는 것
- 우리는 현실(업무)로부터 모델을 만들어야 함 (oop->class / DB -> table)
- 데이터 모델링 : 각종데이터--->구조화, 형상화 하는 과정
- 데이터 모델링 작업은 (현업인터뷰, 업무지침서, 용어집, 산출물 등) 현행업무를 파악하여 개념들을 정리하고 분류하여 엔티티(업무의 핵심키워드), 속성, 관계 로 형상화 하는 과정
- 보통 엔티티 도출 과정은 한 문장으로 쓴 글 중에서 핵심 키워드를 추출한다.
ex) 인터넷 뱅킹 - 개인, 기업, 상품, 예금, 대출, 가입, 생년월일, 가입금액
- 상품, 가입 ---> 엔티티 로 식별 (복합정보를 포괄적으로 수용하고 있는 경우)
- 생년월일, 가입금액 ---> 속성으로 식별 (단일 정보)
1) 핵심 엔티티 추출 - 고객, 상품, 주문
2) 파생 엔티티 추가 - 주문상세, 주문상태, 주문이력
3) 엔티티 관계
4) 엔티티 속성 추가
ER모델 (Entity - Relationship Model)
표현하고자 하는 현실세계의 업무를 개체(또는 실체)와 관계 두가지로 표현하는 모델
ER 모델 구성 요소
- 엔티티
- 속성
- 관계
엔티티 (Entity) : 업무를 구현하는데 필요하고 관리해야하는 주체. 대상. 행위등의 모든 집합적인 것으로 정의
- 시스템 구축 시 배타관계(서로 중첩된 부분이 없는 관계)로 UNION이나 OUTER JOIN을 사용하는 경우가 있는데, 집합 간 배타관계를 해소하고 하나의 통합 테이블 형태로 설계한 경우 개발 생산성이 증대되고, 성능 향상 효과도 기대할 수 있지만 개인고객 속성과 법인고객 속성이 같은 테이블에 혼합되어 존재하므로 속성의 의미가 불분명해지고, FK나 NN제약조건을 반영할 수 없어서 데이터 무결성 문제가 발생할 수 있다.
*UNION - 합집합(중복제거)
*UNION ALL - 그냥 두개 더해 붙이는것(중복제거X) => 속도 더 빠름
*무결성 : 데이터에 잘못된 데이터가 들어오지 못하게 하는 것
관계 (Relationship)
1) 관계수 (Cardinality) ( 1:1 직원:인턴과정 / 1:n 부서:직원 / n:m 학생:수강과목)
2) 선택성 (Optionality) ( 필-필 주문-주문상품 / 필-선 고객-주문 / 선-선 소개사원-계좌 ) - 꼭 있어야하나? 없어도 되나?
3) 식별성 (Idendifier Inheritance)
- 식별관계(key를 물려받는다) : 다른 테이블 PK가 내 FK. FK? 다른테이블 PK
- 비식별관계
속성 (Attribute)
: 데이터를 표현하는 가장 작은 단위. 하나의 엔티티는 2개 이상의 속성을 가진다.
- 속성명
- 식별자여부
- 옵셔널리티
- 도메인
식별자 (Identifier) PK
엔티티에서 인스턴스를 개벽적으로 식별할 수 있는 속성들 이다.
식별자의 특징으로 유일성, 최소성(컬럼 두개 쓰지마), 존재성(필수,NN), 불변성
220803 추가
관계형 데이터 모델
스키마(헤더) + 인스턴스(본문) = 릴레이션
Structure
관계형 모델의 키
슈퍼키 : 키가 될 수 있는 모든 키
후보키 : 튜플을 고유하게 식별할 수 있는 키
기본키 : 후보키중에 선택된 키
대체키 : 후보키중에 기본키 아닌 키
제약조건(Constraint) for 무결성
* 키 제약조건
* 무결성 제약조건
- 실체무결성 : NOT NULL
- 영역무결성 : DOMAIN(영역)에 속한값이어야한다
- 참조무결성 : FK
정규화(Normalization) - 테이블 쪼개기 (why? 중복제거)
but, 정규화 너무 심하게 할 경우 프로그램에서 조인(join) 빈번하게 발생 -----> 성능저하 가능성 ↑
So, 조인 많으면 => 성능저하 ============> 해결이 XXX ????
============> 다시 붙여야함 ( 역정규화 ) - 중복발생 불가피. 프로그램적으로 해소해야함
1) 제 1정규형 - 중복X
2) 제 2정규형 ========>
3) 제 3정규형 ========> 2,3 정규형 둘다 서로 관련된걸 하나로(그룹) 묶어서 빼내는것 (=클래스빼내듯)
=> 간결. 재사용성↑ 컬럼수 유지하면서 중복제거도 됨
* 부채꼴 함정(Fan Trap) : 엔티티관계 잘못맺어서 생김
* 상향식 접근 : 어떤 시스템을 파악해야 할 때 => 기존ERD, 보고서, 매뉴얼 업무지침서 등을 통해 조사, 모델링
데이터모델링 절차
데이터 모델링
[ 분석 ] ==================================> [ 설계 ]
AS-IS 개념모델링 논리모델링 물리모델링
현행업무분석 & 방향성수립 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
현행데이터분석 (TO-BE) 주제영역정의 1) 엔티티정의 테이블설계
+요구사항정의 핵심엔티티정의 2) 속성정의 무결성설계(제약조건)
3) 관계정의 인덱스 등 설계
디테일? 이력? 상태관리?
분석/코드/교차
* 데이터 표준 : 같은용어 사용 (데이터통합의 필요성)
* 데이터사전 : 공통적인 용어로 소통 - 데이터 표준
리버스 모델 활용
개념 - 논리 - 물리 모델중 물리 사용중인데 개념and논리 날아가고 없음.
그럴때, 현행 시스템의 DB메타정보를 이용 -> 엔티티 및 속성을 도출/관계식별해 ERD작성
=> 데이터모델을 현행화하는 과정을 리버스모델링 이라고 한다
개념모델링 ( 업무파악 )
- 주제영역 도출
- 주제영역 분류 및 정의
- 핵심엔티티 정의 및 관계정의
: 주제영역 정의하고 핵심엔티티를 도출
ex) 인터넷뱅킹
=> 개인, 기업, 상품, 예금, ISA, 대출, 펀드, 보험, 외환, 퇴직연금, 입출금, 이체
* 주제영역을 정의할 때 어려운 점
- 개념부족
- 의견차이
- 확신부족
- 오너십
핵심엔티티 식별
핵심엔티티?
: 업무, 주체, 대상, 자원, 장소 등에 해당하는 엔티티
ex) 고객 주제영역 - 고객, 거래처, 신용평가, 채널
업무 행위 - 계약, 주문, 입출금
+ 전반적인 데이터 구조와 관계를 파악할 수 있을만큼 식별
+ 주제영역간 핵심엔티티 수 크게 차이나지 않도록 비슷한 수준으로 도출
식별자
: 엔티티 개념을 가장 명확하게 표현할 수 있는 속성으로 구성
논리모델링 (업무반영 )
(이론적으로 요구사항 잘 반영되도록)
http://www.yes24.com/Product/Goods/89872186
'ALL > 데이터모델링' 카테고리의 다른 글
핵심 데이터 모델링 - 논리모델링 (2) | 2022.08.11 |
---|
- Total
- Today
- Yesterday
- 리액트
- 객체지향
- 스프링의정석
- 스프링
- 이정환
- 데이터베이스
- spring
- EC2
- JavaScript
- React
- 남궁성
- 자바의정석
- @Configuration
- 스프링 프로젝트
- Node.js
- security
- 시큐리티
- MySQL
- 친절한SQL튜닝
- 컨테이너
- 한입크기로 잘라먹는 리액트
- 스프링 빈
- Spark
- 자바스크립트
- di
- 인덱스
- 데브캠프
- AWS
- node
- 코드로 배우는 스프링 웹 프로젝트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |