510 likes | 650 Views
第六章 RDBMS 的扩展. 关系模型中概括与聚合的扩展 支持共享与递归的分子对象概念 关系查询语言 QUEL 的扩展及其支持 关系模型中的抽象数据类型 XSQL 语言的扩展 嵌套的关系模型 NF2. ※6.1 关系模型中概括与聚集的扩展. 例 1 :关于人的特化模型示例. Persons. maritalStatus. nationality. sex. Singles. Austrians. Females. …. Canadians. Married. Males. 关系扩展模型 —— 一般化的 m 维特化示例. R. S km.
E N D
第六章 RDBMS的扩展 • 关系模型中概括与聚合的扩展 • 支持共享与递归的分子对象概念 • 关系查询语言QUEL的扩展及其支持 • 关系模型中的抽象数据类型 • XSQL语言的扩展 • 嵌套的关系模型NF2
※6.1 关系模型中概括与聚集的扩展 • 例1:关于人的特化模型示例 Persons maritalStatus nationality sex Singles Austrians Females … Canadians Married Males
关系扩展模型 —— 一般化的m维特化示例 R Skm Sk1 …… R1p1 Rmpm R11 Rm1 …… ……
扩展的关系模型的一般语法 var R : generic sk1=(R11,…,R1p1); … skm=(Rm1,…,Rmpm); of aggregate keylist s1: key R1; … sn: key Rn; end
对该语法的说明 • 对generic关系R,具有n个属性,其中: -若是一般的类型,仅用类型符标识它 -若是一个聚集引用,即若引用一个generic关系类型,则需要加前缀“key”进行区分 • 对R可以特化,其m维的特化属性用sk1…skm表示 • 每一个特化属性ski将R的实例化对象划分成pi个不相交的集合,每一个集合为R的一个特化集
因此,若R有m维特化属性,则将R的实例集进行m种划分,每一种划分都可以获得R的Pi个特化集(Ri1,…,Ripi)因此,若R有m维特化属性,则将R的实例集进行m种划分,每一种划分都可以获得R的Pi个特化集(Ri1,…,Ripi) • M个特化属性sk1,…,skm属于R的属性集 s1,…,sn的子集。
正确定义一个generic的关系R需要如下规则: • R的n个属性中,每个属性的类型定义Ri(1≤i≤n)是以下两种类型: (1)是一个类型标识符(前缀key必须不出现),它表示了 Ri是一个原子值。 (2)是一个generic的标识符,则前缀key必须在定义中出现,它表示对其他对象的引用。 • Keylist——主关键属性表是{s1,…,sn}的子集
每一个特化类型Rij(1≤i≤m,1≤j≤Pi)都是一个generic标识符,其关键字域与R的相同,且其属性在定义时就要copy父类型除特化属性外的所有属性。每一个特化类型Rij(1≤i≤m,1≤j≤Pi)都是一个generic标识符,其关键字域与R的相同,且其属性在定义时就要copy父类型除特化属性外的所有属性。 • 特化属性Ski(1≤i≤m)都与R的某个属性Sj( 1≤j≤n)相同。 • 如果Ski与Sj相同,则Sj的类型—Rj的值域是(Ri1,…,Ripi)。
一个应用实例 — 基于扩展关系模型的CSG表示 • 参看P31页CSG的形式化表示: <mechanical part> ::= <object> <object> ::= <primitive>| <object> <motion op> <motion arguments>| <object> <set operator> <object> <primitive> ::= cube | cylinder | cone | … <motion op> ::= rotate | scale | translate | … <set operator> ::= union | intersection |difference |…
由此看出,一个object 有三种类型: 1. Prim_obj (原始对象) 2. Mot_obj (运动对象) 3. Comp_obj (组合对象) 如下图:
扩展CSG实例化关系模型 ID Mech_obj MAN LEFT_ARG RIGHT_ARG ARG_OBJ TYPE Comp_obj Prim_obj Mot_obj OP_CODE PRICE MAT T PTYPE LENGTH WIDTH cylinder … cuboid HEIGHT
CSG的关系模型表示 (1) var mech_obj: generic (2) TYPE = (prim_obj, mot_obj, comp_obj); (3) of (4) aggregate [ID] (5) ID : identifier; (6) MAN: manufacturer; (7) TYPE: structural_comp (8) end
Mech_obj的三个特化子类型说明 var prim_obj:generic prim_obj 是mech_obj的 PTYPE =(cylinder,…,cuboid); 特化,而本身通过特化控制 of 属性PTYPE进一步被特化 aggregate[ID] 为原始对象集合 ID:identifier; 这两个属性是父类属性, MAN:manufacturer; 除控制特化的TYPE属性 MAT:material; 外的全部属性的复制,以 PRICE:money; 此实现继承的概念 PTYPE:geom_form; end
var cuboid cuboid不是generic类型, aggregate [ID] 它没有进一步特化(没有子类) ID:identifier; MAN:manufacturer; 这四个属性继承父类 MAT:material; 而来 PRICE:money; LENGTH:real; 这三个属性是cuboid WIDTH:real; 自身的进一步描述 HEIGHT:real; end
var mot_obj mot_obj也不是generic类型 aggregate [ID] ID:identifier; MAN:manufacturer; ARG_OBJ: key mech_obj; 该属性表达了对一 个对象的引用 T : matrix; end
var comp_obj aggregate [ID] ID:identifier; MAN:manufacturer; LEFT_ARG_OBJ:key mech_obj; RIGHT_ARG_OBJ: key mech_obj; OP_CODE :( union,difference,intersection,…) end
对该模型的总结与讨论 特点:1.扩展了对概括抽象和聚集抽象的支 持,方法简单,易理解。 2.通过复制方案实现继承。 问题:1.由于复制造成大量冗余,效率低下。 2.没有面向对象行为,即不允许具体 的行为操作。 3.基本对象的语义结构仍然不易表达。 4.为保证一致性,在更新操作时需要进行持 续的信息复制,开销较大。
※6.2分子对象— 对generic类型的进一步扩展 • 分子对象(Molecular Object)的概念 — 分子对象由分子集合组成 — 分子集合将一系列实例(可以是不同类型) 和它们的关系,聚集对象为较高层次的 实体
分子对象的结构分类: — 不相交/非递归; — 相交/非递归; — 不相交/递归; — 相交/ 递归; 相交:指一个分子对象的组成部分 是否能被其他同类型分子对象共享。 递归/非递归:分子对象的结构是否 是递归定义的。
四种类型分子的进一步说明 • 不相交/非递归 ——是最简单的结构 — 分子集合内的所有分子之间均是两个不 相交的、结构不重叠的,因之也不是递 归定义的。 例如:原始对象集合。
相交/非递归的分子对象 — 分子间存在共享对象成份,即两个分子 可能在一些抵赖的分子对象上重叠。 例如:具有同一平台的两个几何体
不相交/递归 — 具有递归定义的不共享的分子结构, 例:几何对象的CSG表示是一个递归分子 对象的典型例子,它构成一颗二叉树。参照图3.2(支架表示)
递归/相交 — 如果允许CSG中的几何部件被共享,则 它是一个有向无环图DAG
CSG1 CSG2
6.3 将QUEL表达式作为类型的关系模型的扩展 • QUEL:—由伯克利分校研制的Ingres查询语言 —类似于元组关系演算 • QUEL的组成:由三个子句组合而成 —range of子句:类似于from子句,作用为声 明元组变量的取值范围,书写格式为 range of t is r(t为关系r的一个元组变量) —retrieve子句:类似于select子句,作用为确 定查询目标,其变量必须已经在range 子句中声明,retrive t.A 查询t的A属性值 —where P子句:条件子句,P为选择谓词 *请参考“数据库系统概念”第五章
M N boundary mech-part faces 一般化引用基制的模型构造 • 纯关系结构示例: E-R: • 关系表
QUEL查询语句序列 • range of m is mechanical_part range of f is faces range of b is boundary retrive m.all,f.all where m.ID = “cube#1” and m.ID = b.GEO_ID and f.ID = b.FACE_ID • range of m is mechanical_part retrive m.all, m.FACE_JOIN where m.ID = “cube#1” • range of f is faces retrive f.GEO_JOIN where f.ID= “f1”
关系模型的扩展 • 关系属性类型中扩展一个新类型—QUEL类型 • QUEL类型为一个QUEL查询表达式,它可以在被引用是触发执行 • 使用QUEL类型代替外键联接关系,例如上图boundary,从而将原来显示的联接隐含在父关系的某个属性中,只有在动态联接时才被激活
相应的QUEL查询语句 • 利用mech-part的FACE-JOIN和faces中的GEO-JOIN属性代码为: range of m is mech-part retrieve m.all,m.FACE-JOIN where m.ID = “cube#1” range of f is faces retrieve f.GEO-JOIN where f.ID=“f1”
进一步的扩展 • range of m is mech-part retrive m.FACE-JOIN.SURFACE where m.ID = “cube#1” • 利用QUEL类型和操作符”.”的重载,可以在构造一个复杂的引用链时,通过简化显式联接的方法简化查询和关系表的构建
安全性的缺陷 • 由于采用隐式的联接方法(通过QUEL函数),使得查询结果只有在运行时进行动态联接时才能确定,因而容易产生类型安全性错误 • 例如:
安全性的缺陷(续) • 程序 range of m is mechanical_part retrivesum(m.FACE-JOIN.SURFACE) where m.ID = “cube#1” range of m is mechanical_part retrivesum(m.FACE_JOIN.SURFACE) where m.ID = “cube#3”
6.4 关系模型中的抽象数据类型 • 概念:该模型发展得最好的是INGRES,他们在开始研制时已留有与C的接口——ADT-INGRES, 并进一步发展为POSTGRES。
抽象数据类型的建模过程 • 在关系建模时,可以将某些属性显式地说明为一个抽象数据类型ADT • 例: cuboids ( id: integer, material: char(10), description: char(20), V1: ADT: vertex_type, V2: ADT: vertex_type, … V8: ADT: vertex_type)
抽象数据类型的建模过程(续) • 用户在系统提供的环境上,定义一个ADT的接口说明 • 例:define ADT (typename = “vertex_type”, bytesin = 9, bytesout = 9, inputfunc = “to_internal_vertex”, outputfunc = “to_external_vertex”, filename = “/usr/ingres/…/vertex”) X Y Z to_external_vertex to_internal_vertex “X%%Y%%Z”
抽象数据类型的建模过程(续) • 用户需要用C(informix也允许用java)语言实现ADT的结构读写程序,并存放在按接口说明的路径所示位置 • 在数据库运行时,需有用户需要检索ADT的值,则系统自动进行动态联接,激活并运行相应的函数
例:执行一个查询 range of c is cuboids retrieve (c.material, c.description,c.V1) where c.id = 5 • 结果为:
用同样的方法,可以定义并实现在ADT域上的各种用户自定义操作用同样的方法,可以定义并实现在ADT域上的各种用户自定义操作 • informix中使用UDR工具实现 • 例: define adtop (opname = “Ry”, funcname = “rotate_abount_y”, filename = “/usr/ingres/../rotate_y”, result = ADT: vertex_type, arg1 = ADT: vertex_type, arg2 = ADT: angle_type, prec like “+”)
6.5 XSQL支持的层次扩展模型 • XSQL是Kifer在1992中提出的一个SQL的面向对象的扩展模型 • SQL-3标准已包括了SQL面向对象的扩展 • XSQL支持的层次扩展主要针对复合对象模型,其扩展的主要是聚合抽象的实现方法
基于纯关系模型的XSQL的基本构成 • 代用 Surrogates:由系统产生并维护的关系元组对象实例的逻辑标识符 • 特点 • 唯一性 • 系统内部产生,用户不能干涉 • 不可修改,在一个对象的生命周期中保持不变 • 代用产生的标识符应当保证在“世界范围” 内的唯一性,以保证基于广域网的分布式DB中每个元组的唯一性 生成方法: processor ID date & time
componet of R1 E1 E2 • component –of 属性——XSQL利用该属性建立元组间的引用关联。 关联的语义为part-of 特点:component-of属性支持元组间的1:1和1:N的联接 • E-R表示: • 关系表的定义 create table E1(E1-ID:identifier, E1_DATA:…) create table E2(E2-ID:identifier, E2_FATHER:component of (E1), E2_DATA:…) • component of 的值是与E2的一个元组e2具有R1联系的E1的元组e1的ID值 1 N
E1 (0,*) (0,*) 1 1 R2 R1 (1,1) N N (1,1) E2 E3 1 (0,*) R3 (1,1) N E4 • 多层次的引用结构 create table E1(E1-ID:identifier, E1_DATA:…) create table E2(E2-ID:identifier, E2_FATHER:component of (E1), E2_DATA:…)
代用标识符的组成含有元组对象间的依赖关系,即对属于同一个复合对象的元组,其ID值具有相同的前缀代用标识符的组成含有元组对象间的依赖关系,即对属于同一个复合对象的元组,其ID值具有相同的前缀 • 系统对每一个复合对象建立一个map的映射,含有指向该元组的存储位置指针TIDs
元组间N:M联系的扩展方法 • 原理:由于XSQL是在纯关系上进行的扩展,因此,不可能表示集合属性,解决N:M关联的方法只能采用第三方关系——专门定义一个引用关系表R,将两个有联系的元组对应起来 • reference属性,它建立了一个引用关联
N M R1 E1 E2 一般的N:M联系的关系表定义 • E-R表示: • 关系表定义: create table E1(E1-ID:identifier, E1_DATA:…) create table E1(E2-ID:identifier, E2_DATA:…) create table R(R-ID:identifier, RtoE1: reference(E1), RtoE2: reference(E2))
XSQL模型的评价 创新点: • 元组的逻辑标识符概念的引入 • 在关系模型的基础上建立了关系间的层次结构 • 解决了数据类型的QUEL的安全隐患 局限性: • component-of属性可以较好支持1:N联系,但是在共享低层对象时,由于关系不能表示集合,会造成大量的冗余,即一个引用就需产生一个对象元组,由此造成查询的复杂低效,和一致性更新维护困难