Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "© 2006 IBM Corporation IBM Software Group Information Management Team Charlie Kang IBM SWG Information Management DB2 UDB for Object Relation."— Presentation transcript:

1 © 2006 IBM Corporation IBM Software Group Information Management Team Charlie Kang ckang@kr.ibm.com IBM SWG Information Management DB2 UDB for Object Relation

2 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

3 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 을 다양하게 쓸 수 있습니다.

4 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 (100000 AS us_dollar) AND MONTH = 7 AND YEAR = 1999;

5 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;

6 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;

7 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)

8 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

9 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

10 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;

11 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, 37000.48); OIDNAMEAGEADDRESSSerialNumSalaryDept sSusan392400137000.48  Table 조회 SELECT oid, name, age, salary FROM emp; OID NAME AGE SALARY ------- ------- ----------- ----------- x'73' Susan 39 37000.48 SELECT oid, name, age FROM person; OID NAME AGE ------- ------- ----------- x'61' Andrew 30 x'73' Susan 39

12 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 sSusan392400137000.48(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 ----------- ------- ----------- 1 DEPT1 11

13 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);

14 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” 절을 통한 범위 지정

15 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));

16 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, 105000, 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, 112000, (SELECT Oid FROM BusinessUnit WHERE name = 'Toy'), 30000);

17 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

18 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

19 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 ----------- --------- 1 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;

20 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;

21 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 30000.00 - EMP_T 36 Charlie 34000.00 - EMP_T 46 Bill 44000.00 - EMP_T 36 Charlie 34000.00 - EMP_T 46 Bill 44000.00 - EMP_T 39 Susan 37000.48 - ARCHITECT_T 7 Brian 112000.00 30000 EMP_T 35 Marie 55000.00 -  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'20060404092229377998000000' Dennis 26

22 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 ---------- --------------- ----------- ----------- ----------- 1995-12-31 GOUNOT 1 0 0 1995-12-31 LEE 6 0 0 1995-12-31 LUCCHESSI 1 0 0 1995-12-31 - 8 0 1 1996-03-29 GOUNOT 11 0 0 1996-03-29 LEE 12 0 0 1996-03-29 LUCCHESSI 4 0 0 1996-03-29 - 27 0 1 1996-03-30 GOUNOT 21 0 0 1996-03-30 LEE 21 0 0 1996-03-30 LUCCHESSI 4 0 0 1996-03-30 - 46 0 1 1996-03-31 GOUNOT 3 0 0 1996-03-31 LEE 27 0 0 1996-03-31 LUCCHESSI 1 0 0 1996-03-31 - 31 0 1 1996-04-01 GOUNOT 14 0 0 1996-04-01 LEE 25 0 0 1996-04-01 LUCCHESSI 4 0 0 1996-04-01 - 43 0 1 - GOUNOT 50 1 0 - LEE 91 1 0 - LUCCHESSI 14 1 0 - - 155 1 1 SALES_DATE UNITS_SOLD DATE_GROUP ---------- ----------- ----------- 1995-12-31 8 0 1996-03-29 27 0 1996-03-30 46 0 1996-03-31 31 0 1996-04-01 43 0 - 155 1  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 14 0 - 155 1

23 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 ----------- ----------- --------------- ----------- 13 - GOUNOT 32 13 - LEE 33 13 - LUCCHESSI 8 - 6 GOUNOT 11 - 6 LEE 12 - 6 LUCCHESSI 4 - 7 GOUNOT 21 - 7 LEE 21 - 7 LUCCHESSI 4 WEEK SALES_PERSON UNITS_SOLD ----------- --------------- ----------- 13 - 73 - 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 ----------- --------------- ----------- 6 - 27 7 - 46 - GOUNOT 32 - LEE 33 - LUCCHESSI 8

24 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 의 표현식에 동일한 순서로 표현됩니다.

25 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) () ) 와 동일합니다.

26 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

27 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);

28 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

29 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 2006-04-08-12.57.51.170000 DEPT_GROUP2 DB2ADMIN S 2006-04-08-13.33.55.873001  User-Maintained Summary Table 생성 SET INTEGRITY FOR UMST_EMPLOYEE ALL IMMEDIATE UNCHECKED; REFRESH TABLE UMST_EMPLOYEE;  Check pending 상황 RESET “SET INTEGRITY” 명령을 수행한 후, table 에 데이터를 Load 를 위한 Insert 를 수행할 수 있습니다.

30 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 또는 99999999999999 로 변경 할 수 있습니다. 9999 년, 99 월, 99 일, 99 시, 99 분, 99 초 ). 0 은 REFRESH IMMEDIDATE 요약 table 만 참조 하라는 의미 입니다. 99999999999999 는 REFRESH DEFERRED 또는 REFRESH IMMEDIATE 요약 Table 을 참조하라는 의미입니다. 99999999999999 를 대신 해, 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

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


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

Similar presentations


Ads by Google