关联对象访问ppt课件

上传人:痛*** 文档编号:144585249 上传时间:2022-08-27 格式:PPT 页数:53 大小:240.50KB
收藏 版权申诉 举报 下载
关联对象访问ppt课件_第1页
第1页 / 共53页
关联对象访问ppt课件_第2页
第2页 / 共53页
关联对象访问ppt课件_第3页
第3页 / 共53页
资源描述:

《关联对象访问ppt课件》由会员分享,可在线阅读,更多相关《关联对象访问ppt课件(53页珍藏版)》请在装配图网上搜索。

1、第十四章第十四章 关联对象访问关联对象访问Associative Object Access 本章重点讲述本章重点讲述GOM对关联对象查询的支持,即如对关联对象查询的支持,即如何实现一个查询和如何描画用户的查询要求何实现一个查询和如何描画用户的查询要求 在在O-O DBMS中,实现一个查询是经过多态的中,实现一个查询是经过多态的Select函数来实现的函数来实现的 GOM支持二种查询言语支持二种查询言语GOMql、GOMsql 其中其中GOMql是基于关系言语是基于关系言语QUEL在面向对象上在面向对象上的扩展的扩展 GOMsql是是SQL在面向对象上的扩展在面向对象上的扩展 关联查询的操作对

2、象为:类型范围关联查询的操作对象为:类型范围(Type Extention),用户定义的集合对象和表对象,用户定义的集合对象和表对象多态的关联选择操作定义及其实现多态的关联选择操作定义及其实现 关联选择操作需求一个操作对象阐明关联选择操作需求一个操作对象阐明在在某个对象实例集合上,需求一个条件表达某个对象实例集合上,需求一个条件表达式作为选择的根据式作为选择的根据选择谓词选择谓词 当定义一个多态的选择操作时,选择谓词当定义一个多态的选择操作时,选择谓词将以函数变元的方式作为操作变元将以函数变元的方式作为操作变元 中选择谓词本身需求参数时,该参数必需中选择谓词本身需求参数时,该参数必需在选择操作

3、的参数表中阐明在选择操作的参数表中阐明 多态的选择操作的共同名字为多态的选择操作的共同名字为Select无参数的选择谓词无参数的选择谓词简单的布尔函数简单的布尔函数 多态选择操作阐明为多态选择操作阐明为Polymorph overload select(t1 bool)-t1 Code selectNoParam 语义为语义为 类型类型t1,是一个集合类型,其元素类型为,是一个集合类型,其元素类型为t2 Select操作有两个变元:接受者类型为操作有两个变元:接受者类型为t1,另一个变元是一个布尔函数,它对类型为另一个变元是一个布尔函数,它对类型为t2的对象进展选择,前往一个布尔型结果的对象进

4、展选择,前往一个布尔型结果 Select语义对语义对t1的元素用布尔函数进展挑选;的元素用布尔函数进展挑选;多态选择操作的实现多态选择操作的实现 define selectNoParam(selPred)is var result:t1;candidate:t2;begin result.create;!生成空结果集生成空结果集 foreach(candidate in self)i f c a n d i d a t e.s e l P r e d t h e n result.insert(candidate);return result;end define selectNoParam运

5、用举例运用举例 在立方体实例库中,查找某一个顶点是原点的立在立方体实例库中,查找某一个顶点是原点的立方体方体 分析:其选择谓词需求依次检查一个立方体的分析:其选择谓词需求依次检查一个立方体的8个点,能否有一个点的个点,能否有一个点的x、y、z坐标值为坐标值为0,0 inOrigin 操作操作 其结果该当是下面二个集合的交集:其结果该当是下面二个集合的交集:包含在立方体实例集合中的实例包含在立方体实例集合中的实例myCuboid所援用所援用 满足谓词满足谓词inOrigin 的实例的实例 多态的多态的Select操作可以运用于任何一个集合类型操作可以运用于任何一个集合类型 inOrigin定义定

6、义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:=myCuboids.select(inOrigin);例如

7、例如2查询退休职员查询退休职员declare isRetired:Employee|bool;var retiredEmps:EmployeeSet;retiredEmps:=ext(Employee).select(isRetired);例如例如3无名的选择谓词的运用无名的选择谓词的运用 当布尔选择谓词比较简单,那么可以当布尔选择谓词比较简单,那么可以 符号来实符号来实现操作过程的传送现操作过程的传送 例如:选择红色苹果的选择操作例如:选择红色苹果的选择操作.选择谓词用命名选择谓词用命名isRed表达表达declare isRed:Apple|bool;define isRed is .选择

8、谓词用选择谓词用表达表达直接传送过程直接传送过程redApples:=myApples.select(x:x.color=“red)GoldCuboid=mycuboid.select(x:x.met.name=“gold)带参数的选择谓词带参数的选择谓词 该参数是为选择谓词效力的,所以需求在该参数是为选择谓词效力的,所以需求在谓词函数中阐明谓词函数中阐明 由于在援用时,显然需求由由于在援用时,显然需求由Select来援用,来援用,因此,在因此,在Select的参数表中也要阐明,规的参数表中也要阐明,规那么如下:那么如下:poly overload select(t1 bool),t3-t1

9、语义:其中类型语义:其中类型t3可以是任何类型,它的可以是任何类型,它的约束条件是约束条件是Select的第三个参数类型的第三个参数类型t3,必需与选择谓词所需一个参数类型一致必需与选择谓词所需一个参数类型一致Select的重载的重载 Select函数不但是多态的,而且是重载的,函数不但是多态的,而且是重载的,它可以根据选择谓词的需求,设定多个参它可以根据选择谓词的需求,设定多个参数数 编译器根据重载规那么,从参数的个数,编译器根据重载规那么,从参数的个数,寻觅到正确的实现版本寻觅到正确的实现版本 其约束条件为:在哑、实结合时,其约束条件为:在哑、实结合时,Select的参数个数和各自类型必需

10、与选择谓词的的参数个数和各自类型必需与选择谓词的参数个数、类型完全一致参数个数、类型完全一致例如例如1一个参数的选择谓词一个参数的选择谓词 对对Cuboid定义一个选择谓词定义一个选择谓词bigCuboid,它能选择体积大于某个阈值的立方体对象它能选择体积大于某个阈值的立方体对象 定义定义declare bigCuboid:Cuboid|float-boolcode bigCuboidCode;define bigCuboidCode(threshold)isreturn(self.volume threshold);援用援用 var myCuboids,myBigCuboids:Cuboid

11、Set;myBigCuboids:=myCuboids.select(bigCuboid,200.0);例如例如2二个参数的选择谓词二个参数的选择谓词 选择体积在一个范围选择体积在一个范围(上限上限high,下限为,下限为low)的立方体的立方体declare volumeRange:Cuboid|float,float-bool;define volumeRange(low,high)isreturn(self.volume=low);迭代迭代Iterators 可以在挑选的根底上利用循环进展各种进一步的可以在挑选的根底上利用循环进展各种进一步的操作操作 例如:求符合体积要求的例如:求符合体

12、积要求的Cylinders的体积累加值的体积累加值declare bigCyl:Cylinder|float-boolcode bigCylCode;define bigCylCode(threshold)return(self.volume=threshold);var c:Cylinder;myCylinders:CylinderSet;bigCylindersTotalWeight:float:=0.0;foreach(c in myCylinders.select(bigCyl,20.0)bigCylindersTotalWeight:=bigCylindersTotalWeight+

13、c.weight;阐明性查询言语阐明性查询言语GOMql 多态选择函数只是一个关联查询实现的根底,对多态选择函数只是一个关联查询实现的根底,对于复杂的嵌套查询及其优化,表达力度不够,需于复杂的嵌套查询及其优化,表达力度不够,需求经过定义相关的查询言语来实现求经过定义相关的查询言语来实现 查询优化有两个方面处理查询优化有两个方面处理 关系代数的优化:编译时进展关系代数的优化:编译时进展 物理查询途径的优化:执行时进展物理查询途径的优化:执行时进展 下面的内容从用户角度出发,如何查询需求正确下面的内容从用户角度出发,如何查询需求正确地用相应的查询言语序列来表达地用相应的查询言语序列来表达 GOMq

14、l是基于是基于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;途径表达式为查找援用链的援用序列途径表达式为查找援用链的援用序列例如:例如:Emp.worksIn.mgr.cars.make 例如的类型定义

15、中,关联对象的联接,仅例如的类型定义中,关联对象的联接,仅仅采用一个进入点的方式仅采用一个进入点的方式worksIn-mgr-cars-make-Emp Dept Manager Car stringEMPworkInDeptN1DeptmgrManager11ManagercarsCarNMGOMql表达式表达式 单目的查询表达式单目的查询表达式rang r1:s1,rm:smretrieve riwhere p(r1,rm)多目的查询表达式多目的查询表达式rang r1:s1,rm:smretrieve a1:r1,aj:rjwhere p(r1,rm)Range子句:范围阐明子句子句:范

16、围阐明子句其中:其中:rj1jm为范围变量表达式,为范围变量表达式,它用于它用于range子句中子句中其中,其中,sj1jm必需是以下情况之一必需是以下情况之一Sj是一个类型扩展是一个类型扩展EXT(用类型名表达用类型名表达)一个集合对象变量一个集合对象变量一个列表对象变量一个列表对象变量一个包含有集合构造的对象变量一个包含有集合构造的对象变量一个包含有表构造的对象变量一个包含有表构造的对象变量一个计算一个集合构造对象的表达式一个计算一个集合构造对象的表达式一个计算一个表构造对象的表达式一个计算一个表构造对象的表达式总之,变量总之,变量rj被约束到一个相应的聚集类型被约束到一个相应的聚集类型s

17、j的元素类型的元素类型 retrieve子句子句 查询阐明子句查询阐明子句 简单方式:只需一个范围变量简单方式:只需一个范围变量单目的单目的查询查询 复杂方式:经过投影到多个范围变量,构复杂方式:经过投影到多个范围变量,构造的多元组造的多元组多目的查询多目的查询 实现方法:对目的的范围变量与相应的对实现方法:对目的的范围变量与相应的对象分别进展捆绑,并进展选择谓词查询象分别进展捆绑,并进展选择谓词查询 Where子句:选择谓词中,子句:选择谓词中,P的变元的变元(r1rm)(s1xs2xsm)(m个联接个联接)当目的当目的rj(或者多目的或者多目的r1rj)与某一对象与某一对象捆绑,使捆绑,使

18、P(r1rj)为真,那么该对象被选为真,那么该对象被选中中GOMql查询例如查询例如(一一)简单项选择择谓词例如简单项选择择谓词例如查询一切工资超越查询一切工资超越100000的的Empsrange e:Empretrieve ewhere e.salary100000.0查询结果为查询结果为id3,id4,id8,id9,id10 上述查询需求输出姓名,那么为:上述查询需求输出姓名,那么为:range e:Emp retrieve e.name where e.salary100000.0name“LeMond“Hinault“BossGOMql查询例如查询例如(二二)问题:找出其经理为驾驶

19、问题:找出其经理为驾驶Jaguar汽车的汽车的Emps 该查询的途径表达式为:该查询的途径表达式为:p=Emp.workIn.mgr.cars.make =“Jaguar 查询表达式为:查询表达式为:range e:Empretrieve ewhere “Jaguar in e.worksIn.mgr.cars.make 系统检测范围变量系统检测范围变量e的每个捆绑的对象,经的每个捆绑的对象,经过途径可以到达的串值能否为给定的过途径可以到达的串值能否为给定的“Jaguar,假设是,那么该对象被选中,假设是,那么该对象被选中 该选择查询代价宏大,它需求进展如下多该选择查询代价宏大,它需求进展如下

20、多个联接:个联接:Emp x Dept x Manager x Car 选择结果为选择结果为id1,id2,id8 更复杂的查询更复杂的查询(一一)例例3:找出选择的经理:他的部门亏损,但仍支付:找出选择的经理:他的部门亏损,但仍支付给至少一个雇员工资超越二十万元给至少一个雇员工资超越二十万元range e:Emp,m:Managerretrieve mwhere m=e.workIn.mgr ande.salary200000.0 ande.workIn.profit0.0 这里,这里,m=e.worksIn.mgr称为功能联接称为功能联接(对象的对象的“相相等操作子隐含地表示为等操作子隐含

21、地表示为“标识标识)例例3的优化处置的优化处置 假设在假设在Dept类型中添加一个关联属性类型中添加一个关联属性Emp,那么例,那么例3可以表示为:可以表示为:range d:Dept,m:Managerretrieve mwhere m=d.mgr and d.profit200000.0更复杂的查询更复杂的查询(二二)例例4:查找这样的经理:他驾驶过贵重的汽车,:查找这样的经理:他驾驶过贵重的汽车,而他管理的部门获利很低而他管理的部门获利很低range d:Dept,m:Manager,c:Carretrieve mwhere m=d.mgr and d.profit150 or c.ma

22、ke=“Jaguar)量词的运用一量词的运用一(一一)全称量词表达式全称量词表达式for all rj in sj p 语义为:假设集合语义为:假设集合sj中一切成员中一切成员rj均满足选择谓词均满足选择谓词p(rj),那么表达式为真,否那么为假,那么表达式为真,否那么为假 例如:查询其经理只开宝马车的雇员例如:查询其经理只开宝马车的雇员 range e:Emps,c:Charretrieve ewhere forall c in e.worksIn.mgr.cars(c.make=BMW)量词的运用二量词的运用二(二二)存在量词表达式存在量词表达式 EXIST rj IN sj P(rj)语

23、义为:假设在集合语义为:假设在集合S中至少有一个成员中至少有一个成员rj满足满足P(rj),那么表达式为真那么表达式为真,否那么为假否那么为假 例如:查询其经理所用额轿车中有一辆为美洲虎例如:查询其经理所用额轿车中有一辆为美洲虎的雇员的雇员 range e:Emps,c:Carretrieve ewhere exists c in e.worksIn.mgr.cars(c.make=Jaguar)嵌套查询嵌套查询 在任何一个集合可以出现的地方,都可以在任何一个集合可以出现的地方,都可以运用运用range-retrive-where表达式,因此,表达式,因此,Gomql允许表达式嵌套允许表达式嵌

24、套 表达式嵌套可以发生在三个子句的任何一表达式嵌套可以发生在三个子句的任何一个中,由于三个子句本身均要求一个集合个中,由于三个子句本身均要求一个集合表达式表达式 例如:查询那些只驾驶美洲虎牌或宝马牌,例如:查询那些只驾驶美洲虎牌或宝马牌,或马力或马力200的汽车经理的汽车经理range m:Manager,c:Carretrieve mwhere forall c in m.cars(c in (range v:Carretrieve vwhere v.horsePower200 or v.make=Jaguar or v.make=BMW)查询表达式中聚集函数和查询表达式中聚集函数和类型操作

25、的运用类型操作的运用 关系查询言语关系查询言语QUEL仅提供少量的聚集函数如仅提供少量的聚集函数如count,sum,min,max,avg等等 Gomql允许类型操作作为函数运用。其约束条件允许类型操作作为函数运用。其约束条件为:类型操作不会改动对象的形状,且该当前往为:类型操作不会改动对象的形状,且该当前往一个值一个值 函数的范围:在函数的范围:在where子句和子句和retrieve子句中都可子句中都可以运用以运用 由于类型操作含有子类型的承继,因此,在执行由于类型操作含有子类型的承继,因此,在执行时,每个对象实例依然需求动态捆绑相应精化的时,每个对象实例依然需求动态捆绑相应精化的操作操

26、作例如例如 例如例如1:查许体积大于:查许体积大于150.0的圆柱体的圆柱体 range c:Cylinderretrieve cwhere c.volume150.0 例如例如2:查询一切金子做的几何体的总分量:查询一切金子做的几何体的总分量 range g:GeometricPrimitiveretrieve sum(g.weight)where g.mat.name=Gold基于基于SQL的对象查询言语的对象查询言语GOMsql GOMsql是是O2SQL的一个子集,它是针对的一个子集,它是针对Gom的的ODL设设计的查询言语计的查询言语 GOMsql的目的是向用户以供基于的目的是向用户

27、以供基于SQL的声明和面向集合的声明和面向集合的查询接口的查询接口 面向对象的基于面向对象的基于SQL的查询言语强调的是对象类型,而对的查询言语强调的是对象类型,而对象关系的象关系的SQL扩展扩展SQL-99强调的依然是关系,即强调的依然是关系,即如何经过关系模型的扩展将对象和类引入如何经过关系模型的扩展将对象和类引入 其他的面向对象的查询言语其他的面向对象的查询言语-OQL。它是针对。它是针对ODL设计的设计的查询言语,而查询言语,而ODL是是IDL(接口描画言语接口描画言语-CORBA的一的一个组件的扩展。个组件的扩展。*CORBA是分布式面向对象的计算的一种规范是分布式面向对象的计算的一

28、种规范例如数据库边境标识的几何体数据库type BRep with extension isbodyname:string;weight:float;faces:FaceSet;end type BRep;type FaceSet is bodyFaceend type FaceSet;type EdgeSet isbodyEdgeend type EdgeSet;查找援用链type Face is bodysurface:float;edegs:EdgeSet;end type Face;type VertexSet is body Vertexend type VertexSet;type

29、 Edge is body length:float;vertices:VertexSet;end type Edge;type Vertex is bodyx,y,z:float;end type Vertex;GOMsql的根本查询构造的根本查询构造 GOMsql的根本构造为:的根本构造为:select-from-where-记记为为SFW表达式表达式 例如例如 selectb.weightfrom binBRepwhereb.name=“cubo#5 在在Select子句中,可以引入类型操作函数子句中,可以引入类型操作函数 在在from子句中,给出了一个显式定义的范围变量子句中,给出了一

30、个显式定义的范围变量b,b属于属于BRep类型的对象实例集类型的对象实例集 在在where子句中,子句中,b的名字要等于的名字要等于cubo#5与与GOMsql等价的等价的SQL查询表达式查询表达式(1)selectweightfrom BRepwherename=“cubo#5(2)selectb.weightfrom BRepasbwhereb.name=“cubo#5范围变量在范围变量在SQL中被称为别名中被称为别名aliases方式方式1没有显式的范围变量没有显式的范围变量方式方式2经过别名,定义了一个显式的范围变量经过别名,定义了一个显式的范围变量bGOMsql与与SQL的主要区别的

31、主要区别 SQL:From子句中范围变量必需约束到一个已存子句中范围变量必需约束到一个已存在的,旦已被命名的元组赋值的对象集合上,即在的,旦已被命名的元组赋值的对象集合上,即捆绑到一个关系或一个已建立的捆绑到一个关系或一个已建立的 视图上视图上 结论:结论:SQL的的From子句中不允许嵌套子句中不允许嵌套SFW的构的构造造 GOMsql:From子句中的范围变量可以定义在任子句中的范围变量可以定义在任何的对象集合上。即无论是耐久的命名集合,还何的对象集合上。即无论是耐久的命名集合,还是一个暂时建立的对象集合,即允许捆绑到另一是一个暂时建立的对象集合,即允许捆绑到另一个个SFW表达式上。表达式

32、上。结论:结论:GOMsql的的From子句支持子句支持SFW构造的嵌套构造的嵌套 范围变量在范围变量在From子句中必需显式阐明子句中必需显式阐明范围变量的方式化定义范围变量的方式化定义 GOMsql中,范围变量被捆绑到中,范围变量被捆绑到From子句子句中的对象集合上中的对象集合上 方式化描画为:方式化描画为::fromin,in :=()|嵌套查询表达式嵌套查询表达式 例如:查找分量大于例如:查找分量大于1000的几何体中外表积大于的几何体中外表积大于10的外表集合。的外表集合。方法:先查找分量大于方法:先查找分量大于1000的几何体,再从中挑的几何体,再从中挑出外表积大于出外表积大于1

33、0的子集的子集 Select fForm f in(select b.facesfrom b in Brepwhere b.weight1000)where f.surface10 这里,外层范围变量这里,外层范围变量f被限定在内部的被限定在内部的SFW表表达式所前往的达式所前往的Face对象集合上。对象集合上。需求留意的约束条件是:保证范围变量必需有需求留意的约束条件是:保证范围变量必需有一个独一的类型,这个类型可以在编译时推导一个独一的类型,这个类型可以在编译时推导出来出来 一个嵌套查询表达了查询的途径表达式是一个嵌套查询表达了查询的途径表达式是faces 更广泛地,一个范围变量不仅被限定

34、在经过途更广泛地,一个范围变量不仅被限定在经过途径表达式检索的对象集合上,而且可以捆绑在径表达式检索的对象集合上,而且可以捆绑在任何一个集合上。任何一个集合上。BrepFace例如例如2 查询分量在查询分量在1001000之间的几何体之间的几何体 笨方法:先找出分量大于笨方法:先找出分量大于100的几何体,再从的几何体,再从中挑出小于中挑出小于1000的来的来 select b2.nameform b2 in(select b1from b1 in Brepwhere b1.weight100)where b2.weight1000 优化的结果优化的结果 select b.nameform b

35、 in Brepwhere b.weight100范围变量可以限定到范围变量可以限定到实例集合的属性域上实例集合的属性域上例如:查询立方体例如:查询立方体cubo#5的的8个顶点坐标。个顶点坐标。select v.x,v.y,v.zfrom v in(select e.vertices from e in(select f.edges from f in(select b.faces from b in BRep where b.name=cubo#5)从最内层的从最内层的SFW开场开场7-9句:句:b被限定在被限定在BRep的类型扩展上的类型扩展上 谓词谓词b.name=Cubo#5将将b限

36、定到满足谓词的限定到满足谓词的BRep的一个子集上,前往每个几何体的的一个子集上,前往每个几何体的6个面个面f1-f6。56行的行的SFW接受由内层前往的接受由内层前往的6个面,并计个面,并计算它们的边的并集:算它们的边的并集:产生产生12个不同的个不同的edge对对象象 语句语句34产生产生24个点的并集为个点的并集为8个不同的个不同的点点 语句语句12产生产生8个点个点x.y.z值值,61.f ffedgesf嵌套查询和途径表达式嵌套查询和途径表达式 如下笼统的类型方式如下笼统的类型方式 type T0 is type Tn-1 istype Tn is body body body ;A

37、1:T1;An:Tn;end type Tn end type T0end type Tn-1 即元组类型即元组类型Ti经过它的属性经过它的属性Ai1产生对类型产生对类型Ti的援用的援用 一个嵌套查询的一个嵌套查询的SFW表达式表达式 假设从援用链的始端假设从援用链的始端T0开场,到开场,到Tn终止,查终止,查询一个原子类型询一个原子类型SomeAttr的值,那么它的查的值,那么它的查询如下:询如下:select an.someAttrfrom an in(select an-1.Anfrom an-1 in(select a1.A2 from a1 in(select s.A1 from s

38、 in someSet)利用途径表达式,其查询可以缩短为:利用途径表达式,其查询可以缩短为:select an.someAttrfrom an in someSet.A1.A2.An嵌套查询的数学表示嵌套查询的数学表示 数学上的表示:结果集合可以表示为并数学上的表示:结果集合可以表示为并集集Un,其中,其中Ui被递归定义成:被递归定义成:11.1:iiUain)ifor(1 Aia0)if(i someSetiu不同的不同的Join类型类型 不同类型的联络不同类型的联络 基于值的基于值的Join:关系查询传统的:关系查询传统的Join操作操作 标识标识Join 函数函数Join基于值的基于值的

39、Join 传统的衔接操作,经过给定的传统的衔接操作,经过给定的Join属性的值的比属性的值的比较来联络对象较来联络对象 例如:查询两个例如:查询两个BRep对象,它们之间,第二个对象,它们之间,第二个变量为第一个的两倍变量为第一个的两倍 select b1.name,b2.name from b1 in BRep,b2 in BRep where b1.weight*2.0=b2.weight+对象对象b1,b2之间经过变量值来关联之间经过变量值来关联标识标识Join-同一同一Jion 标识标识Join-基于对象的相等,而不是值相等,基于对象的相等,而不是值相等,因此,是基于因此,是基于OID

40、值相等的衔接值相等的衔接 例如例如.谓词谓词O1O2-表示表示O1与与O2OID相等而不是相等而不是O1与与O2的形状相等的形状相等 谓词谓词O-当且仅当当且仅当O是是Object集集合中的一个对象实例时为真,而不是说合中的一个对象实例时为真,而不是说Object中有一个对象形状与中有一个对象形状与O的形状相等的形状相等标识标识Join例如例如 父,母,子三个对象类型及其实例库父,母,子三个对象类型及其实例库 type Man with extention is name:string;.;hasKids:Child;type WOMan with extention is name:stri

41、ng;.;hasKids:Child;type Child with extention is name:string;.;father:Man;mother:Woman;查询同一个父亲的两个孩子查询同一个父亲的两个孩子C1,C2 select c1.name,c2.name form c1 in child;c2 in child where c1.father=c2.father and c1!=c2 这里这里c1.fatherc2.father是标识相等,是标识相等,而不是值相等而不是值相等 假设是这样的谓词假设是这样的谓词 Where c1.father.name=c2.father.

42、name and c1!=c2-值相等查值相等查询询 查询一个孩子的父母亲查询一个孩子的父母亲 select m.name,w.name,c.name from m in Man,w in Woman,c in Child where c in m.hasKids and c in w.hasKids 利用重载操作,测试对于利用重载操作,测试对于woman集合和集合和man集合,能否包含有同一个孩子的偶对。集合,能否包含有同一个孩子的偶对。也可以经过孩子类型的援用点来完成上述查询也可以经过孩子类型的援用点来完成上述查询 select m.name,w.name,c.name from m in

43、 Man,w in Woman,c in Child where c.father=m and c.mother=w 函数联接函数联接 利用援用链建立两个对象集合间的联接利用援用链建立两个对象集合间的联接 当援用途径表达式中假设有集合属性,当援用途径表达式中假设有集合属性,那么需求衔接那么需求衔接 例如例如select b.name,f.name from b in BRep,f in b.faces where f.surface 20 范围变量范围变量b与与BRep类型对象集合捆绑,类型对象集合捆绑,而而b.faces寻觅经过寻觅经过faces属性与属性与b相关联相关联的的Face类集合类

44、集合总结总结-面向对象的查询与关系查询面向对象的查询与关系查询的区别的区别(1)查询对象集查询对象集关系的元组关系的元组对象集,包括了承继的子对象集对象集,包括了承继的子对象集(2)谓词表达:面向对象的查询在谓词里允许类型谓词表达:面向对象的查询在谓词里允许类型属性的援用链组成的途径表达式。属性的援用链组成的途径表达式。(3)谓词表达式允许对象的操作作为表达式的一个谓词表达式允许对象的操作作为表达式的一个因子因子(4)范围变量允许由中间结果产生的集合来阐明,范围变量允许由中间结果产生的集合来阐明,即在即在From子句中允许嵌套子句中允许嵌套SFW表达式表达式(5)标识标识Join(6)函数函数Join

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!