Data Architecture 구축을 위한실무 수행 방안
마 도 현TA 팀한국오라클
순 서
통합 Data Architecture 개요
통합 Data Architecture 구축 절차
통합 Data Modeling 단계별 정의 및 ActivityReverse Modeling 개요 및 수행 절차
Reverse Modeling 실전 적용 절차
Reverse Modeling을 활용한 성능 개선(예제) Q & A
통합 Data Architecture 개요
통합 Data Architecture 구성
운영 데이타 모델운영 데이타 모델
분석 데이타 모델분석 데이타 모델
메타 데이타 모델메타 데이타 모델
데이타의데이타의
일관성일관성
정보활용정보활용
극대화극대화
통합통합 된된OneOne--ViewView
독립/분산/중복 운영으로 인한 데이타의 중복 및
불 일치의 산재 (Integrity]
부분별 업무 목적에 따른 운영계 시스템의 구축으
로 인한 통합 전략의 부재 [Strategy]
각 부분 간의 데이타의 표준 체계의 부재로 변환,Interface 시의 복잡한 과정으로 인한 관리의 비
효율이 존재 [Manageability]
전체적인 통합 데이타 모델의 부재로 데이타 및 주
제 영역 추가에 따른 유연성이 없음 [Availability]
As-Is Data Architecture
정확한 AS-IS 데이타 모델 작성정확한 AS-IS 데이타 모델 작성
통합 Data Architecture 구축 절차
ER Model
AS-IS데이타 모델링
Data DesignRepository
Reverse데이타 Design
SQL 유형 조사로부터
추가적인 관계 수집
Constraint(PK/FK)의관계 반영
Object(Table/Column) 업무적 용어 Mapping
AS-ISSchema DDL 작성
Process/Function구조 모델
•핵심 엔터티 수집
•업무적 관점의 관계 정의
•식별자의 지정
•핵심 엔터티 수집
•업무적 관점의 관계 정의
•식별자의 지정
•상세 엔터티/관계 조사
•주요 속성 수집 및 조사
•상세 엔터티/관계 조사
•주요 속성 수집 및 조사
AS-ISDatabase Schema
•복수의 Phase를 통해
엔터티/관계/속성 수집
•복수의 Phase를 통해
엔터티/관계/속성 수집
AdvancedLogical
Data Model
•논리성 완성화
(정규화,특수 관계 정의)
•논리성 완성화
(정규화,특수 관계 정의)
AS-IS Reverse Modeling
PhysicalData Model
DatabaseDesign
TO-BE Business Model Conceptual
Data Model
BasicLogical
Data Model
Detail Logical
Data Model
TO-BE 논리 데이타 모델TO-BE 논리 데이타 모델
물리적요소 고려에 의한
설계(Volume,Resource)
물리적요소 고려에 의한
설계(Volume,Resource)
TO-BE 물리 모델 및 DesignTO-BE 물리 모델 및 Design
운영 Data Model 및정보/분석 Data Model의 분류
운영 Data Model 및정보/분석 Data Model의 분류
현 시스템의진단
결과
참조
개선 활동 수행
To-Be Business Model의Data 관점에서 반영
To-Be Business Model의Data 관점에서 반영
AS-IS 시스템 진단 및분석을 통한 개선점 도출
AS-IS 시스템 진단 및분석을 통한 개선점 도출
2 단계 : 기본 논리 데이타 모델링 (Basic Logical Data Modeling)2 단계 : 기본 논리 데이타 모델링 (Basic Logical Data Modeling)
3 단계 : 상세논리 데이타 모델링 (Advanced Logical Data Modeling)3 단계 : 상세논리 데이타 모델링 (Advanced Logical Data Modeling)
4 단계 : 물리 데이타 모델링 (Physical Data Modeling)4 단계 : 물리 데이타 모델링 (Physical Data Modeling)
1 단계 : 개념 데이타 모델링 (Conceptual Data Modeling)1 단계 : 개념 데이타 모델링 (Conceptual Data Modeling)
5 단계 : 데이타베이스 디자인 (Database Design)5 단계 : 데이타베이스 디자인 (Database Design)
데이타 모델 대상의 업무(Business] 범위의 정의 및 범위에 대한 기본/핵심 엔터티와 Business Unit과의 관계를
개념적으로 표현하여 최상위 Level의 개념적 E-R 모델을 완성
개념적 E-R 모델에서 엔터티, 속성, 릴레이션, PK 등을 논리적 기법을 통해 초기 E-R Model을 작성하고
반복적 검증을 통해 Business 범위 내의 요구의 누락이 없는 E-R Model을 완성
기본 E-R 모델에 대해서 논리적인 기법 등을 적용하여 논리적인 완성을 이루며 이력 관리 등 추가적인 요구에
대한 모델을 확장하여 최종 논리 데이타 모델링을 완성
데이타베이스 디자인 단계로 이행 전에 성능적인 요소 (H/W,DBMS, Network, Access 유형, 대용량 Volume)등을 고려한 엔터티의 분할, 중복, 통합, 추가 등을 통한 물리적 요소를 고려한 물리적 데이타 모델을 완성
물리 데이타 모델 결과를 DBMS Implement를 위한 DDL, 초기 Index 설계, 추가 Object(View,Synonym등) 정의,Storage전략, Constraint 적용, 분산 DB 범위를 결정하여 이행을 위한 모든 준비 과정을 완성
통합 Data Modeling 단계별 정의
통합 Data Modeling 단계별 Activity
기준 및 설계
Guide 제시
PK/FK 및 업무적 관점의 Index 적용초기 Index 설계
접근 유형에 따른 View의 설계
Storage 전략 수립
Constraint 적용 원칙 수립
분산 DB 기준 수립
데이타베이스
디자인
물리적 고려 요소
검토서
관계 및 PK의 형태에 따른 성능 요소 검토
대응도가 높은 관계에 대한 반정규화 검토
수평(Partition),수직 분할 대상 엔터티 검토
인공키 적용 검토
관계대응(Degree)의 물리적 영향 검토
반정규화 (수직/수평)
물리 데이타
모델링
세부적인 논리적
검증 작업 수행
(검증 절차서
참조)
중복 데이타 해소
특수 형태 모델화를 통한 모델의 효율화
시 계열 관리의 일관성
논리 모델의 완성
Column Wise/Row Wise 모델 결정
M-M 관계 해소
정규화 수행 (제 1/2/3 정규형)특수 모델 검증
시 계열(Historic) 모델 적용
동질 속성의 모델 형태 결정
상세 논리
데이타 모델링
과도 및 중복
도출을 허용
기본 ER의 완성
업무 범위 내의 표현 누락 여부 검증
(반복하여 수행)
엔터티/관계의 추가 도출
엔터티의 PK 정의
속성의 적극적 도출
기본 논리
데이타 모델링
업무 범위 및
요구 사항의 분석
적용 용어의 통일을 통한 표준화
기본 ER의 작성 1 단계
기본 ER의 작성 2 단계
기본 ER의 작성 3 단계
용어집 작성
기본/핵심 엔터티 도출
업무적 관점의 관계 도출
주요 속성의 도출
개념 데이타
모델링
AS-IS Reverse Model
업무 범위 정의를 위한 기본 정보 수집AS-IS 정보 수집
업무에 대한 설명 및 요구 사항 파악
사전 준비
단계
Remark수행 목적수행 Activity단계
Reverse Modeling
현재의 시스템으로부터 가장 정확하고 단기간에 데이타
모델을 구축
향 후 To-Be 통합 Data Architecture 구축을 위한 AS-IS 분석 자료의 기본으로 활용
Reverse Engineering 과정에서 시스템의 진단 및 개선
활동의 Side Effect 달성
대부분의 과정이 자동화가 가능하며 수행 결과를
Repository화하여 관리
Reverse Engineering 수행 절차
리버스 대상DB Schema 결정
필요 정보 수집
Get_ddlschemautility를 통한
DDL Script 수집
SQL Usage정보 수집
추가적인관계 정보 수집
SQL 사용 형태로부터관계 정보 수집 후DDL Script에 반영
AS-IS 데이타 모델 완성
최종 DDL Script 완성CREATE TABLE APW_CHANGE (
ENTITY CHAR(12) NOT NULL,NEW_MAIN CHAR(20) NOT NULL,NEW_ENT CHAR(20) NOT NULL,OLD_MAIN CHAR(20) NOT NULL,OLD_ENT CHAR(20) NOT NULL);
ALTER TABLE APW_CHANGEADD CONSTRAINT XPK_APW_CHANGEPRIMARY KEY(ENTITY);
ALTER TABLE WIPRTO ADD CONSTRAINT WIPRTO_FK1FOREIGN KEY (WRTO_FACILITY,WRTO_OPER)REFERENCES WIPOPR (WOPR_FACILITY,WOPR_OPER);
데이타 모델 검증 작업
정규화
상품출고# 출고일자* 출고수량
매장# 매장번호* 매장명o 주소o 규모
직원# 직원번호* 성명* 주민등록번호
계약직원* 시급o 계약시작일자o 계약만료일자
정규직원* 사번* 직급* 입사일자
출고
출고
소속
소속
Super-Sub Type 모델
성향분석항목# 항목코드* 항목구분* 항목명
상품단가이력# 유효시작일자* 유효종료일자* 단가
주문내역* 주문수량* 입고예정일자
불만사항담당자o 처리내용
판매내역# 판매순번* 판매수량
불만사항# 접수번호* 접수일시* 불만유형* 처리상태* 처리결과
판매# 판매번호* 판매일자* 판매금액* 지불구분* 판매구분o 배송지o 배송일자o 결제카드번호o POS단말번호o POS단말기모델
직원# 직원번호* 성명* 주민등록번호* 직원분류
환불# 환불순번* 환불일자* 환불수량
상품판매성향# 판매년월* 항목값
매장# 매장번호* 매장명o 주소o 규모
계약직원* 시급o 계약시작일자o 계약만료일자
정규직원* 사번* 직급* 입사일자
상품출고# 출고번호* 출고일자* 출고수량
상품입고# 입고번호* 입고일자* 입고수량
고객구매성향# 구매년월* 항목값
보너스카드# 보너스카드번호* 카드구분* 발행일자o 누적보너스점수
고객# 고객번호* 성명o 주민등록번호o 자택전화번호o 핸드폰번호
주문# 주문번호* 주문일자* 처리상태
공급처# 공급자번호* 공급자명o 사업자등록번호o 매출액
상품분류# 상품분류코드* 상품분류명* 상품분류레벨
상품# 상품번호* 상품명* 단가* 포장단위* 등록일자* 모델명o 적정재고량
판매
판매
계약직
계약직
정규직
정규직
분석항목분석항목
분석항목
분석항목
구매성향
구매성향
단가변동
단가변동
환불
환불
주문상품
주문상품
내역
내역
할당
할당
담당
담당
판매내역
판매내역
판매되어
판매되어
구매
구매
불만
불만
불만
물만
이전카드
신규카드
상위분류
하위분류
공급
공급
판매성향
판매성향
소속
소속
납품
납품
소지
소지
입고
입고
출고
출고
출고
출고
분류
분류
Reverse Modeling실무 적용 절차
DDL Script 수집 및 완성
AS-ISDatabaseSchema
Create Table Product_Class(Product_Class_Code varchar2(10),Product_Class_Name varchar2(30),Product_Class_Level number,Upper_Product_Class_Code varchar2(10),Constraint Product_Class_PK primary key(Product_Class_Code));
Alter Table Product_Classadd constraint Product_Class_Fk1 foreign key(Upper_Product_Class_Code)
references Product_Class(Product_Class_Code);
………………….………………….………………….
Create Table Sale_Detail(Sale_Sequence number,Detail_Sequence number,Sale_Date varchar2( 8),Product_Code varchar2(10),Sale_Quantity number,Constraint Sale_Detail_PK primary key(Sale_Sequence,Detail_Sequence));
Alter Table Sale_Detailadd constraint Sale_Detail_FK1 foreign key(Sale_Sequence)
references Sale_Master(Sale_Sequence);
Alter Table Sale_Detailadd constraint Sale_Detail_FK2 foreign key(Product_Code)
references Product(Product_Code);
Select a.supplier_name,b.product_name as main_product_name from supplier a, product b Where a.main_product_code = b.product_code;
Main_product_code
SupplierProduct_code
product
Select a.product_name,sum(b.total_sale_amount) from product a, product_history b where b.sale_yyyymm between :v1 and :v2 and a.product_code = b.product_code group by a.product_name;
Product_Code
PRODUCT_HISTORY
Product_Code
PRODUCT
SQL UsageColumn Name
Child Table
Column Name
Master Table
기존Schema설계서
Create Table Product_Class(Product_Class_Code varchar2(10),Product_Class_Name varchar2(30),Product_Class_Level number,Upper_Product_Class_Code varchar2(10),Constraint Product_Class_PK
primary key(Product_Class_Code));
……………….………………….………………….
Create Table Sale_Detail(Sale_Sequence number,Detail_Sequence number,Sale_Date varchar2( 8),Product_Code varchar2(10),Sale_Quantity number,Constraint Sale_Detail_PK primary key(Sale_Sequence,Detail_Sequence));
Get_DDLscript
SQL Usage 조사분석Relationship 반영
용어사전집을이용한한글화변환
(Optional)
JOIN 유형에서 한쪽 Table의 JOIN에 PK가수반되면 다른 JOIN TABLE과 관계가 존재한다
규칙
PK 정보 : Table1 (COL1+COL2)
Query 중 다음의 조건을 가정한다면
SELECT *
FROM Table1, Table2
WHERE Table1.col1 = Table2.col1
AND Table1.col2 = Table2.col2
에서 Table1의 PK가 col1+ col2이면 Table2의
Col1,col2는 Table1의 PK를 참조(Reference)
하는 외부 Key (Foreign Key) 이다. 즉,
Table1과 Table2 사이에는 1:M의 관계가 존재
함을 말한다. 이를 DDL로 표현하면 다음과
같다.
ALTER TABLE TABLE2 ADD CONSTRAINT TABLE2_FK1FOREIGN KEY(COL1,COL2 )REFERENCES TABLE1(COL1,COL2);
수집 예
일반JOIN 형태,SUB-QUERY, COMPOUND QUERY대상 SQL
기준 및 내용항목
TABLE2# COL1# COL2# COL3o ATTR21o ATTR22
TABLE1# COL1# COL2o ATTR11o ATTR12o ATTR13
REL
REL
TABLE1# COL1# COL2o ATTR11o ATTR12o ATTR13
TABLE2# PK1# PK2* COL1* COL2* COL3o ATTR21o ATTR22
REL
REL
SQL Usage에서 관계 정의
Table2의 PK : COL1,COL2를 포함 한 경우
Table2의 PK : COL1,COL2를 포함 하지 않은 경우
SELECT RTRIM(WRTE_RT_GRP_1) X_FABID,WPRD_PRD_GRP_3 X_DEVICE,WRTO_SEQ_NUM SEQ,WOPR_OPER X_OPER,WOPR_LONG_DESC OPER_DESC,WOPR_OPR_GRP_3 V_GUGAN,WOPR_OPR_GRP_2 V_AREA
FROM WIPPRD,WIPPRR,WIPRTO,WIPOPR,WIPRTE
WHERE WPRD_FACILITY = :B2AND WPRR_FACILITY = :B2AND WRTO_FACILITY = :B2AND WOPR_FACILITY = :B2AND WRTE_FACILITY = :B2AND WPRD_PROD = WPRR_PRODAND WPRR_ROUTE = WRTO_ROUTEAND WPRR_ROUTE = WRTE_ROUTEAND WRTO_OPER = WOPR_OPERAND WRTO_OPER <= 9880AND WPRR_SEQ_NUM BETWEEN 1 AND 2)
WOPR_FACILITY+WOPR_OPERWIPOPRWRTO_FACILTY + WRTO_OPER + WRTO_ROUTEWIPRTOWPRR_FACILITY + WPRR_PROD + WPRR_ROUTEWIPPRR
WRTE_FACILITY + WRTE_ROUTEWIPRTE
WPRD_FACILITY + WPRD_PRODWIPPRDPrimary KeyTable명
ALTER TABLE WIPPRR ADD CONSTRAINT WIPPRR_FK1FOREIGN KEY(WPRR_FACILITY,WPRR_PROD) REFERENCES WIPPRD(WPRD_FACILITY,WPRD_PROD);ALTER TABLE WIPPRR ADD CONSTRAINT WIPPRR_FK2FOREIGN KEY(WPRR_FACILITY,WPRR_ROUTE)REFERENCES WIPRTE(WRTE_FACILITY,WRTE_ROUTE);ALTER TABLE WIPRTO ADD CONSTRAINT WIPRTO_FK2FOREIGN KEY(WRTO_FACILTY,WRTO_ROUTE)`REFERENCES WIPRTE(WRTE_FACILITY,WRTE_ROUTE);
RPT WIPRTO* RTP_SEQ_NUMo WOPR_OPR_GRP_1o WOPR_OPR_GRP_2o WOPR_OPR_GRP_3o WOPR_USRDF_SMDAT_4o WOPR_USRDF_BGDAT_3o WOPR_USRDF_BGDAT_5o WOPR_USRDF_SMDAT_3
WIPRTOo WRTO_SEQ_NUMo WRTO_MILSTNo WRTO_PROD_UNT_1o WRTO_CLCT_LBR_DATo WRTO_CST_DAT_ENTo WRTO_MVOU_REQo WRTO_MVIN_REQo WRTO_REDFN_PRDo WRTO_STRT_WFR_TRCo WRTO_STOP_WFR_TRCo WRTO_CST_DA_ENT_ALo WRTO_YLD_DAT_EN_PLo WRTO_MSG_INOUT_FLGo WRTO_ML_INOUT_FLGo WRTO_ALT_RT_ALWDo WRTO_OPR_SHRT_DESCo WRTO_LOSS_CD_TBo WRTO_BONUS_CD_TBo WRTO_REDO_CD_TBo WRTO_RWRK_CD_TBo WRTO_RWRK_RTo WRTO_ALT_RT_GRPo WRTO_PRD_UT_2o WRTO_PRD_UT_3o WRTO_SPEC_IDo WRTO_SCRIPT_IDo WRTO_RWRK_RET_RTo WRTO_RWRK_END_RTo WRTO_RT_OP_STS_1o WRTO_RT_OP_STS_2o WRTO_RT_OP_STS_3o WRTO_MVOU_PRM_STo WRTO_MVIN_PRM_STo WRTO_RWRK_PRM_STo WRTO_SCP_WIP_EF_PTo WRTO_PSET_CPYDWNo WRTO_MCH_ID_VALIDo WRTO_MCH_ID_GTS_TBo WRTO_OPID_VALIDo WRTO_OPID_GTS_TBo WRTO_YIELDo WRTO_YIELD_ALTo WRTO_QUE_CYC_TMo WRTO_PROC_CYC_TMo WRTO_STORE_OPERo WRTO_REWORK_OPERo WRTO_MVIN_HRSo WRTO_MVIN_MINo WRTO_MVOU_HRSo WRTO_MVOU_MINo WRTO_MVIN_AFT_HRo WRTO_MVIN_AFT_MINo WRTO_MVOU_AFT_HR...
WIPRTE# WRTE_ROUTEo WRTE_LST_RT_OPRo WRTE_RT_GRP_1o WRTE_RT_GRP_2o WRTE_DESCo WRTE_USRDF_BGDAT_1o WRTE_USRDF_BGDAT_2o WRTE_USRDF_BGDAT_3o WRTE_USRDF_BGDAT_4o WRTE_USRDF_BGDAT_5o WRTE_USRDF_SMDAT_1o WRTE_USRDF_SMDAT_2o WRTE_USRDF_SMDAT_3o WRTE_USRDF_SMDAT_4o WRTE_USRDF_SMDAT_5o WRTE_RTE_STS_1o WRTE_RTE_STS_2o WRTE_RTE_STS_3o WRTE_QUE_TM...
WIPPRRo WPRR_SEQ_NUMo WPRR_PREV_RTo WPRR_NEXT_RT
WIPPRD# WPRD_PRODo WPRD_PRD_GRP_1o WPRD_PRD_GRP_2o WPRD_PRD_GRP_3o WPRD_PRD_GRP_4o WPRD_PRD_GRP_5o WPRD_LST_RTEo WPRD_RSTRCTDo WPRD_BAS_CST_ENTRDo WPRD_BASCST_ENT_ALo WPRD_BASCST_MANLo WPRD_BASCST_MAN_ALo WPRD_DESCo WPRD_MATRL_TYPo WPRD_INV_CLASSo WPRD_USRDF_BGDAT_1o WPRD_USRDF_BGDAT_2o WPRD_USRDF_BGDAT_3o WPRD_USRDF_BGDAT_4o WPRD_USRDF_BGDAT_5o WPRD_USRDF_SMDAT_1o WPRD_USRDF_SMDAT_2o WPRD_USRDF_SMDAT_3o WPRD_USRDF_SMDAT_4o WPRD_USRDF_SMDAT_5o WPRD_PRD_STS_1o WPRD_PRD_STS_2o WPRD_PRD_STS_3o WPRD_BAS_MATRLo WPRD_BAS_LBRo WPRD_BAS_OH_LB_TMo WPRD_BAS_OH_LB_CSTo WPRD_BAS_OH_MC_TMo WPRD_BAS_OH_NM_UNTo WPRD_BAS_SUBCNTRo WPRD_BAS_MATRL_ALTo WPRD_BAS_LBR_ALT...
WIPOPR# WOPR_FACILITY# WOPR_OPERo WOPR_OPR_GRP_1o WOPR_OPR_GRP_2o WOPR_OPR_GRP_3o WOPR_OPR_FRZNo WOPR_INRNSTo WOPR_SHIPPINGo WOPR_STOREo WOPR_MOVE_WANDo WOPR_RAT_DAT_ENTRDo WOPR_RT_DAT_ENT_ALo WOPR_PROD_UNIT_1o WOPR_SHORT_DESCo WOPR_LOSS_CODE_TBLo WOPR_BNS_CODE_TBLo WOPR_REDO_CODE_TBLo WOPR_RWRK_CODE_TBLo WOPR_PROD_UNIT_2o WOPR_PROD_UNIT_3...
rpt_wiprto_fk1
_rpt_wiprto_fk1
_wiprto_fk1
wiprto_fk1
_wiprte_fk1
wiprte_fk1
wipprd_fk1
_wipprd_fk1
_wipprr_fk1
wipprr_fk1wipprr_fk2
_wipprr_fk2_wiprto_fk2
wiprto_fk2
E-R ModelE-R Model
SQL Usage에서 관계 정의(예제)
Oracle DesignerDesign Editor/Capture Design
Schema TR Diagram(STRD)
Create Table Product_Class(Product_Class_Code varchar2(10),Product_Class_Name varchar2(30),Product_Class_Level number,Upper_Product_Class_Code varchar2(10),Constraint Product_Class_PK primary key(Product_Class_Code));
Alter Table Product_Classadd constraint Product_Class_Fk1 foreign key(Upper_Product_Class_Code)
references Product_Class(Product_Class_Code);
………………….………………….………………….
Create Table Sale_Detail(Sale_Sequence number,Detail_Sequence number,Sale_Date varchar2( 8),Product_Code varchar2(10),Sale_Quantity number,Constraint Sale_Detail_PK primary key(Sale_Sequence,Detail_Sequence));
Alter Table Sale_Detailadd constraint Sale_Detail_FK1 foreign key(Sale_Sequence)
references Sale_Master(Sale_Sequence);
Alter Table Sale_Detailadd constraint Sale_Detail_FK2 foreign key(Product_Code)
references Product(Product_Code);
AS-ISDDL Script
Designer를 이용한 Repository 작성
AS-IS ER Model 완성Schema TR Diagram
(STRD)AS-IS ER Diagram
(ERD)
Oracle DesignerEntity Relationship Diagrammer
Utility/Table to Entity Retrofit
Data Modeling 검증 및 개선 작업
Column-Wise/Row-Wise 모델동질의 Column의 Vector성
다양한 모델 형태별 검토(엔터티의 통합성,특수 형태의 모델 관계)
이력 관리의 형태 조사시 계열(Historic) 적용 방법의타당성
Type의 일관성 유지 여부 조사Datatype 일관성
배타적 관계 조사(SQL 유형 조사)Exclusive Type
Super-Sub Type 설계 Table 조사Super-Sub Type
PK Column 수의 과도성에 따른 Join 비용 고려(Artificial Key 적용 여부 고려)
PK의 물리적 개선
Index 설계 검증
Recursive Type
제 3 정규형
제 2 정규형
제 1 정규형
1:M 관계의 조사
PK의 논리성
세부 항목
Non-Pk의 PK 전체에 대한 종속성
동일 성격의 컬럼의 반복성 배제
계층관계 조가(SQL 유형 조사)
Non-PK 사이의 종속성 배제
정규화(Normalization)
접근 경로 반영 벼부Index 구성 컬럼 조사불 필요 Index 필요 여부 조사
물리적 고려 요소
관계의 논리적인 정확성1:M의 Degree의 조사/분석
Relationship 검증
유일성 확보의 최소 Column의 구성 여부Primary Key 검증
내용검증 항목
SQL 유형에서의 Data Modeling 검증
Join에 수반되는 Table의 모델 검토1-1 Recursive 관계가 성립되지 않는지 검증2개 Table Outer Join 사용
해당 부분의 모델 및 디자인 부분 검증기본적인 관계에 의한 디자인 변환의 오류예상
Join Query 중에 Join Column이변형(Suppressing) 되어 Join이 되는경우
실행 계획 및 관련 Table의 모델 및디자인 검토
특별한 문제가 있다기보다는 최적화 여부를판단 할 필요가 있음(관계의 논리성 검증)
5개 이상의 Table을 Join 하는Query가 자주 사용된다.
관계를 맺고 있는 Table 과의 모델 검토요망
문제가 있는 지의 여부를 판단(Depth Level, Artificial Key의 적용 가능성)
PK의 구성 컬럼이 5개 이상인 Table이존재
Aggregation (Group by,Distinct) 사용View의 검토를 통해 사용 상의 최적화수행(반정규화 검증)
사용 View들의 SQL Definition 검증Aggregation View가 일반 Table과의Join형태로 많이 사용된다
Super-Sub Type의 엔터티를 조사하여디자인 결정부분의 요소를 재 검증
Partitioning 적용 가능성(Partition Column, Volumn 등의 고려)
- Super-Sub Type 모델 및 디자인 결정
- Partitioning 적용 여부 검토
Union/Union All이 많이 사용 된다
동시 사용성의 검증을 통해 사용분산도의 증가 가능 여부 검토
Lock Table이 Serial 번호 생성 부분이 있는경우 생성 Logic 및 설계 검토
Locking이 자주 발생(Wait Event 상의Enqueue가 많다)
정규화( Normalization ) 적용해당 부분의 중복성 여부(제 2,3 정규형 위배여부)
Distinct operation이 많다
필요 Activity검증 부분SQL Access 유형/진단 결과
Data Modeling 검증
방법 3방법 2방법 1설계방법
다른 엔터티와의 관계가 Sub Table에 집중되어 있는 경우
다른 엔터티와의 관계가 Super/Sub Table 모두에 있는 경우
다른 엔터티와의 관계가Super Table에만 있는 경우
관계
각 Sub-Table로만
설계(모든 속성을 Sub-Table 각각이포함하도록 설계)
1 Super Table 및 각 Sub-Table로 설계(공통 속성은 Super로 각각의 속성은
Sub Table로 설계)
Super Table 하나로만
설계 (모든 속성을 Super Table로 통합)
설계 전환 방법
각 Table간의 무결성 보장이 요구되지 않음
Super와Sub 간의 Integrity 보장이필요
Nullify 되는 Column의 관리무결성 보장 원칙
필요 없음Super Table에 분류 Column이 필요분류 Column이 필요추가적인 설계
요구 사항
통합 정보 요구 시 Union 형태의Query가 사용되며 성능 상의
주의가 요구 됨
통합 정보 및 각각의 정보 접근이 모두사용 빈도가 높을 경우 (Outer-Join이
필수적으로 사용 됨)
일반적인 Single Table Query로 사용 됨
업무적 요구에따른Query 사용 형태
각각 Subtype 위주로 접근하는경우가 많은 경우
통합 및 각 Sub 위주의 접근이 같이사용 되는 경우
Super(통합) 위주의 접근이많을 경우
접근 경로
각각 Subtype의 속성으로만되어있는 경우
공통 속성 및 각각 Sub-type 만의속성이 많을 경우
공통 속성이 편중되어 많을경우
속성
Super-Sub 모델의 설계 고려 항목 및 기준
To-Be ER-Modeling
STKINF# STK_ID* STK_NAME* BAY_NO* MAX_QTY* CUR_QTY* STC_MODE* EQUIP_STATUS* EQUIP_STATUS_ROBOT* PORT_STATUS_MANUAL* PORT_STATUS_TFE* FLAG_MAINT_REQUIRED...
EQPLOC# FACILITY# EQUIP_ID* BAY_NO* AREA* STK_ID1* STK_ID2* STK_ID3* STK_ID4* AUTO_MODE* EQUIP_CTL_MODE* TRANS_MODE...
CSTINF# CST_ID* FACILITY* CST_TYPE* MATERIALo CST_SIZE...
LOGINF# FACILITY# LOG_SHEET_ID# SEQ_NO* LOG_SHEET_DESCo SCREEN_WIDTH* L_NAME* M_NAME* S_NAME...
WAFSTS* FACILITY# WAFER_ID* LOT_NUMBER* CST_ID* SLOT_NO* WAFER_TYPE* USE_FLAG* TEST_FLAG...
LOGHIS_ALL
VISHIS* FACILITY* PROD# ROUTE# OPER# LOT_NUMBER...
TSTHIS# FACILITY# AREA# TRANS_DATE_TIME# WAFER_TYPE...
TOLHIS# FACILITY# TOOL_ID# TOOL_TYPE...
WAFMAP* FACILITY* LOT_NUMBER# WAFER_ID# TRANS_DATE_TIME# LOC_X# LOC_Y* DEFECT_CODEo SERIAL_NO
WAFHIS* FACILITY# LOT_NUMBER# WAFER_ID# TRANS_DATE_TIME* TRANS_CODEo SEQ_NO* PROD* ROUTE...
GMEASSPEC# FABID# PROD# MEASOPER# MEASTYPE# RECIPE_ID# PARAMETER# VERSIONo FACILITYo PRODOPERo PARADESCo ADOPTDATEo REGDATEo PARADISPSEQo PARATYPEo MERGEIDo SULo SCLo SLLo XBSULo XBSCLo XBSLLo XBUCL1o XBCCL1o XBLCL1o XBUCL2...
GMEASPPD# FABID# PROD# MEASOPER# RECIPE_ID# PARAMETERo FACILITY...
GMEASPARA# FABID# GUBUN# MEASTYPE# PARAMETERo FACILITYo PARADISCo PARATYPEo DELTA_TYPE
NTCVEN# NVEN_FACILITY# NVEN_EVENTo NVEN_MSG_EXST_FGo NVEN_MAIL_EXIST_FGo NVEN_EVENT_GROUP_1o NVEN_EVENT_GROUP_2o NVEN_EVENT_GROUP_3o NVEN_EVENT_GROUP_4o NVEN_EVENT_GROUP_5o NVEN_ALRM_W_ABRT_F...
NTCEHCo NEHC_FACILITYo NEHC_ENTITYo NEHC_ENH_HIST_SEQo NEHC_ENH_DEL_FLAGo NEHC_DISPLAY_SEQo NEHC_USERo NEHC_DATEo NEHC_TIME...
HQSTD# FABID# PRODUCT# MEASTYPE# MEASGUBUN# PARAMETERo OPERo LOWER_LIMITo UPPER_LIMITo MEASFLAG
HQLOTSUMo LOTIDo TRANSDTTMo PRODUCTo OWNERo LOTGRADEo HQQTYo NQQTYo LQQTYo XQQTYo HQDIE...
HQLOTDATAo LOTIDo TRANSDTTMo OPERo MEASTYPEo PARAMETERo LOWER_LIMITo UPPER_LIMITo STATUSVALUEo MEASFLAGo GRADE
HQWAFERSUM# LOTID# WAFERID# TRANSDTTM# WAFERGRADE# DIES
HQWAFERDATAo LOTIDo TRANSDTTMo WAFERIDo OPERo MEASTYPEo PARAMETERo LOWER_LIMITo UPPER_LIMITo STATUSVALUEo MEASFLAGo GRADE
HQLOTHISo LOTIDo HISTYPEo OPERo OPERDESCo EVENTDTTMo USERIDo CONTENTo TRANSDTTMo GRADE
ALMHIS# FACILITY# ALARM_ID# EQUIP_ID# LOT_NUMBER# CREATE_DATE_TIME* SOURCE1_ID* SOURCE1_DESC* SOURCE2_ID* SOURCE2_DESC* SOURCE3_ID* SOURCE3_DESC* ALARM_LEVEL* ALARM_TEXT* ALARM_STATUS* ACK_FLAG* ACK_DATE_TIME* ACK_USER...
EQPPMS# FACILITY# EQUIP_ID# SUB_EQUIP_ID# PM_SCHEDULE_DATE_TIME# PM_LEVEL# PM_CODE# PM_ACT_DATE_TIME* AREA* EQUIP_TYPE...
NTCENH# NENH_FACILITY# NENH_ENTITY# NENH_HIST_SEQo NENH_SCATTER_KEYo NENH_TRANS_DATEo NENH_TRANS_TIMEo NENH_EVENTo NENH_ENH_DEL_FLAG...
NTCENT# NENT_FACILITY# NENT_ENTITYo NENT_ENT_DEL_FLAGo NENT_LOT_L_EFF_CNTo NENT_LOT_QUANTITYo NENT_ENTITY_TYPEo NENT_ENT_GRP_1o NENT_ENT_GRP_2...
NTCAEV# NAEV_FACILITY# NAEV_ENTITY# NAEV_EVENTo NAEV_INDUCED_EVENTo NAEV_MSG_EXST_FGo NAEV_MAIL_EXST_FGo NAEV_SCHEDLNG_MODEo NAEV_WRKDAY_ONLY_Fo NAEV_DEPND_DT_FGo NAEV_LATEPROC_PF_Fo NAEV_LOT_ENTRY_REQ...
EQPBMH# FACILITY# EQUIP_ID# TRB_DATE_TIME# SEQ_NO* FAB_ID* UPDATE_DATE_TIME* ERROR_CONTENTS...
EQPBMS# FACILITY# EQUIP_ID# UPDATE_DATE_TIME* FAB_ID* EQUIP_AREA* BAY_NO* EQUIP_MODEL...
EQPSTS# FACILITY# EQUIP_ID* EQUIP_TYPE* BAY_NO* AREA* AUTO_MODE* EQUIP_CTL_MODE* TRANS_MODE* LAST_MODE* RESV_MODE* RESV_MODE_FLAG* PRE_RESV_FLAG* CHAMBER_MODE* EQUIP_STATUS* BOAT_STATUS* SUB_EQUIP_FLAGo CST_IN_PROC* EQUIP_PORT_TBL...
LOTSTS# LOT_NUMBER* FACILITY* PROD* ROUTEo OPER* EQUIP_ID* LOT_BATCH_IDo LOT_BATCH_SEQ* CST_ID* FIRST_STEPPER1* FIRST_STEPPER2* LOT_STATUS* LOCATION* PRIORITY* PRE_RESV_FLAG* LOT_PRIORITY...
LOTHIS_ALL
WIPBLA# WBLA_FACILITY# WBLA_BILL_OF_LADNG
WIPFAC# WFAC_FACILITYo WFAC_NODEo WFAC_PRD_OPR_MSGo WFAC_PRD_OPR_MAILo WFAC_MSG_SEE_HISTo WFAC_SSB_SUM_DATA...
WIPDLT# WDLT_LOT_NUMBER# WDLT_DATE_DELETED# WDLT_TIME_DELETED
WIPLHA# WLHA_LOT_NUMBER# WLHA_LOT_HIST_SEQ# WLHA_ATTR_NUMBERo WLHA_OLD_ATR_VALTYo WLHA_OLD_AL_ATR_VLo WLHA_OLD_NU_ATR_VLo WLHA_LTH_DEL_FLAGo WLHA_LTH_SCATT_KEY
WIPLTA# WLTA_FACILITY# WLTA_LOT_NUMBER# WLTA_ATTR_NUMBER# WLTA_ALP_ATTR_VAL# WLTA_NUM_ATTR_VALo WLTA_ATTR_VAL_TYPEo WLTA_LOT_DEL_FLAG
WIPALRo WALR_FACILITYo WALR_DATEo WALR_TIMEo WALR_TRANSACTIONo WALR_ALARMo WALR_LOT_NUMBERo WALR_PRODo WALR_OWNERo WALR_OPERo WALR_ALARM_DELETEDo WALR_PT_LOT_ON_HLDo WALR_OPERATORo WALR_ROUTEo WALR_AUTHORIZATIONo WALR_PARAMETERo WALR_REQUESTORo WALR_EXT_ALPH_DATAo WALR_ENG_ALP_NUMFLo WALR_ENG_UNIT_IDo WALR_ENG_CHANGEo WALR_TRANS_DATEo WALR_TRANS_TIMEo WALR_QUANTITYo WALR_QTY_LIMITo WALR_DATE_LIMIT...
WIPLSH# WLSH_LOT_NUMBER# WLSH_LOT_HIST_SEQ# WLSH_PROD# WLSH_LOCATIONo WLSH_QUANTITY_FROMo WLSH_QUANTITY_TOo WLSH_LTH_DEL_FLGo WLSH_LTH_SCATT_KEY
WIPRTO# WRTO_FACILITY# WRTO_ROUTE# WRTO_OPERo WRTO_SEQ_NUMo WRTO_MILSTNo WRTO_PROD_UNT_1...
WIPPRR# WPRR_FACILITY# WPRR_PROD# WPRR_ROUTEo WPRR_SEQ_NUMo WPRR_PREV_RTo WPRR_NEXT_RT
WIPPRO# WPRO_FACILITY# WPRO_PROD# WPRO_OPERo WPRO_CHK_VARNCEo WPRO_OFF_CST_ENTRDo WPRO_UC_YLD_ENTRDo WPRO_OFCST_ENT_ALTo WPRO_UC_YLD_ENT_ALo WPRO_UC_YLD_ENT_PLo WPRO_CST_DAT_ENT...
WIPLTH# WLTH_LOT_NUMBER# WLTH_HIST_SEQo WLTH_SCATTER_KEYo WLTH_DATEo WLTH_TIMEo WLTH_TRANSACTIONo WLTH_TRANS_DATEo WLTH_TRANS_TIMEo WLTH_FACILITY_OLDo WLTH_PROD_OLDo WLTH_ROUTE_OLDo WLTH_OPER_OLDo WLTH_FACILITY_NEWo WLTH_OPERATORo WLTH_HIST_DELETEDo WLTH_DELETE_DATEo WLTH_DELETE_TIME...
WIPRTE# WRTE_FACILITY# WRTE_ROUTEo WRTE_FRST_RT_OPRo WRTE_LST_RT_OPR...
WIPPRD# WPRD_FACILITY# WPRD_PRODo WPRD_PRD_GRP_1o WPRD_PRD_GRP_2...
WIPOPR# WOPR_FACILITY# WOPR_OPERo WOPR_OPR_GRP_1o WOPR_OPR_GRP_2o WOPR_OPR_GRP_3o WOPR_OPR_FRZNo WOPR_INRNST...
WIPLOT# WLOT_LOT_NUMBERo WLOT_FACILITYo WLOT_OPERo WLOT_ROUTEo WLOT_PRODo WLOT_OWNERo WLOT_LAST_HIST_SEQo WLOT_RESTRICTEDo WLOT_DELETEDo WLOT_INTRANSITo WLOT_PRIORITYo WLOT_DT_ENTRD_OPRo WLOT_DT_LAST_TRANSo WLOT_TM_LAST_TRANSo WLOT_MVIN_PERFMDo WLOT_DUE_DT_OVERRD...
LOGHIS# FACILITY* LOG_SHEET_ID# EQUIP_ID# TRANS_DATE_TIME* OPERATOR# SEQ_NOo DATA_COUNT...
LOTHIS_ARC# LOT_NUMBER# HIST_SEQ* TRANS_CODE* FACILITY* PROD* ROUTEo OPER...
LOGHIS_ARC* FACILITY* LOG_SHEET_ID* EQUIP_ID* TRANS_DATE_TIME* OPERATORo SEQ_NOo DATA_COUNT...
LOTHIS# LOT_NUMBER# HIST_SEQ* TRANS_CODE* FACILITY* PROD* ROUTEo OPER* EQUIP_ID...
STK_ID4
STK_ID4
STK_ID3
STK_ID3
STK_ID2
STK_ID2
STK_ID1
STK_ID1
EQUIPENTITY
EQUIP
EQUIP
CST
CST
LOGHIS
LOGHIS
WAFMAP
WAFMAPWAFHIS
WAFHIS
WAFER
WAFER
PROD
PROD
PARAMETER
PARAMETER
SPECVERSION
SPECVERSION
PARAMETER
PARAMETER
EVENT
EVENT
ARCHIVE
ARCHIVE
ALR_HISTORY
ALR_HISTORY
ENT_HISTOR
ENT_HISTOR
ENT_EVEN
ENT_EVEN
EQUIP_ID
EQUIP_ID
EQUIP_UPDAT
EQUIP_UPDAT
EQUIP_MASTE
EQUIP_MASTE
EQUIP_PM
EQUIP_PM
SUB_EQUIP_PM
SUB_EQUIP_PM
LOT
LOT
LOT_HIST
LOT_HIST
LOT_HIST
LOT_HIST
BILL
BILL
FACILITY
FACILITY
FACILITY
FACILITY
DELETE_LO
DELETE_LO
ATTR
ATTR
ATTR
ATTR
ALARM
ALARM
PROD_LOC
PROD_LOC
OPER
OPER
ROUTE
ROUTE
ROUTE
ROUTE
OPER
OPER
PROD
PROD
PROD
PROD
PROD_OLD
PROD_OLD
OPER_OLD
OPER_OLD
FACILITY_NE
FACILITY_NE
ROUTE_OL
ROUTE_OL
Reverse Modeling을 통한성능 개선 활용 (예제)
DDL 및 SQL Usage 정보 수집CREATE TABLE SYSA02TB(EMPNO CHAR(6),HNAME VARCHAR2(10),JWCOD VARCHAR2( 3),JIKWI VARCHAR2(20),STEP1 VARCHAR2( 3),STEP2 VARCHAR2( 3),JKCOD VARCHAR2( 3),JIKCK VARCHAR2(20),TMCOD VARCHAR2(14),TEAM VARCHAR2(20),TMCOD1 VARCHAR2(14),TEAM1 VARCHAR2(20),TMCOD2 VARCHAR2(14),TEAM2 VARCHAR2(20),TELNO VARCHAR2(20),TELNO2 VARCHAR2(15),EMAIL VARCHAR2(40),EMAIL2 VARCHAR2( 8),UPMOO VARCHAR2(60),PASSWD VARCHAR2( 6),USE CHAR(1),IDATE DATE,UDATE DATE,CNT NUMBER(6,0),PRV CHAR(1),CDATE DATE,TIMER NUMBER(4,0),CLS1 CHAR(1));
PK : EMPNO
CREATE TABLE ODOCU2_TAB(NO NUMBER(8,0),TTEAM VARCHAR2(20),TTYPE VARCHAR2( 1),TSABUN2 VARCHAR2( 6),TDATE2 VARCHAR2(12),TPASS2 VARCHAR2( 1),TNOPASS2 VARCHAR2( 1),TSABUN1 VARCHAR2( 6),TDATE1 VARCHAR2(12),TPASS1 VARCHAR2( 1),TNOPASS1 VARCHAR2( 1),TSABUN VARCHAR2( 6),TPASS VARCHAR2( 1),TINDATE VARCHAR2(12),PASS VARCHAR2( 1),PASS1 VARCHAR2( 1),PASS2 VARCHAR2( 1),OREMARK1 VARCHAR2(2000),OREMARK2 VARCHAR2(2000),TODATE VARCHAR2(12),GUBUN VARCHAR2(1))
PK : NO + TTEAM
CREATE TABLE ODOCU_TAB((NO NUMBER(8,0),OTYPE VARCHAR2( 4),DOCUNO VARCHAR2(16),TEAM VARCHAR2(20),SABUN VARCHAR2( 6),PASS VARCHAR2( 1),TELNO VARCHAR2(20),TITLE VARCHAR2(60),REMARK LONG,APPEND VARCHAR2(80),INDATE VARCHAR2(12),SABUN1 VARCHAR2( 6),PASS1 VARCHAR2( 1),DATE1 VARCHAR2(12),NOPASS1 VARCHAR2( 1),SABUN2 VARCHAR2( 6),PASS2 VARCHAR2( 1),NOPASS2 VARCHAR2( 1),DATE2 VARCHAR2(12),XREMARK1 VARCHAR2(200),XREMARK2 VARCHAR2(200),TODATE VARCHAR2( 8),OTYPE2 VARCHAR2( 1),APPEND2 VARCHAR2(80),APPEND3 VARCHAR2(80),OTYPE3 VARCHAR2( 1),JIKWI VARCHAR2(20),GUBUN VARCHAR2( 1),OPT VARCHAR2( 1));
PK : NO
CREATE TABLE SYSA01TB(TMCOD VARCHAR2(14),TEAM VARCHAR2(20),DOCNO1 VARCHAR2(10),DOCNO2 NUMBER(4,0),CLS CHAR(1),APP CHAR(1),OAMGR CHAR(6),ORD1 VARCHAR2( 3),ORD2 VARCHAR2( 3),AREA VARCHAR2( 3),IDATE DATE);
PK : TMCOD
SQL Usage의 수집
수행 회수 TOTAL_IO(LOGICAL+PHYSICAL) 1회수행당IO---------- ------------------------------- ------------
63080 865,611,449(865,532,732+78,717) 13,722
SELECT E.DOCUNO,E.TEAM,A.NO,A.TSABUN,A.TSABUN1,E.TODATE,A.TSABUN2,D.HNAME HNAME2,FROM ODOCU2_TAB A, SYSA02TB B, SYSA02TB C, SYSA02TB D, ODOCU_TAB EWHERE A.TODATE > DECODE(:B3,NULL,TO_CHAR(SYSDATE- 30,'YYYYMMDD' ),' ')AND A.TTEAM IN
(SELECT TEAM -- 소속 및 산하FROM SYSA01TBWHERE TMCOD LIKE (SELECT TMCOD||'%' FROM SYSA01TB
WHERE TEAM = (SELECT TEAM FROM SYSA02TB WHERE EMPNO = :B4))UNIONSELECT TEAM -- 겸직소속 및 산하1FROM SYSA01TBWHERE TMCOD LIKE (SELECT TMCOD||'%' FROM SYSA01TB
WHERE TEAM = (SELECT TEAM1 FROM SYSA02TB WHERE EMPNO = :B4))UNIONSELECT TEAM -- 겸직소속 및 산하2FROM SYSA01TBWHERE TMCOD LIKE (SELECT TMCOD||'%' FROM SYSA01TB
WHERE TEAM = (SELECT TEAM2 FROM SYSA02TB WHERE EMPNO = :B4)))AND E.NO = A.NOAND B.EMPNO(+) = A.TSABUN AND C.EMPNO(+) = A.TSABUN1 AND D.EMPNO(+) = A.TSABUN2ORDER BY A.TODATE DESC;
관계정보
Reverse Modeling을 통한AS-IS Data Model
ODOCU_TAB# NOo OTYPEo DOCUNOo TEAM* SABUNo PASSo TELNOo TITLEo REMARKo APPENDo INDATEo SABUN1o PASS1o DATE1o NOPASS1o SABUN2o PASS2o NOPASS2o DATE2o XREMARK1o XREMARK2o TODATEo OTYPE2o APPEND2o APPEND3o OTYPE3o JIKWIo GUBUNo OPT
ODOCU2_TAB# NO# TTEAMo TTYPEo TSABUN2o TDATE2o TPASS2o TNOPASS2o TSABUN1o TDATE1o TPASS1o TNOPASS1o TSABUNo TPASSo TINDATEo PASSo PASS1o PASS2o OREMARK1o OREMARK2o TODATEo GUBUN
SYSA02TB# EMPNO* HNAMEo JWCODo JIKWIo STEP1o STEP2o JKCODo JIKCKo TMCODo TEAMo TMCOD1o TEAM1o TMCOD2o TEAM2o TELNOo TELNO2o EMAILo EMAIL2o UPMOOo PASSWDo USEo IDATEo UDATEo CNTo PRVo CDATEo TIMERo CLS1
SYSA01TB# TMCOD* TEAMo DOCNO1o DOCNO2o CLSo APPo OAMGRo ORD1o ORD2o AREAo IDATE
TEAM TEAM2
TEAMTEAM
TEAM1TEAM
TTEAM TMCOD
NO
NO
일반적 SQL 성능 개선
SELECT E.DOCUNO,E.TEAM,A.NO,A.TSABUN,A.TSABUN1,E.TODATE,A.TSABUN2,D.HNAME HNAME2,FROM ODOCU2_TAB A, SYSA02TB B, SYSA02TB C, SYSA02TB D, ODOCU_TAB E, SYSA01TB F,
(SELECT TMCOD FROM SYSA01TBWHERE TEAM IN (SELECT DECODE(R.FLAG,'1',TEAM,'2',TEAM1,'3',TEAM2)
FROM SYSA02TB,(SELECT '1' AS FLAG FROM DUAL UNION ALLSELECT '2' AS FLAG FROM DUAL UNION ALLSELECT '3' AS FLAG FROM DUAL) R
WHERE EMPNO = :B4)) VWHERE A.TTEAM = F.TEAMAND F.TMCOD LIKE V.TMCOD ||'%'AND A.TODATE > DECODE(:B3,NULL,TO_CHAR(SYSDATE- 30,'YYYYMMDD' ),' ')AND E.NO = A.NOAND B.EMPNO(+) = A.TSABUN AND C.EMPNO(+) = A.TSABUN1 AND D.EMPNO(+) = A.TSABUN2ORDER BY A.TODATE DESC;
(개선 Point)
- 비 효율적인 Sub-Query의 사용을 Cartesian Product과 In-Line View를 사용하여 효율화- Nested Loops Join의 효율화
Model적 접근에 의한 개선점SELECT E.DOCUNO,E.TEAM,A.NO,A.TSABUN,A.TSABUN1,E.TODATE,A.TSABUN2,D.HNAME HNAME2,FROM ODOCU2_TAB A, SYSA02TB B, SYSA02TB C, SYSA02TB D, ODOCU_TAB EWHERE A.TODATE > DECODE(:B3,NULL,TO_CHAR(SYSDATE- 30,'YYYYMMDD' ),' ')AND A.TTEAM IN
(SELECT TEAM -- 소속 및 산하FROM SYSA01TBWHERE TMCOD LIKE (SELECT TMCOD||'%' FROM SYSA01TB
WHERE TEAM = (SELECT TEAM FROM SYSA02TBWHERE EMPNO = :B4))
UNIONSELECT TEAM -- 겸직소속 및 산하1FROM SYSA01TBWHERE TMCOD LIKE (SELECT TMCOD||'%' FROM SYSA01TB
WHERE TEAM = (SELECT TEAM1 FROM SYSA02TBWHERE EMPNO = :B4))
UNIONSELECT TEAM -- 겸직소속 및 산하2FROM SYSA01TBWHERE TMCOD LIKE (SELECT TMCOD||'%' FROM SYSA01TB
WHERE TEAM = (SELECT TEAM2 FROM SYSA02TBWHERE EMPNO = :B4)))
AND E.NO = A.NOAND B.EMPNO(+) = A.TSABUN AND C.EMPNO(+) = A.TSABUN1 AND D.EMPNO(+) = A.TSABUN2ORDER BY A.TODATE DESC;
Recursive 관계
정규화
개선 된 Data ModelODOCU_TAB# NOo OTYPEo DOCUNOo TEAM* SABUNo PASSo TELNOo TITLEo REMARKo APPENDo INDATEo SABUN1o PASS1o DATE1o NOPASS1o SABUN2o PASS2o NOPASS2o DATE2o XREMARK1o XREMARK2o TODATEo OTYPE2o APPEND2o APPEND3o OTYPE3o JIKWIo GUBUNo OPT
ODOCU2_TAB# NO# TTEAMo TTYPEo TSABUN2o TDATE2o TPASS2o TNOPASS2o TSABUN1o TDATE1o TPASS1o TNOPASS1o TSABUNo TPASSo TINDATEo PASSo PASS1o PASS2o OREMARK1o OREMARK2o TODATEo GUBUN
SYSA02TB# EMPNO* HNAMEo JWCODo JIKWIo STEP1o STEP2o JKCODo JIKCKo TELNOo TELNO2o EMAILo EMAIL2o UPMOOo PASSWDo USEo IDATEo UDATEo CNTo PRVo CDATEo TIMERo CLS1
SYSA01TB# TMCOD* TEAMo DOCNO1o DOCNO2o CLSo APPo OAMGRo ORD1o ORD2o AREAo IDATEo UPPER_TMCOD
SYSEMPTEAM# EMPNO# TMCOD* TM_FLAG
TTEAM
TMCOD
UPPER_TMCO
LOWER_TMCO
NO
NO
TMCOD
TMCOD
EMPNO
EMPNO
개선 Model에 의한 개선 SQLSELECT E.DOCUNO,E.TEAM,
A.NO,A.TSABUN,A.TSABUN1,E.TODATE,A.TSABUN2,D.HNAME HNAME2,
FROM ODOCU2_TAB A, SYSA02TB B, SYSA02TB C, SYSA02TB D, ODOCU_TAB EWHERE A.TODATE > DECODE(:B3,NULL,TO_CHAR(SYSDATE- 30,'YYYYMMDD' ),' ')AND A.TTEAM IN (SELECT TEAM
FROM SYSA01TBWHERE START WITH TMCOD = (SELECT TMCOD
FROM SYSEMPTEAMWHERE EMPNO = :B4)
CONNECT BY PRIOR TMCOD = UPPER_TMCOD)AND E.NO = A.NOAND B.EMPNO(+) = A.TSABUNAND C.EMPNO(+) = A.TSABUN1AND D.EMPNO(+) = A.TSABUN2ORDER BY A.TODATE DESC;
Oracle 의 DA 수행 방안은 EA (Enterprise Architecture)의 큰 축인 DA (Data Architecture)를
효과적으로 구축하는 동시에 시스템의 진단 및 성능개선의 효과를 동시에 달성할 수 있는 서비스를
제공합니다.
Q U E S T I O N SQ U E S T I O N SA N S W E R SA N S W E R S