© 2006 IBM Corporation IBM Software Group Information Management Team Charlie Kang IBM SWG Information Management DB2 UDB for Object Relation.

Slides:



Advertisements
Similar presentations
CUBRID 소개 (Object 개념) 서비스 사업부 / 기술지원팀. 목차 구조 일반적 특징 객체지향 특징 ORDB 개념을 이용한 스키마 ORDB 개념을 이용한 질의.
Advertisements

Allow reverse scans allow reverse scnas. allow reverse scans allow reverse scnas.
DB2 Information Management DB2 UDB CLP Command Summary.
소리가 작으면 이어폰 사용 권장!.
You YOungseok 데이터베이스 테이블 및 인덱스 You YOungseok.
데이터 모델링 방법론 2003년 03월.
4. 데이터 기능 유형.
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
오라클 데이터베이스 성능 튜닝.
Database & Internet Computing Laboratory 한 양 대 학 교
Chapter 5 SQL: 확장된 질의, 주장, 트리거, 뷰.
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
8장 서브 쿼리.
Information Technology
MySQL 및 Workbench 설치 데이터 베이스.
12. 데이터베이스 설계.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
관계 데이터 모델과 제약조건 개념, 특성, 키, 무결성 제약조건.
11장. 데이터베이스 서버 구축과 운영.
제 8장. 멀티미디어 데이터베이스 및 정보검색 시스템
오라클 데이터베이스 성능 튜닝.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
5장 Mysql 데이터베이스 한빛미디어(주).
Data Modeling Database 활용을 위한 기초 이론 Database의 개요 Data Modeling
6장. 물리적 데이터베이스 설계 물리적 데이터베이스 설계
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
6장 그룹 함수.
ER-Win 사용 방법.
2장. 관계 데이터 모델과 제약조건 관계 데이터 모델은 지금까지 제안된 데이터 모델들 중에서 가장 개념이 단순한 데이터 모델의 하나 IBM 연구소에 근무하던 E.F. Codd가 1970년에 관계 데이터 모델을 제안함 관계 데이터 모델을 최초로 구현한 가장 중요한 관계 DBMS.
07 그룹 함수 그룹 함수의 개념 그룹 함수의 종류 데이터 그룹 생성 HAVING 절.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SELECT empno, ename, job, sal, dname FROM emp, dept
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
SQL.
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
5장 Mysql 데이터베이스 한빛미디어(주).
KIM HEESANG PL/SQL 2 KIM HEESANG
11장. 1차원 배열.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
Chapter 3: Introduction to SQL
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
자바 5.0 프로그래밍.
정보처리기사 8조 신원철 양진원 유민호 이기목 김다연 윤현경 임수빈 조현진.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
JSP 게시판 구현.
4. 관계 데이터베이스 (Relational Database)- 7, 8장
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
4. 관계 데이터 모델.
04. DBMS 개요 명지대학교 ICT 융합대학 김정호.
Database Management System
06. SQL 명지대학교 ICT 융합대학 김정호.
Fucntion 요약.
SQL Server 2000 세미나 View, SP &Trigger
14 뷰(View) 뷰의 개념 뷰 관리.
1. 관계 데이터 모델 (1) 관계 데이터 모델 정의 ① 논리적인 데이터 모델에서 데이터간의 관계를 기본키(primary key) 와 이를 참조하는 외래키(foreign key)로 표현하는 데이터 모델 ② 개체 집합에 대한 속성 관계를 표현하기 위해 개체를 테이블(table)
Chapter 10 데이터 검색1.
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
ER-관계 사상에 의한 관계데이터베이스 설계 충북대학교 구조시스템공학과 시스템공학연구실
14 뷰(View) 뷰의 개념 뷰 관리.
 6장. SQL 쿼리.
fastestslowest 실제 질의문에서 사용 타입 추천 인덱스 SELECT list Default
7 생성자 함수.
6 객체.
Presentation transcript:

© 2006 IBM Corporation IBM Software Group Information Management Team Charlie Kang IBM SWG Information Management DB2 UDB for Object Relation

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 1 Object-Relational in DB2 DB2 Object Extensions 컴퓨터 프로그램 언어 기술에 있어, 최근의 중요한 개발 기술의 하나 는 Object-Orientation( 객체 지향 ) 입니다. 객체지향이라 함은 응용 프로그램의 Object 가 classification 에 의해 서로 연관이 있는 독립 된 Object 로서 모델로 만들어 질 수 있는 개념입니다. 내부의 구체적 인 구현사항은 숨겨진 채로, 외부의 function 과 attribute 는 구체화 되어 공개됩니다. DB2 의 Object 기술은 RDBMS 기술을 뿐만 아니라 포함하여 많은 Object 기술과 관련하여 많은 장점을 제공합니다. DB2 의 확장된 기능을 통해, 관계 데이터베이스로 OO 의 Concept 과 Methodology 를 함께 사용할 수 있습니다.  DB2 의 Object Relational 특성 Data types for very large objects - TEXT, AUDIO, ENGINEERING DATA, VIDEO - Binary Large Objects (BLOB) - Character Large Objects (CLOB) - Double-Byte Character Large Objects (DBCLOB) User-defined data types - Distinct types - Structured types User-defined behaviors - User-defined functions (UDF) - User-defined methods : encapsulated with Structured type. Index extensions - External Table function 정의를 통해 structure type 및 distinct type 에 대한 Index Key 값 변경 및 성능최적화를 위 한 검색 기능 제공 Constraints - Unique - Referential integrity - Table check - Triggers

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 2 User-defined Distinct Types  Flexibility User Defined Function 에 사용하여 새로운 데이터 타입을 위한 별도의 Function 을 기술함으로써 시스템의 다양성을 제공합니 다.  Consistency Distinct Type 을 통해 일관된 Process 를 합니다. Distinct Type 에 정의된 해당 Function 을 수행함으로써 일관성을 유지합니다.  Encapsulation Distinct Type 에 대한 Function 과 연산자를 정의할 수 있습니다. 이를 통해, 수행중인 Application 은 distinct type 내의 정의된 Function 내부의 Logic 과 독립적으로 수행가능 합니다.  Performance Distinct type 은 DBMS 에 통합됩니다. 내부적으로는 내장 데이 터 타입과 동일한 형태로 표현되며, 내장함수, 비교연산자 및 인 덱스 등을 사용함에 있어 동일한 효율성을 제공합니다. 다른 통화 (Currency) 를 다룰 필요가 있고, 이 통화가 서로 비교되거나 Query 에 의해 직접적으로 다뤄지는 것을 허락하지 않는 것을 보증하기 위한 업무를 가정하고 이를 위한 Type 을 정의합니다. 즉, 서로 다른 화폐 단위와 가치 비교를 할 경우, 전환이 필요합니다. 이를 위해, 필요한 각종 통 화를 정의합니다.  CREATE DISTINCT TYPE US_DOLLAR AS DECIMAL (9,2) WITH COMPARISONS  CREATE DISTINCT TYPE CANADIAN_DOLLAR AS DECIMAL (9,2) WITH COMPARISONS  CREATE DISTINCT TYPE EURO AS DECIMAL (9,2) WITH COMPARISONS 예문 User Defined Distinct Type : User-Defined Distinct type 을 통해 확장성, 유연성, 일관성 및 성능 을 제공합니다. 입사 지원자들의 양식이 Tabled 에 저장되었다면, 이 양식으로부터 정보를 얻어내기 위해 function 을 사용할 것입니다. 이를 위해 별도의 Type 을 정 의합니다.  CREATE DISTINCT TYPE PERSONAL.APPLICATION_FORM AS CLOB(32K) LOB Type 은 Function 을 지원하지 않으므로, 이를 위한 별도의 Type 을 통해 Function 을 작성합니다. 예문  Extensibility 새로운 Type 을 정의 함으로써, Application 에서 사용되는 데이 터 Type 을 다양하게 쓸 수 있습니다.

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 3 User-defined Distinct Types User-Defined Distinct type 을 통한 Table 정의 Sales :  CREATE TABLE US_SALES ( PRODUCT_ITEM INTEGER, MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12), YEAR INTEGER CHECK (YEAR > 1985), TOTAL US_DOLLAR)  CREATE TABLE CANADIAN_SALES ( PRODUCT_ITEM INTEGER, MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12), YEAR INTEGER CHECK (YEAR > 1985), TOTAL CANADIAN_DOLLAR)  CREATE TABLE GERMAN_SALES ( PRODUCT_ITEM INTEGER, MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12), YEAR INTEGER CHECK (YEAR > 1985), TOTAL EURO) 예문 Distinct Type 에 대한 사용 예  Distinct Type 과 상수의 비교 SELECT PRODUCT_ITEM FROM US_SALES WHERE TOTAL > US_DOLLAR (100000) AND month = 7 AND year = 1999; SELECT PRODUCT_ITEM FROM US_SALES WHERE TOTAL > CAST ( AS us_dollar) AND MONTH = 7 AND YEAR = 1999;

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 4 User-defined Distinct Types  다른 Type 간의 Cast CREATE FUNCTION EURO_TO_US_DOUBL ( EURO DOUBLE ) RETURNS DOUBLE SPECIFIC EURO_TO_US_DOUBL_DO LANGUAGE SQL CONTAINS SQL NO EXTERNAL ACTION NOT DETERMINISTIC RETURN EURO * 1.2; CREATE FUNCTION CDN_TO_US_DOUBL ( CDN DOUBLE ) RETURNS DOUBLE SPECIFIC CDN_TO_US_DOUBL LANGUAGE SQL CONTAINS SQL NO EXTERNAL ACTION NOT DETERMINISTIC RETURN CDN * 0.87; CREATE FUNCTION EURO_TO_US_DEC (DECIMAL(9,2)) RETURNS DECIMAL(9,2) SOURCE EURO_TO_US_DOUBL (DOUBLE); CREATE FUNCTION US_DOLLAR (EURO) RETURNS US_DOLLAR SOURCE EURO_TO_US_DEC (DECIMAL()); CREATE FUNCTION CDN_TO_US_DEC (DECIMAL(9,2)) RETURNS DECIMAL(9,2) SOURCE CDN_TO_US_DOUBL (DOUBLE); CREATE FUNCTION US_DOLLAR (CANADIAN_DOLLAR) RETURNS US_DOLLAR SOURCE CDN_TO_US_DEC (DECIMAL());  다른 Type 간의 비교 SELECT US.PRODUCT_ITEM, US.TOTAL FROM US_SALES AS US,CANADIAN_SALES AS CDN,GERMAN_SALES AS GERMAN WHERE US.PRODUCT_ITEM = CDN.PRODUCT_ITEM AND US.PRODUCT_ITEM = GERMAN.PRODUCT_ITEM AND US.TOTAL > US_DOLLAR (CDN.TOTAL) AND US.TOTAL > US_DOLLAR (GERMAN.TOTAL) AND US.MONTH = 7 AND US.YEAR = 1999 AND CDN.MONTH = 7 AND CDN.YEAR = 1999 AND GERMAN.MONTH = 7 AND GERMAN.YEAR = 1999;  Sourced UDF CREATE FUNCTION SUM (EURO) RETURNS EURO SOURCE SYSIBM.SUM (DECIMAL()); CREATE FUNCTION SUM (CANADIAN_DOLLAR) RETURNS CANADIAN_DOLLAR SOURCE SYSIBM.SUM (DECIMAL()); CREATE FUNCTION SUM (US_DOLLAR) RETURNS US_DOLLAR SOURCE SYSIBM.SUM (DECIMAL()); SELECT PRODUCT_ITEM, US_DOLLAR (SUM (TOTAL)) FROM CANADIAN_SALES WHERE YEAR = 1994 GROUP BY PRODUCT_ITEM;

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 5 User-defined Distinct Types  다른 Type 간의 Assignment CREATE TABLE US_SALES_2006 (PRODUCT_ITEM INTEGER, TOTAL US_DOLLAR); CREATE TABLE GERMAN_SALES_2006 (PRODUCT_ITEM INTEGER, TOTAL US_DOLLAR); CREATE TABLE CANADIAN_SALES_2006 (PRODUCT_ITEM INTEGER, TOTAL US_DOLLAR); INSERT INTO US_SALES_2006 SELECT PRODUCT_ITEM, SUM (TOTAL) FROM US_SALES WHERE YEAR = 1994 GROUP BY PRODUCT_ITEM; INSERT INTO GERMAN_SALES_2006 SELECT PRODUCT_ITEM, US_DOLLAR (SUM (TOTAL)) FROM GERMAN_SALES WHERE YEAR = 1994 GROUP BY PRODUCT_ITEM; INSERT INTO CANADIAN_SALES_2006 SELECT PRODUCT_ITEM, US_DOLLAR (SUM (TOTAL)) FROM CANADIAN_SALES WHERE YEAR = 1994 GROUP BY PRODUCT_ITEM;  다른 Type 간의 UNION CREATE VIEW ALL_SALES AS SELECT PRODUCT_ITEM, MONTH, YEAR, TOTAL FROM US_SALES UNION ALL SELECT PRODUCT_ITEM, MONTH, YEAR, US_DOLLAR (TOTAL) TOTAL FROM CANADIAN_SALES UNION ALL SELECT PRODUCT_ITEM, MONTH, YEAR, US_DOLLAR (TOTAL) TOTAL FROM GERMAN_SALES;

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 6 User-defined Structured Types User Defined Structure Type : Structured Type 은 잘 Attribute 로 구성된 잘 정의된 구조체 Modeling 에 유용합니다. 각 Attribute 는 Type 의 속성들입니다. Type 을 생성하기 위해, Type 의 이름, attribute 의 이름 및 Data type 를 기술 합니다. 또한 선택적으로 Type 에 대한 reference 방법 을 정의합니다.  예제 : BusinessUnit_T 정의 CREATE TYPE BusinessUnit_t AS ( Name VARCHAR(20),Headcount INT ) REF USING INT MODE DB2SQL; CREATE TYPE ADDRESS_T AS ( STREET VARCHAR(30),NUMBER VARCHAR(15),CITY VARCHAR(30),STATE VARCHAR(10) ) REF USING INTEGER MODE DB2SQL; “AS” 절 이하에 Type 과 관련된 Attribute 를 정의합니다. BusinessUnit_T 는 Name 과 HeadCount 속성을 가집니다. Structured Type 을 생성하기 위해서는 “MODE DB2SQL” 을 지정해야 합니다. 2. Storing instance of structured type :  As a row in a table Create table Person of Person_t …  As a value in a column Create table Properties ( ParcelNum Int, Photo BLOB(2k), Address Address_t )… Person_t (Name, Age, Address) Emp_t ( Person_t, SerialNum, Salary, Dept )  Structured Type 의 특징 1. Inheritance : Structured Type 을 정의 할 때 subtype 을 포함할 수 있습니다. 즉, subtype 에 포함 된 attribute 를 재 사용할 수 있습니다. BusinessUnit_t (Name, HeadCount)

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 7 User-defined Structured Types Structured Type 생성 : Structured Type 은 다른 Structured Type 을 포함하여 생성될 수 있 습니다. 이때, Original Structured Type 을 “Super Type” 이라 하고, 새로 생성된 Structured Type 을 “Sub Type” 이라고 합니다.  Type Create CREATE TYPE PERSON_T AS ( NAME VARCHAR(20),AGE INT,ADDRESS ADDRESS_T ) INSTANTIABLE REF USING VARCHAR(13) FOR BIT DATA MODE DB2SQL; CREATE TYPE EMP_T UNDER PERSON_T AS ( SERIALNUM INT,SALARY DECIMAL (9,2),DEPT REF(BUSINESSUNIT_T) ) MODE DB2SQL; CREATE TYPE STUDENT_T UNDER PERSON_T AS ( SERIALNUM VARCHAR(6),GPA DOUBLE ) MODE DB2SQL; CREATE TYPE MANAGER_T UNDER EMP_T AS ( BONUS DECIMAL(7,2) ) MODE DB2SQL; CREATE TYPE ARCHITECT_T UNDER EMP_T AS ( STOCKOPTION INTEGER ) MODE DB2SQL; BusinessUnit_t Person_t Emp_t Student_t Manager_t Architect_t Address_t

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 8 User-defined Structured Types Reference Type 과 Representation Type Reference Type 모든 Structured Type 에 대해 DB2 는 자동적으로 Companion Type 을 생성합니다. 그 Companion Type 은 Reference Type 이라 불리 고, 그것이 참조하는 Structured Type 은 Referenced Type 이라고 불립니다. SQL 문장에서 Reference Type 을 사용하기 위해서는, REF (type- name) 을 사용하며, type-name 은 Referenced type 을 나타냅니다. DB2 는 Type 된 Table 에서 Reference Type 을 Object Identifier Column 으로 사용합니다. Object Identifier 는 Typed Table Hierarchy 에서 Unique Identifier 로 사용됩니다. 또한, Reference Type 을 Typed Table 의 Reference 를 저장하기 위 해 사용합니다. 또한, Table 의 각각의 Row 를 참조하기 위해 사용합 니다. Representation Type Type Hierarchy 의 Root Type 을 생성할 때, “Create Type … REF USING …” 을 사용하여 참조를 위한 Base Type 을 명시합니다. 이때, Base Type 을 Representation Type 이라고 합니다. REF USING 절로 그 type 을 명시하지 않으면, DB2 는 VARCHAR FOR BIT DATA (16) 의 Default Type 을 사용합니다. Root Type 의 Representation Type 은 모든 Subtype 에 상속됩니다. “REF USING …” 은 Type Hierarchy 에서 Root type 에서만 정의할 수 있습니다. In the examples used throughout this section, the representation type for the BusinessUnit_t type is INTEGER, while the representation type for Person_t is VARCHAR(13). BusinessUnit_t Representation Type : Integer Person_t Representation Type : VARCHAR(13) Casting 과 Reference Type 비교 DB2 는 Reference Type 과 Representation Type 간의 Cast 를 위해 자동으로 Casting function 을 생성합니다. Create Type 문장의 “CAST WITH …” 절을 사용하여 Cast function 의 이름을 지정할 수 있습니다. 기본값은 Structured Type 과 representation Type 의 이름을 사용합니다.  Ex : Create Type Person_t … 다음은 “Create Type Person_t…” 에 의해 자동으로 생성되는 Function 입니다. CREATE FUNCTION VARCHAR (REF (Person_t) ) RETURNS VARCHAR; 또한, 반대의 Operation 을 위한 function 을 생성합니다. CREATE FUNCTION Person_t(VARCHAR(13)) RETURNS REF (Person_t); 기타 System-generated routine DB2 는 Structured Type 을 생성할 때 마다, 내재적으로 Function 과 method 를 생성합니다 – Constructor, Observer, Modify  Constructor Constructor function : CREATE FUNCTION Person_t ( ) RETURNS Person_t CREATE FUNCTION Manager_t ( ) RETURNS Manager_t

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 9 Type 에 대한 Method 정의 Structured Type 에 대해 Method 를 정의 할 수 있습니다. Create Method 생성 이전에 Method Specification 정의 되어야 합니다. User-defined Structured Types  Mutator Method Mutator Method 는 Object 의 개별 Attribute 별로 존재 합니다. Mutator Method 가 호출될 때, attribute 의 새 로운 값을 반환 받습니다. 예로, Person_t 는 다음의 각각의 속성에 대해 Mutator Method 를 만듭니다. - name, age, address. ALTER TYPE Person_t ADD METHOD AGE(int) RETURNS Person_t;  Observer Method Observer method 는 Object 의 개별 Attribute 별로 존 재합니다. Observer Method 는 Object 의 값을 Return 합 니다. 예로, Person_t 는 다음의 Observer method 를 만듭니다. ALTER TYPE Person_t ADD METHOD AGE() RETURNS INTEGER;  Method 생성 ALTER TYPE EMP_T ADD METHOD CALC_BONUS (RATE DOUBLE) RETURNS DECIMAL(9,2) LANGUAGE SQL CONTAINS SQL NO EXTERNAL ACTION DETERMINISTIC; CREATE METHOD CALC_BONUS (RATE DOUBLE) RETURNS DECIMAL(9,2) FOR EMP_T RETURN SELF..SALARY * RATE; ALTER TYPE EMP_T ADD METHOD CALC_BONUS (RATE INT) RETURNS DECIMAL(9,2) LANGUAGE SQL CONTAINS SQL NO EXTERNAL ACTION DETERMINISTIC; CREATE METHOD CALC_BONUS (RATE INT) RETURNS DECIMAL(9,2) FOR EMP_T RETURN SELF..SALARY * RATE;

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 10 User-defined Structured Types OIDNAMEAGEAddress aAdnrew29NULL Typed Table 에 대해 Object 저장 Typed Table 에 Row 형태로 저장하거나, Structured type 의 속성을 가진 Column 에 저장 할 수 있습니다. Typed Table 은 다른 Table 이 참조할 수 있는 Identity Attribute 를 가지고 있습니다.  Person_t Table 의 subtable 생성  Emp_t 를 위한 Table Person table 속성을 가지 Emp Table 을 subtable 이라고 합 니다. CREATE TABLE Emp OF Emp_t UNDER Person INHERIT SELECT PRIVILEGES ( SerialNum WITH OPTIONS NOT NULL, Dept WITH OPTIONS SCOPE BusinessUnit);  Pserson_t 를 위한 Create Table 문장 CREATE TABLE Person OF Person_t (REF IS Oid USER GENERATED);  Person Table 에 Data Insert INSERT INTO Person (Oid, Name, Age) VALUES (Person_t('a'), 'Andrew', 29); UPDATE Person SET Age=30 WHERE Name='Andrew';  Person Table 에 Data Update OIDNAMEAGEAddress aAdnrew30NULL  Employee Table 에 Data Insert INSERT INTO Emp (Oid, Name, Age, SerialNum, Salary) VALUES (Emp_t('s'), 'Susan', 39, 24001, ); OIDNAMEAGEADDRESSSerialNumSalaryDept sSusan  Table 조회 SELECT oid, name, age, salary FROM emp; OID NAME AGE SALARY x'73' Susan SELECT oid, name, age FROM person; OID NAME AGE x'61' Andrew 30 x'73' Susan 39

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 11 User-defined Structured Types Typed Table 간의 Relationship 정의 Typed Table 과 Typed Table 간의 관계를 정의할 수 있으며, 동일한 Typed Table 에 대해 관계를 정의할 수 있습니다.  Emp Table 과 Business Table 간의 관계 정의 update emp set dept = BusinessUnit_t(1) where oid = emp_t('s'); update emp set dept = NULL where oid = emp_t('s'); BusinessUnit_t Emp_t DEPT OIDNAMEAGEADDRESSSerialNumSalaryDept sSusan (ref) OIDNAMEHeadCount 1DEPT111 2DEPT221 3DEPT332 : :  Emp Table 조회 select oid, name,dept->name,dept->headcount from emp where oid = emp_t('s')" OID NAME NAME HEADCOUNT x'73' Susan DEPT1 11 INSERT INTO BusinessUnit (Oid, Name, Headcount) VALUES (BusinessUnit_t(1), 'DEPT1',11),(BusinessUnit_t(2), 'DEPT2',21),(BusinessUnit_t(3), 'DEPT3',32); select * from businessunit; OID NAME HEADCOUNT DEPT1 11

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 12 User-defined Structured Types Column 에 Object 저장 DBMS 의 built-in data type 으로 Data 를 저장하기에 적절하지 않을 경우, Object 를 column 에 저장할 수 있다.  Person Table OID NAME (VARCHAR) AGE (INT) Address (Address_t) StreetNumberCityState  Person table 에 address 저장 UPDATE EMP SET ADDRESS=ADDRESS..NUMBER('4869')..STREET('APPLETREE') WHERE NAME='FRANKY' AND ADDRESS..STATE='CA'; UPDATE EMP SET ADDRESS..NUMBER = '4869', ADDRESS..STREET = 'APPLETREE' WHERE NAME='FRANKY' AND ADDRESS..STATE='CA' ; INSERT INTO Person (Oid, Name, Age, Address) VALUES ( Person_t('B'), ‘Billy', 29, ADDRESS_T('Gang Name Dogok','123','Seoul','Korea'));  Address_t 의 Table function CREATE FUNCTION ADDRESS_T (street VARCHAR(30), number VARCHAR(15), city VARCHAR(30), state VARCHAR(20) ) RETURNS ADDRESS_T LANGUAGE SQL RETURN ADDRESS_T()..street(street)..number(number)..city(city)..state(state);

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 13 User-defined Structured Types Typed Table 에서 Structured Type 사용 Typed Table 생성 Typed Table 은 “Create Type” 문장을 통해 기술된 Object 를 실제 로 저장하는데 사용할 수 있습니다. 실제로, “Create Table” 문장을 사용하여 다양한 Typed Table 을 생성 할 수 있습니다. 또한 Structured Type 구조를 가진 Type 을 통해 계층적 Table 구조를 생 성 할 수 있습니다.  BusinessUnit Typed Table 생성 CREATE TABLE BusinessUnit OF BusinessUnit_t (REF IS Oid USER GENERATED);  계층적 Person Table 생성 CREATE TABLE Person OF Person_t (REF IS Oid USER GENERATED); CREATE TABLE Emp OF Emp_t UNDER Person INHERIT SELECT PRIVILEGES ( SerialNum WITH OPTIONS NOT NULL, Dept WITH OPTIONS SCOPE BusinessUnit ); CREATE TABLE Student OF Student_t UNDER Person INHERIT SELECT PRIVILEGES; CREATE TABLE Manager OF Manager_t UNDER Employee INHERIT SELECT PRIVILEGES; CREATE TABLE Architect OF Architect_t UNDER Employee INHERIT SELECT PRIVILEGES; Table Type 정의 Object Identifier 이름 정의 Select 권한 상속 : Sub table 에 대한 Super Table 의 Select 권한정의 Column Option 정의 “WITH OPTIONS” 절을 통한 Option 정의 Reference Column 의 범위 지정 “WITH OPTIONS SCOPE” 절을 통한 범위 지정

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 14 User-defined Structured Types Typed Table Record 생성  BusinessUnit Table INSERT INTO BusinessUnit (Oid, Name, Headcount) VALUES(BusinessUnit_t(1), 'Toy', 15); INSERT INTO BusinessUnit (Oid, Name, Headcount) VALUES(BusinessUnit_t(2), 'Shoe', 10);  Person Table INSERT INTO Person (Oid, Name, Age) VALUES(Person_t('a'), 'Andrew', 20); INSERT INTO Person (Oid, Name, Age) VALUES(Person_t('b'), 'Bob', 30); INSERT INTO Person (Oid, Name, Age) VALUES(Person_t('c'), 'Cathy', 25); BusinessUnit (Oid, Name, Headcount) BusinessUnit (Oid, Name, Headcount) Person (Oid, Name, Age, Address) Person (Oid, Name, Age, Address) Emp (..., SerialNum, Salary, Dept) Emp (..., SerialNum, Salary, Dept) Student (..., SerialNum, GPA) Student (..., SerialNum, GPA) Manager (..., Bonus) Manager (..., Bonus) Architect (..., StockOption) Architect (..., StockOption)  Person Table INSERT INTO Emp (Oid, Name, Age, SerialNum, Salary, Dept) VALUES(Employee_t('d'), 'Dennis', 26, 105, 30000, BusinessUnit_t(1)); INSERT INTO Emp (Oid, Name, Age, SerialNum, Salary, Dept) VALUES(Employee_t('e'), 'Eva', 31, 83, 45000, BusinessUnit_t(2)); INSERT INTO Emp (Oid, Name, Age, SerialNum, Salary, Dept) VALUES(Employee_t('f'), 'Franky', 28, 214, 39000, BusinessUnit_t(2));

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 15 User-defined Structured Types Typed Table Record 생성  Student Table INSERT INTO Student (Oid, Name, Age, SerialNum, GPA) VALUES(Student_t('g'), 'Gordon', 19, ‘10245’, 4.7); INSERT INTO Student (Oid, Name, Age, SerialNum, GPA) VALUES(Student_t('h'), 'Helen', 20, ‘10357’, 3.5);  Manager Table INSERT INTO Manager (Oid, Name, Age, SerialNum, Salary, Dept, Bonus) VALUES(Manager_t('i'), 'Iris', 35, 251, 55000, BusinessUnit_t(1), 12000); INSERT INTO Manager (Oid, Name, Age, SerialNum, Salary, Dept, Bonus) VALUES(Manager_t('j'), 'Christina', 10, 317, 85000, BusinessUnit_t(1), 25000); INSERT INTO Manager (Oid, Name, Age, SerialNum, Salary, Dept, Bonus) VALUES(Manager_t('k'), 'Ken', 55, 482, , BusinessUnit_t(2), 48000);  Architecture Table INSERT INTO Architect (Oid, Name, Age, SerialNum, Salary, Dept, StockOption) VALUES(Architect_t('l'), 'Leo', 35, 661, 92000, BusinessUnit_t(2), 20000); INSERT INTO Architect (Oid, Name, Age, SerialNum, Salary, Dept, StockOption) VALUES( Architect_t('m'), 'Brian', 7, 882, , (SELECT Oid FROM BusinessUnit WHERE name = 'Toy'), 30000);

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 16 User-defined Structured Types Reference Type 각각의 Structured type 에 대해, DB2 는 이에 상응하는 reference type 을 제공합니다. 예를 들어, Person_t type 을 생성할 때, REF(Person_t) type 을 생성합니다. Reference Type 생성하기 Create Table 문장의 “With Options” 절을 사용하여 Column 과 Object 간의 연관관계를 정의할 수 있습니다. CREATE TABLE Emp OF Emp_t UNDER Person INHERIT SELECT PRIVILEGES (Dept WITH OPTIONS SCOPE BusinessUnit); Dept ColumnBusinessUnit Table OIDNAMEAGEADDRESSSerialNumSalaryDept (ref) OIDNAMEHeadCount EMP Table 과 sub-table BusinessUnit Table Self-Reference Relationship 정의  Type 생성 CREATE TYPE COMPANY_T AS ( NAME VARCHAR(30), LOCATION VARCHAR(30) ) MODE DB2SQL ; CREATE TYPE PART_T AS ( DESCRIPT VARCHAR(20), SUPPLIED_BY REF(COMPANY_T), USED_IN REF(PART_T) ) MODE DB2SQL;  Table 생성 CREATE TABLE SUPPLIERS OF COMPANY_T ( REF IS SUPPNO USER GENERATED); CREATE TABLE PARTS OF PART_T ( REF IS PARTNO USER GENERATED, SUPPLIED_BY WITH OPTIONS SCOPE SUPPLIERS, USED_IN WITH OPTIONS SCOPE PARTS); PARTNODESCRIPTSUPPLIED_BYUSER_IN (ref) SUPPNONAMELOCATION Parts Table Suppliers Table

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 17 User-defined Structured Types RI (Referential Integrity) 와 Scoped Reference 의 차이 Scoped Reference 는 Table Object 간 관계를 정의하지만 RI 와는 다르다. Scope 는 Target table 에 대한 정보만을 제공한다. Scoped Reference 는 다른 Object 에 해당 값이 필요하거나, 강제적으로 제 약하지는 않는다. RI 관계를 강제적으로 정의 하려면 Referential Integrity 를 정의하여 야 한다.  Type 정의 및 Table 정의 CREATE TYPE Empl_t AS ( Name VARCHAR(10), Mgr REF(Empl_t) ) ref using integer MODE DB2SQL; CREATE TABLE Empl OF Empl_t ( REF IS Oid USER GENERATED);  RI 정의 ALTER TABLE Empl ADD CONSTRAINT pk1 UNIQUE(Oid); ALTER TABLE Empl ADD CONSTRAINT fk1 FOREIGN KEY(Mgr) REFERENCES Empl (Oid);  Record 생성 insert into empl (oid,name) values ( empl_t(1 ), ' 홍길동 ' ); insert into empl (oid,name,mgr) values ( empl_t(11 ), ' 김서방 ',empl_t(1 ) ); insert into empl (oid,name,mgr) values ( empl_t(111), ' 김서방 111',empl_t(11 ) ); insert into empl (oid,name,mgr) values ( empl_t(112), ' 김서방 112',empl_t(11 ) ); insert into empl (oid,name,mgr) values ( empl_t(12 ), ' 이서방 ',empl_t(1 ) ); insert into empl (oid,name,mgr) values ( empl_t(121), ' 이서방 121',empl_t(12 ) ); insert into empl (oid,name,mgr) values ( empl_t(122), ' 이서방 122',empl_t(12 ) ); OIDNAMEMGR (ref) Empl Table

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 18 User-defined Structured Types Typed View 정의 “Create View” 문장을 사용하여 Typed View 를 생성할 수 있습니다. 원하는 Attribute 를 만들기 위해서는 Type 을 생성할 수 있으며, 이를 바탕으로 View 를 정의 할 수 있습니다.  View 를 위한 Type 정의 CREATE TYPE VBUSINESSUNIT_T AS ( NAME VARCHAR(20) ) REF USING INTEGER MODE DB2SQL;  View 를 정의 CREATE VIEW VBUSINESSUNIT OF VBUSINESSUNIT_T MODE DB2SQL (REF IS VOID USER GENERATED) AS SELECT VBUSINESSUNIT_T(INTEGER(OID)), NAME FROM BUSINESSUNIT;  View 조회 SELECT * FROM VBUSINESSUNIT; VOID NAME DEPT1 2 DEPT2 3 DEPT3 4 DEPT4 5 DEPT5  View Hierarchy 생성 CREATE TYPE VPERSON_T AS (NAME VARCHAR(20)) MODE DB2SQL; CREATE TYPE VEMP_T UNDER VPERSON_T AS (SALARY INT, DEPT REF(VBUSINESSUNIT_T)) MODE DB2SQL; CREATE VIEW VPERSON OF VPERSON_T MODE DB2SQL (REF IS VOID USER GENERATED) AS SELECT VPERSON_T (VARCHAR(OID)), NAME FROM ONLY(PERSON); CREATE VIEW VEMP OF VEMP_T MODE DB2SQL UNDER VPERSON INHERIT SELECT PRIVILEGES (DEPT WITH OPTIONS SCOPE VBUSINESSUNIT) AS SELECT VEMP_T(VARCHAR(OID)), NAME, SALARY, VBUSINESSUNIT_T(INTEGER(DEPT)) FROM EMP;

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 19 User-defined Structured Types Typed Table 조회 조회 권한이 있으면 해당 Table 을 일반 Table 조회 하듯이 조회 할 수 있습니다.  Person table 조회 select name, age from person; Dereference Reference 에 대한 조회 Scoped Reference 를 조회 하고자 할 때는 “Dereference Operation” 사용합니다. Dereference Operator : -> Scoped-reference-expression->column-in-target-typed-table  Table 조회 select name, salary, dept->name from emp; SELECT P.Descript, P.Supplied_by -> Location FROM Parts P WHERE P.Used_in -> Descript='Wing'; Built-in Function DEREF: Scope reference Column 명을 통해 Object 확보 TYPE_NAME TYPE_ID TYPE_SCHEMA  DEREF DEREF ( Scoped-reference-expression )  TYPE_* function CREATE TYPE PROJECT_T AS (PROJID INT, RESPONSIBLE REF(EMP_T)) MODE DB2SQL; CREATE TABLE PROJECT OF PROJECT_T (REF IS OID USER GENERATED, RESPONSIBLE WITH OPTIONS SCOPE EMP); Insert into project values ( project_t('A'),10, emp_t('s') ); SELECT OID, PROJID, RESPONSIBLE->NAME, TYPE_NAME (DEREF(RESPONSIBLE)), TYPE_ID (DEREF(RESPONSIBLE)), TYPE_SCHEMA(DEREF(RESPONSIBLE)) FROM PROJECT;

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 20 User-defined Structured Types Query Specification ONLY: 특정 type 의 Object 만 Return IS OF: Type 에 대한 유형 제어 OUTER: Object 가 가질 수 있는 모든 Attribute 표시 GENERATE_UNIQUE () : 유일한 값을 생성하는 변수  ONLY SELECT NAME FROM ONLY ( EMP );  IS OF IS OF ( TYPE_NAME[, … ] ) SELECT NAME FROM EMP E WHERE E.AGE > 15 AND DEREF(E.OID) IS OF ( EMP_T, MANAGER_T, ARCHITECT_T);  OUTER SELECT TYPE_NAME(DEREF(Oid)) TYPE_NAME, AGE, NAME, SALARY, STOCKOPTION FROM OUTER(EMP); TYPE_NAME AGE NAME SALARY STOCKOPTION EMP_T 26 Dennis EMP_T 36 Charlie EMP_T 46 Bill EMP_T 36 Charlie EMP_T 46 Bill EMP_T 39 Susan ARCHITECT_T 7 Brian EMP_T 35 Marie  GENERATE_UNIQUE() INSERT INTO EMP (Oid, Name, Age, SerialNum, Salary, Dept) VALUES (emp_t(generate_unique()), 'Dennis', 26, 105, 30000,BusinessUnit_t(1)); select oid, name, age from emp where serialnum=105 OID NAME AGE x' ' Dennis 26

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 21 Grouping Expression  Group By 절 SELECT SALES_DATE, SALES_PERSON, SUM(SALES) AS UNITS_SOLD, GROUPING(SALES_DATE) AS DATE_GROUP, GROUPING(SALES_PERSON) AS SALES_GROUP FROM SALES GROUP BY CUBE(SALES_DATE, SALES_PERSON) ORDER BY SALES_DATE, SALES_PERSON SALES_DATE SALES_PERSON UNITS_SOLD DATE_GROUP SALES_GROUP GOUNOT LEE LUCCHESSI GOUNOT LEE LUCCHESSI GOUNOT LEE LUCCHESSI GOUNOT LEE LUCCHESSI GOUNOT LEE LUCCHESSI GOUNOT LEE LUCCHESSI SALES_DATE UNITS_SOLD DATE_GROUP  Cube ( SALES_DATE ) SELECT SALES_DATE, SUM(SALES) UNITS_SOLD, GROUPING(SALES_DATE) DATE_GROUP FROM SALES GROUP BY CUBE(SALES_DATE) ORDER BY SALES_DATE;  Cube ( SALES_PERSON ) SELECT SALES_PERSON, SUM(SALES) UNITS_SOLD, GROUPING(SALES_PERSON) SALES_GROUP FROM SALES GROUP BY CUBE(SALES_PERSON) ORDER BY SALES_PERSON; SALES_PERSON UNITS_SOLD SALES_GROUP GOUNOT 50 0 LEE 91 0 LUCCHESSI

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 22 Grouping Expression  Grouping Sets SELECT WEEK(SALES_DATE) AS WEEK, SALES_PERSON, SUM(SALES) AS UNITS_SOLD FROM SALES WHERE WEEK(SALES_DATE) = 13 GROUP BY GROUPING SETS (WEEK(SALES_DATE), SALES_PERSON) ORDER BY WEEK, SALES_PERSON Grouping Sets 단일 명령문에 여러 그룹 절을 지정합니다. 두 개 이상의 행의 그룹을 단일결과 집합으로 Return 합니다.  Group By Grouping Set SELECT WEEK(SALES_DATE) AS WEEK, DAYOFWEEK(SALES_DATE) AS DAY_WEEK, SALES_PERSON, SUM(SALES) AS UNITS_SOLD FROM SALES WHERE WEEK(SALES_DATE) = 13 GROUP BY GROUPING SETS ( ( WEEK(SALES_DATE), SALES_PERSON),(DAYOFWEEK(SALES_DATE), SALES_PERSON) ) ORDER BY WEEK, DAY_WEEK, SALES_PERSON; WEEK DAY_WEEK SALES_PERSON UNITS_SOLD GOUNOT LEE LUCCHESSI GOUNOT LEE LUCCHESSI GOUNOT LEE LUCCHESSI 4 WEEK SALES_PERSON UNITS_SOLD GOUNOT 32 - LEE 33 - LUCCHESSI 8  Grouping Sets SELECT DAYOFWEEK(SALES_DATE) DAY_WEEK, SALES_PERSON, SUM(SALES) UNITS_SOLD FROM SALES WHERE WEEK(SALES_DATE) = 13 GROUP BY GROUPING SETS (DAYOFWEEK(SALES_DATE), SALES_PERSON) ORDER BY DAY_WEEK, SALES_PERSON DAY_WEEK SALES_PERSON UNITS_SOLD GOUNOT 32 - LEE 33 - LUCCHESSI 8

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 23 Grouping Expression  Rollup 정규 그룹 Record 외에 소계 Record 을 포함하는 결과 집합을 생성 하는 GROUP BY 절. ROLLUP 그룹화는 일련의 GROUP SETS 으로 정의 됩니다. N 개의 column 으로 구성된 ROLLUP 은 Super Groups 단일 명령문에 여러 그룹 절을 지정합니다. 두 개 이상의 행의 그룹을 단일결과 집합으로 Return 합니다. GROUP BY ROLLUP(C1,C2,...,Cn-1,Cn) 로 표현되며 GROUP BY GROUPING SETS((C1,C2,...,Cn-1,Cn) (C1,C2,...,Cn-1)... (C1,C2) (C1) () ) 와 동일합니다. n 개의 요소가 n+1 GROUP SETS 로 정의되며, column 의 순서는 GROUP SETS 의 표현식에 동일한 순서로 표현됩니다.

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 24 Grouping Expression  CUBE ROLLUP 총계의 모든 행과 이에 더하여 “ 교차 Table” 행도 포함하는 결과 집합을 산출하는 GROUP BY 절. CUBE 의 n 개의 요소는 2^n GROUP SETS 으로 정의된다. (a,b,c) 의 CUBE 는 GROUP BY CUBE (a, b, c) 로 표현되며 GROUP BY GROUPING SETS((a,b,c) (a,b) (a,c) (b,c) (a) (b) (c) () ) 와 동일합니다.

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 25 Multi-Dimensional Clustering MDC MDC (Multi Dimensional Clustering) 이란 DBMS 가 데이터를 물리 적으로 다차원 CUBE 형태로 저장하여 질의 속도를 급격히 향상시키 는 기능으로 DB2 UDB 만이 제공하는 기술입니다. 예를 들어 일반 클 러스터링 인덱스의 경우는 하나의 칼럼에 한해서만 물리적으로 Sorting 된 위치를 보장 받을 수 있지만 MDC 의 경우는 여러 칼럼에 대해 물리적 Sorting 위치를 보장 받을 수 있어 DB2 Optimizer 가 해 당 데이터의 물리적 위치를 미리 알기 때문에 데이터 Scan 대상을 급 격히 줄이게 됩니다. East 97 East 98 North 99 South 99 West 00 Data Blocks Reg ion Yea r Reg ion Yea r Prior to MDCWith MDC  MDC 의 구조  Table defined as an MDC table

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 26 Multi-Dimensional Clustering Block Index Block Index 는 Record 단위가 아닌 Block 을 Pointing 합니다. Block index 는 Unique 한 BID (Block ID) 를 관리하며, 각 Block 의 시작점을 Pointing 합니다.  Blocking Index 구조  MDC table 생성 CREATE TABLE sales ( sales_person VARCHAR(30) NOT NULL, region CHAR(5) NOT NULL, number_of_sales INT NOT NULL, year INT ) ORGANIZE BY DIMENSIONS (sales_person, year);

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 27 Summary Table Summary Table 은 Query 결과를 기반으로 정의되는 Table 입니다. Summary Table 은 하나 이상의 Table 로부터 이미 계산 되어진 결과 를 포함하고 있는 Table 입니다. 만일, DB2 Optimizer 가 동적 Query 의 실행이 Base Table 보다 Summary Table 에 대해 실행하는 것이 빠르다고 판단되면, Summary Table 에 대해 Query 를 수행합니다. 또한 실행결과도 빠르게 반환됩니다. Db2 Optimizer 의 Query Rewrite function 은 query 의 결과를 Summary Table 에서 얻을 수 있다면, Base Table 이 대신 Summary Table 에서 Access 를 합니다.  Summary Table 개념 Query #1 Query #2 Query #3 Query … Query #n Base Table #1 Base Table #2 Base Table … Base Table #n Summary Table Summary Table 생성 CREATE TABLE 문장을 통해 summary table 을 만들 수 있습니다. 다 음은 CREATE TABLE 을 만드는 방법을 소개합니다. CREATE SUMMARY TABLE dept_group AS ( SELECT EMP.WORKDEPT, COUNT(*) AS NUM_ROWS, COUNT(EMP.SALARY) AS NUM_SALARY, SUM(EMP.SALARY) AS SUM_SALARY, COUNT(EMP.COMM) AS NUM_COMM, SUM(EMP.COMM) AS SUM_COMM FROM EMPLOYEE EMP GROUP BY EMP.WORKDEPT ) DATA INITIALLY DEFERRED REFRESH DEFERRED;  Summary Table 개념 위의, 예에서는 “SUMMARY” 라는 Keyword 가 요약 table 이라는 것을 알리기 위해 사용되었습니다. 그러나, “SUMMARY” Keyword 없이도 생성할 수 있습니다. “AS” 다음은 요약 Table 을 의미하는 Full-Select 문장이 이어집니다. 요약 Table 의 데이터를 변경하기 위해서는 두 가지 방법이 있 습니다. – “REFERSH DEFERRED”, “REFRESH IMMEDIDATE”. REFERSH DEFERRED 는 “REFRESH TABLE” 문장에 의해 요약 Table 의 데이터가 변경됩니다. REFRESH TABLE 문장이 실행되 면 Full-Select Query 결과를 요약 Table 에 반영합니다. REFRESH IMMEDIDATE 는 Base Table 의 INSERT/UPDATE/DELETE 가 요약 Table 에 즉시 반영됨을 의미 합니다. “DATA INITIALLY DEFERRED” 절 의미는 CREATE TABLE 문장 실행 시 데이터가 요약 Table 에 Insert 되이 않음을 의미합니 다. REFERSH TABLE 문장에 의해서 만 데이터가 생성, 변경됩 니다. 요약 Table 이 생성되면, Table 은 “Check-Pending” 상태에 놓이게 됩니다. “REFRESH TABLE” 또는 “ SET INTEGRITY FOR IMMEDIATE CHECKED” 문장에 의해 Normal 상태로 변경됩니다. NOTE

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 28 Summary Table CREATE SUMMARY TABLE dept_group2 AS ( SELECT EMP.WORKDEPT, COUNT(*) AS NUM_ROWS, COUNT(EMP.SALARY) AS NUM_SALARY, SUM(EMP.SALARY) AS SUM_SALARY, COUNT(EMP.COMM) AS NUM_COMM, SUM(EMP.COMM) AS SUM_COMM FROM EMPLOYEE EMP GROUP BY EMP.WORKDEPT ) DATA INITIALLY DEFERRED REFRESH IMMEDIATE;  REFERSH IMMEDIATE Table 생성 Summary Table 에 대한 System Catalog Information System Catalog Table 은 일반 Table 에 대한 정보 뿐만 아니라 요약 Table 에 대한 정보도 관리합니다. 다음의 “LIST TABLES” 명령의 output 입니다. 유영의 “S” 는 요약 Table 을 의미합니다. db2 list tables CREATE SUMMARY TABLE UMST_EMPLOYEE AS ( SELECT WORKDEPT, COUNT(*) AS EMPCOUNT, SUM(SALARY) AS TOTSALARY, SUM(BONUS) AS TOTBONUS FROM EMPLOYEE GROUP BY WORKDEPT ) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; User-Maintained Summary Table( 사용자 정의 요약 Table) 사용자가 이미 요약 데이터를 생성하여 가지고 있는 경우가 있 습니다. 예를 들어, 야간 배치 작업을 통해 Table 에 Load 을 위한 요약자료를 실행할 수 있습니다. 이럴 경우, 요약 데이터 를 사용자가 정의한 요약 Table 에 Load 할 수 있습니다. User-Maintained Summary Table 이 System Summary Table 과 차이점은 요약 Table 의 생성과 데이터 Load 가 사용 자 관리하에 있다는 점입니다. User-Maintained Summary Table 을 생성하기 위해서는 “MAINTAINED BY USER” Option 을 추사 하여 생성합니다. 다 음은 요약 Table 을 생성하는 예입니다. 요약 Table 은 INSERT/UPDATE/DELETE 에 의해 직접 변경될 수 없습 니다. NOTE 테이블 / 뷰 스키마 유형 작성 시간 DEPT_GROUP DB2ADMIN S DEPT_GROUP2 DB2ADMIN S  User-Maintained Summary Table 생성 SET INTEGRITY FOR UMST_EMPLOYEE ALL IMMEDIATE UNCHECKED; REFRESH TABLE UMST_EMPLOYEE;  Check pending 상황 RESET “SET INTEGRITY” 명령을 수행한 후, table 에 데이터를 Load 를 위한 Insert 를 수행할 수 있습니다.

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 29 Summary Table INSERT INTO UMST_EMPLOYEE SELECT * FROM ( SELECT WORKDEPT, COUNT(*), SUM(SALARY), SUM(BONUS) FROM EMPLOYEE GROUP BY WORKDEPT ) AS T; 예를 들어, 다음 SQL 을 통해 요약 Table 에 데이터를 Load 할 수 있습 니다. Optimization Setting CURRENT REFRESH AGE 는 DECIMAL(20,6) 형태의 Timestamp 기간 입니다. Deferred Refresh Summary Table 에 대해, REFRESH TABLE 문을 수행한 최대 기간을 명시합니다. 이는 Optimizer 가 요약 Table 을 사용할 것인지를 결정하게 합니다. SET CURRENT REFRESH AGE 문장을 통해 CURRENT REFRESH AGE 를 변경할 수 있습니다. 해당 값 을 0 또는 로 변경 할 수 있습니다 년, 99 월, 99 일, 99 시, 99 분, 99 초 ). 0 은 REFRESH IMMEDIDATE 요약 table 만 참조 하라는 의미 입니다 는 REFRESH DEFERRED 또는 REFRESH IMMEDIATE 요약 Table 을 참조하라는 의미입니다 를 대신 해, ANY 을 사용할 수 있습니다. DB2 "SET CURRENT REFRESH AGE = ANY" NOTE SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION 은 요 약 Table 을 사용여부를 결정하는 구문입니다. ALL : 동적 SQL 문장에 대해 모든 유형의 요약 Table 을 사용합니다. NONE : 어떤 유형의 요약 Table 도 사용하지 않습니다. SYSTEM : System-maintained refresh-deferred materialized query table (MQT) 가 사용됩니다. ( Immediate MQT 는 항상 사용됩니다.) USER : User-maintained refresh-deferred materialized query tables (MQT) 만 사용됩니다. CREATE SUMMARY TABLE Dept_group AS (SELECT Workdept, SUM(Salary) AS Salary, SUM(Bonus) AS Bonus FROM Employee GROUP BY Workdept) DATA INITIALLY DEFERRED REFRESH DEFERRED;  Automatic summary table CREATE SUMMARY TABLE EPLUSD AS (SELECT EMPNO, LASTNAME, DEPT, DEPTNAME FROM EMPLOYEE E, DEPARTMENT D WHERE E.DEPT = D.DEPTNO) DATA INITIALLY DEFERRED REFRESH DEFERRED;  Materialized query table

User Guide for Basic Administration © 2006 IBM Corporation DB2 UDB 30 Q&A