《关联对象访问 》PPT课件.ppt
《《关联对象访问 》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《关联对象访问 》PPT课件.ppt(53页珍藏版)》请在三一办公上搜索。
1、第十四章 关联对象访问Associative Object Access,本章重点讲述GOM对关联对象查询的支持,即如何实现一个查询和如何描述用户的查询要求在O-O DBMS中,实现一个查询是通过多态的Select函数来实现的GOM支持二种查询语言GOMql、GOMsql其中GOMql是基于关系语言QUEL在面向对象上的扩展GOMsql是SQL在面向对象上的扩展关联查询的操作对象为:类型范围(Type Extention),用户定义的集合对象和表对象,多态的关联选择操作定义及其实现,关联选择操作需要一个操作对象说明在某个对象实例集合上,需要一个条件表达式作为选择的依据选择谓词当定义一个多态的选
2、择操作时,选择谓词将以函数变元的方式作为操作变元当选择谓词本身需要参数时,该参数必须在选择操作的参数表中说明多态的选择操作的共同名字为Select,无参数的选择谓词简单的布尔函数,多态选择操作说明为Polymorph overload select(t1 bool)-t1 Code selectNoParam语义为类型t1,是一个集合类型,其元素类型为t2Select操作有两个变元:接受者类型为t1,另一个变元是一个布尔函数,它对类型为t2的对象进行选择,返回一个布尔型结果Select语义对t1的元素用布尔函数进行筛选;,多态选择操作的实现,define selectNoParam(selPr
3、ed)is var result:t1;candidate:t2;begin result.create;!生成空结果集 foreach(candidate in self)if candidate.selPred then result.insert(candidate);return result;end define selectNoParam,应用举例,在立方体实例库中,查找某一个顶点是原点的立方体分析:其选择谓词需要顺次检查一个立方体的8个点,是否有一个点的x、y、z坐标值为0,0 inOrigin 操作其结果应当是下面二个集合的交集:包含在立方体实例集合中的实例myCuboid所引
4、用满足谓词inOrigin 的实例多态的Select操作可以应用于任何一个集合类型,inOrigin定义declare inOrigin:Cuboid|bool;define inOrigin is!判断任何一个顶点是否处于坐标原点 return(self.v1.x=0.0 and self.v1.y=0.0 and self.v1.z=0.0)OR(self.v8.x=0.0 and self.v8.y=0.0 and self.v8.z=0.0);变量定义和引用var myCuboids,theCuboidsInOrigin:CuboidSet;theCuboidsInOrigin:=my
5、Cuboids.select(inOrigin);,示例2查询退休职员,declare isRetired:Employee|bool;var retiredEmps:EmployeeSet;retiredEmps:=ext(Employee).select(isRetired);,示例3无名的选择谓词的使用,当布尔选择谓词比较简单,则可以 符号来实现操作过程的传递示例:选择红色苹果的选择操作.选择谓词用命名isRed表达declare isRed:Apple|bool;define isRed is.选择谓词用表达直接传递过程redApples:=myApples.select(x:x.co
6、lor=“red”)GoldCuboid=mycuboid.select(x:=“gold”),带参数的选择谓词,该参数是为选择谓词服务的,所以需要在谓词函数中说明由于在引用时,显然需要由Select来引用,因此,在Select的参数表中也要说明,规则如下:poly overload select(t1 bool),t3-t1语义:其中类型t3可以是任何类型,它的约束条件是Select的第三个参数类型t3,必须与选择谓词所需一个参数类型一致,Select的重载,Select函数不但是多态的,而且是重载的,它可以根据选择谓词的需要,设定多个参数编译器根据重载规则,从参数的个数,寻找到正确的实现版
7、本其约束条件为:在哑、实结合时,Select的参数个数和各自类型必须与选择谓词的参数个数、类型完全一致,示例1一个参数的选择谓词,对Cuboid定义一个选择谓词bigCuboid,它能选择体积大于某个阈值的立方体对象定义declare bigCuboid:Cuboid|float-boolcode bigCuboidCode;define bigCuboidCode(threshold)isreturn(self.volume threshold);引用 var myCuboids,myBigCuboids:CuboidSet;myBigCuboids:=myCuboids.select(bi
8、gCuboid,200.0);,示例2二个参数的选择谓词,选择体积在一个范围(上限high,下限为low)的立方体declare volumeRange:Cuboid|float,float-bool;define volumeRange(low,high)isreturn(self.volume=low);,迭代Iterators,可以在筛选的基础上利用循环进行各种进一步的操作例如:求符合体积要求的Cylinders的体积累加值declare bigCyl:Cylinder|float-boolcode bigCylCode;define bigCylCode(threshold)retur
9、n(self.volume=threshold);var c:Cylinder;myCylinders:CylinderSet;bigCylindersTotalWeight:float:=0.0;foreach(c in myCylinders.select(bigCyl,20.0)bigCylindersTotalWeight:=bigCylindersTotalWeight+c.weight;,说明性查询语言GOMql,多态选择函数只是一个关联查询实现的基础,对于复杂的嵌套查询及其优化,表达力度不够,需要通过定义相关的查询语言来实现查询优化有两个方面解决关系代数的优化:编译时进行物理查询
10、路径的优化:执行时进行下面的内容从用户角度出发,如何查询需求正确地用相应的查询语言序列来表达GOMql是基于QUEL的扩展,一个对象实例库,类型定义,Type Emp is name:string;working:Dept;salary:int;type Dept is name:string;mgr:Manager;profit:int;,Type Manager Supertype Emp is cars:Car;type Car is license:string;make:string;horsepower:int;,路径表达式为查找引用链的引用序列示例:示例的类型定义中,关联对象的联
11、接,仅仅采用一个进入点的方式,GOMql表达式,单目标查询表达式rang r1:s1,rm:smretrieve riwhere p(r1,rm)多目标查询表达式rang r1:s1,rm:smretrieve a1:r1,aj:rjwhere p(r1,rm)Range子句:范围说明子句其中:rj(1jm)为范围变量表达式,它用于range子句中,其中,sj(1jm)必须是下列情况之一Sj是一个类型扩展EXT(用类型名表达)一个集合对象变量一个列表对象变量一个包含有集合结构的对象变量一个包含有表结构的对象变量一个计算一个集合结构对象的表达式一个计算一个表结构对象的表达式总之,变量rj被约束到
12、一个相应的聚集类型sj的元素类型,retrieve子句 查询说明子句简单形式:只有一个范围变量单目标查询复杂形式:通过投影到多个范围变量,构造的多元组多目标查询实现方法:对目标的范围变量与相应的对象分别进行捆绑,并进行选择谓词查询Where子句:选择谓词中,P的变元(r1rm)(s1xs2xsm)(m个联接)当目标rj(或者多目标r1rj)与某一对象捆绑,使P(r1rj)为真,则该对象被选中,GOMql查询示例(一),简单选择谓词示例查询所有工资超过100000的Empsrange e:Empretrieve ewhere e.salary100000.0查询结果为id3,id4,id8,id
13、9,id10 上述查询需要输出姓名,则为:range e:Empretrieve e.namewhere e.salary100000.0,name,“LeMond”“Hinault”“Boss”,GOMql查询示例(二),问题:找出其经理为驾驶Jaguar汽车的Emps该查询的路径表达式为:p=“Jaguar”查询表达式为:range e:Empretrieve ewhere“Jaguar”in,系统检测范围变量e的每个捆绑的对象,通过路径可以达到的串值是否为给定的“Jaguar”,若是,则该对象被选中该选择查询代价巨大,它需要进行如下多个联接:Emp x Dept x Manager x
14、Car选择结果为id1,id2,id8,更复杂的查询(一),例3:找出选择的经理:他的部门亏损,但仍支付给至少一个雇员工资超过二十万元range e:Emp,m:Managerretrieve mwhere m=ande.salary200000.0 and0.0这里,m=称为功能联接(对象的“相等”操作子隐含地表示为“标识”),例3的优化处理如果在Dept类型中增加一个关联属性Emp,则例3可以表示为:range d:Dept,m:Managerretrieve mwhere m=d.mgr and d.profit200000.0,更复杂的查询(二),例4:查找这样的经理:他驾驶过贵重的汽
15、车,而他管理的部门获利很低range d:Dept,m:Manager,c:Carretrieve mwhere m=d.mgr and d.profit150 or c.make=“Jaguar”),量词的使用(一),(一)全称量词表达式for all rj in sj p语义为:若集合sj中所有成员rj均满足选择谓词p(rj),则表达式为真,否则为假示例:查询其经理只开宝马车的雇员range e:Emps,c:Charretrieve ewhere forall c in(c.make=”BMW”),量词的使用(二),(二)存在量词表达式 EXIST rj IN sj P(rj)语义为:若
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关联对象访问 关联对象访问 PPT课件 关联 对象 访问 PPT 课件
链接地址:https://www.31ppt.com/p-5467774.html