WEB开发网
开发学院数据库DB2 DB2 基础: 结构化数据类型和类型化表简介 阅读

DB2 基础: 结构化数据类型和类型化表简介

 2010-07-20 00:00:00 来源:WEB开发网   
核心提示: Salesperson_t 和 Engineer_t 是在 Emp_t 之下创建的子类型,Emp_t 是它们的超类型,DB2 基础: 结构化数据类型和类型化表简介(6),这些子类型的定义包括不属于 Emp_t 类型的其他属性,但那就是这些子类型与它们的超类型的不同之处;属性是超类型定义的一部分,

Salesperson_t 和 Engineer_t 是在 Emp_t 之下创建的子类型,Emp_t 是它们的超类型。这些子类型的定义包括不属于 Emp_t 类型的其他属性,但那就是这些子类型与它们的超类型的不同之处;属性是超类型定义的一部分,不过,也可以被其子类型所继承。

已经创建了所需的结构化类型,现在我们就可以创建基于这些类型(清单 3)的类型化表。小型表层次结构的超表称为 EMP。在富有想象力的创造中,我们命名了对象标识符列 OID,并指定它的值由用户生成。插入一个 OID 列的值之后,该值就无法再修改。INHERIT SELECT PRIVILEGES 子句指定,在超表上保留了SELECT 权限的用户或组都将获准在新表上拥有同等的权限。

我们现在准备把数据插入到 ENGINEER 和 SALESPERSON 表中。两个例子中 INSERT 语句的 VALUES 子句包括了对 address_t()的调用,像先前的例子一样,它为 address_t 结构化类型调用了构造函数,创建了一个所有属性值都为空的类型实例。双点运算符调用了 mutator 方法来设置每个地址属性的值。VALUES 子句还为用户指定的 OID 列的值包括了一个 casting 函数,因为该值必须强制转换成目标表的 REFERENCE 类型。默认情况下,casting 函数的名称和结构化类型的名称相同(在这里,这两个名称分别是 Engineer_t 和 Salesperson_t)。

针对层次结构中的三个表执行的查询表明,ENGINEER 和 SALESPERSON 子表已经继承了其超表(EMP)的列,其中包括对象标识符列(OID)。

清单 3. 类型化表层次结构,演示层次结构

connect to sample
 
... 
 
create type emp_t as (empno integer, lname varchar(12), fname varchar(12), 
deptno char(4), salary decimal(7,2), address address_t) ref using integer mode db2sql 
create type salesperson_t under emp_t as (commission decimal(7,2)) mode db2sql 
create type engineer_t under emp_t as (perf_bonus decimal(7,2), 
 recog_award decimal(7,2)) mode db2sql 
create table emp of emp_t (ref is oid user generated) 
create table salesperson of salesperson_t under emp inherit select privileges 
create table engineer of engineer_t under emp inherit select privileges 
insert into engineer (oid, empno, lname, fname, deptno, salary, 
 perf_bonus, recog_award, address) values (engineer_t(1), 42, 'Kidman', 'Jennifer', 
 'Z004', 65000.00, 4000.00, 2000.00, address_t() ..street('7 Dorval Rd') 
  ..city('Markham') ..province('Ontario') ..postal_code('L6G2R1')) 
insert into salesperson (oid, empno, lname, fname, deptno, salary, commission, address) 
 values (salesperson_t(2), 69, 'Theron', 'Maggie', 'C012', 49000.00, 15000.00, 
 address_t() ..street('7 River St') ..city('Ottawa') ..province('Ontario') 
  ..postal_code('K9G6R2')) 
select * from emp 
OID     EMPNO    LNAME    FNAME    DEPTNO SALARY  ADDRESS 
----------- ----------- ------------ ------------ ------ --------- -------------------- 
     1     42 Kidman    Jennifer   Z004  65000.00 7 Dorval Rd, Mark... 
     2     69 Theron    Maggie    C012  49000.00 7 River St, Ottaw... 
 2 record(s) selected. 
select oid, empno, lname, deptno, salary, perf_bonus, recog_award, address from engineer 
OID     EMPNO    LNAME    DEPTNO SALARY  PERF_BONUS RECOG_AWARD ADDRESS 
----------- ----------- ------------ ------ --------- ---------- ----------- ---------- 
     1     42 Kidman    Z004  65000.00  4000.00   2000.00 7 Dorva... 
 1 record(s) selected. 
select oid, empno, lname, deptno, salary, commission, address from salesperson 
OID     EMPNO    LNAME    DEPTNO SALARY  COMMISSION ADDRESS 
----------- ----------- ------------ ------ --------- ---------- ---------------------- 
     2     69 Theron    C012  49000.00  15000.00 7 River St, Ottawa,... 
 1 record(s) selected. 
connect reset 

结束语

我们已经看到,用户定义的结构化数据类型是表示结构化(非原子的)数据的一种有效方法,这些数据需要作为单独的数据元素或一个独立的单元进行处理,这主要取决于应用程序。这个话题很广泛,并且可能很复杂。本文向您介绍了结构化数据类型、类型层次结构和类型化表的基本概念,这些概念都通过实际例子得以阐明,您可以立刻使用和运行这些例子。

上一页  1 2 3 4 5 6 

Tags:DB 基础 结构化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接