欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《对象数据库》PPT课件.ppt

    • 资源ID:5496880       资源大小:325KB        全文页数:89页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《对象数据库》PPT课件.ppt

    ,第3部分 对象数据库与WEB数据库第10章 对象数据库,高级数据库系统及其应用,2023/7/14,2,第10章 对象数据库,关系数据库的局限性,10.1,面向对象数据模型,10.2,对象定义语言,10.3,对象查询语言,10.4,C+语言绑定与OODBMS实现,10.5,对象-关系数据库系统,10.6,OODBMS与ORDBMS对比,10.7,2023/7/14,3,10.1 关系数据库的局限性,关系数据库系统只支持一个很小的、固定的数据类型子集。对复杂数据类型的处理不方便呈现很大的能力不足问题。包含复杂数据类型的各类新型应用计算机辅助设计与制造(CAD/CAM)多媒体数据处理、大型文档数据处理卫星云图/雷达等复杂气象数据处理地理信息系统(GIS)等,2023/7/14,4,10.2 面向对象数据模型,10.2.5 继承,10.2.4 对象类型,10.2.3 直接量,10.2.2 对象,10.2.1 对象模型概述,10.2.8 事务模型,10.2.7 封锁与并发控制,10.2.6 数据库操作,2023/7/14,5,10.2.1 对象数据模型概述,对象数据模型(ODM)的发展历程ODBMS自由发展阶段(1993年以前)无规范和标准ODBMS:Object Database Managing SystemsODMG 1.0(1993年)ODMG对象模型的最早版本提出者:Object Data Management Group ODMG 2.0(1997)ODMG 3.0(2000)是ODMG的最新也是最后版本,2023/7/14,6,ODMG对象模型的核心概念(1),基本模型元素对象(object)和直接量(literal)。每个object有一个唯一标识,而literal则无标识。对象通常用来表示现实世界的一个实体。对象具有状态状态(state)被定义为一组特性(properties)变量值。一个特性可以是一个对象属性(attribute),或是一个关系(relationship)对象的状态是可变的。对象具有行为行为(behavior)被定义为一组可被外界或其它对象执行的操作(operations)。操作的具体编码实现,则被称为方法(method)。,2023/7/14,7,ODMG对象模型的核心概念(2),对象结构可通过定义状态变量和行为来规定对象的结构。共享相同结构的对象被聚合为一个类(class)。同类对象具有一组同名、同类型特性变量和一组相同的操作。一个具体对象也被称为它所属类的一个实例。对象类型(type)除了可用类(class)概念描述对象类型外,ODMG还引入接口(interface)概念。类是关于对象类型之抽象行为和抽象状态的规范,可直接实例化(intantiable),即可基于类创建的实例对象;而接口只规范对象类型抽象行为,不能直接实例化。类型允许继承(inheritance)不同类型之间可能存在特化/泛化关系(或ISA关系),即存在继承关系。子类型(subtype)允许从它的超类型(supertype)继承特性和方法。,2023/7/14,8,ODMG及其应用方式综述,ODMG基本概念objects、literals、types(classes,interfaces)、operations、properties(attributes,relationships)、inheritances、借助基于ODMG对象模型的ODL语言来构造应用的对象模式操纵应用的对象模式利用SQL99或其它宿主语言,结合基于ODMG的对象查询语言OQL实现,2023/7/14,9,10.2.2 对象,一、对象的主要构成(结构)一组可包含该对象特性值的特性变量属性(attributes)或关系(relationships)对象的所有特性变量及其取值规定了对象的状态(state)一组对象可以响应的消息(messages)每个消息可以带0个或多个参数;消息与ODMG对象模型中术语“操作(operations)”等价对象的所有操作,规定了对象的行为(behavior)操作的具体代码实现,称为方法(a method),2023/7/14,10,10.2.2 对象,二、对象的基本特征有唯一对象标识符(object identifier,oid)可以有一个或多个有意义的名字对象名字好比编程语言中的全局变量,必须在整个ODBMS中保持唯一无重名。应用也可通过对象名来引用对象。具有自己的生命周期对象的生命周期指明了对象是临时内存对象(transient),还是一个持久对象(persistent)。对象生命期的一个重要特点是独立于类型。对象具有特定的结构(见前页),2023/7/14,11,10.2.2 对象,三、对象等价与对象相等的概念两对象等价,如果它们有相同的对象标识(即是同一个对象)。两对象相等,如果它们的状态值都相等(但它们可能有不同的对象标识)。两对象浅度相等,如果两对象除了引用字段外,其余字段值都相同。两对象深度相等,如果两对象不仅非引用字段值相等,而且各相应的引用字段也指向相同的其它对象。,2023/7/14,12,10.2.3 直接量(literal),在ODMG模型中,literal指一个没有对象标识的值。literal值可以是简单结构或是复杂结构。有三种类型的直接量:原子型直接量(atomic literal),对应预定义的基本数据类型,如long、float、char或string等。集合型直接量,指定一个值集或对象集。结构化直接量,包括内置结构,如DATE、TIME、TIMESTAMP等,以及用户自定义结构,2023/7/14,13,10.2.4 对象类型,一、类型规范类型规范定义类型的外部特征对外可见的部分,由对外部可见的操作、特性和例外等一些抽象的描述构成。ODMG对象模型支持的类型规范分以下三种:接口(interface),只定义了类型的抽象行为,即操作部分的规范;直接量(literal),只定义了类型的抽象状态,即特性变量部分的规范;类(class),可同时定义类型的抽象行为和抽象状态规范。类的概念可基本对应到ER的实体集。二、类型实现定义该类型实例对象的一些内部方面,包括实现该类型操作的方法(methods)和一些其它内部细节。类型的实现与语言绑定有关。,2023/7/14,14,10.2.4 对象类型,一、类型规范二、类型实现三、常见的对象类型 原子型对象(atomic object)指用户自定义对象在ODMG对象模型中,没有内建的原子对象/类型。集合型对象(collection object)相当于一个元素容器,其内可存储一个或多个同类型元素。ODMG对象模型支持多种集合对象类型构造,如Set、Bag、List、Array、等。结构化对象特指ODMG预定义的四种对象/类型,2023/7/14,15,10.2.5 继承,一、子类型与行为继承ODMG对象模型支持基于继承(inheritance)的超类型/子类型(supertype/subtype)关系。子类型/超类型关系,也称为ISA关系。在ODL规范语法中,用“:”表达接口继承关系,允许多重接口继承。子类型接口可以在超类接口的基础上,附加定义自有的行为特征,或重载细化超类中原有的行为特征。二、状态继承 三、继承与类层次结构,2023/7/14,16,10.2.5 继承,一、子类型与行为继承二、状态继承 ODMG对象模型也允许定义扩展(extends)关系,允许子类型从一个超类型 同时继承行为和状态。扩展关系是一种单继承的、但可传递的关系。(类或接口)子类型可以从(多个)接口继承行为;但接口不能从类继承行为。只有类可以通过扩展(extend)从另一个类(超类)同时继承行为和状态。三、类层次结构 可利用ISA继承关系,将模式中的类组织成层次化的结构,2023/7/14,17,10.2.6 数据库操作,数据库操作指针对Database类型对象的操作允许基于一个Database类型,创建多个数据库实例,即多个逻辑数据库。一般利用DatabaseFactory接口中定义的new方法,来创建Database类型实例。ODMG模型的数据库类型原型定义了基本的数据库open/close操作,以及针对范围内的对象进行命名、定位和查找等操作。在对数据库存储域内的任何持久对象之前,必须先用open操作打开数据库。除了open和close操作,其它所有操作都必须在事务(Transaction)中执行,否则将会引发错误例外。,2023/7/14,18,封锁和并发控制,ODMG对象模型使用常规的、基于封锁的方法进行并发控制作为缺省封锁策略。并不排斥支持其它更广泛的并发控制策略。,2023/7/14,19,事务模型,对持久对象的任何存取、创建、删除或修改都必须在事务范围内进行。ODMG通过Transaction接口中定义了关于事务对象的各种基本操作。,2023/7/14,20,10.3 对象定义语言(ODL),ODL(object definition language)是遵循ODMG标准的对象数据管理系统(ODBMS)规范说明语言,它是独立于任何特定程序设计语言的语义构造。ODL的主要目标促进遵循ODMG规范的ODBMSs系统共享数据,使数据在这些系统之间迁移更为容易。ODL的主要任务创建对象数据库模式,即定义模式中类和接口。用户可先用ODL指定对象DB模式,然后再使用特定语言绑定,将ODL构造映射为特定程序设计语言的相关构造。,2023/7/14,21,ODL应用示例(一个简化版的大学数据库模式),对应该图的ODL定义,可参见课本 p322-323,2023/7/14,22,10.4 对象查询语言,2023/7/14,23,10.4.1 OQL(Object Query Language)综述,OQL是ODMG标准的一部分。OQL应用必须基于由ODMG-ODL定义的对象类型接口模式。只是一个简单的不完全语言,通常以嵌入形式与其它计算机语言结合使用。它也不保证能表达任意复杂的计算,即它不具有计算完全性。与其它语言的关系OQL语句通常以嵌入形式与其它扩展了持久特性的编程语言(如C+、Java、Smalltalk等)结合使用。与SQL对比,2023/7/14,24,OQL与SQL在语法和语义上的差别对比,SQL中的关系表(Table)名,在OQL中被解释为集合型对象名。SQL中的表属性或列名,在OQL中被广义解释为属性名/关系名,或方法名。OQL在SQL形式语法基础上,扩展了面向对象概念方面的运用,如复杂对象、对象标识、路径表达、多态、操作激活和延迟绑定等。OQL能灵活处理复杂结构对象,而SQL不能。OQL是一种纯粹函数型语言,只要类型系统允许所有操作符均可自由组合。QOL采纳了完全正交风格,允许OQL在保持SQL查询表达式语法简单性的基础上,不限制表达的能力且更易学习。,2023/7/14,25,OQL处理复杂结构对象的主要方式,导航存取能利用对象标识和关系,在对象之间导航。对象检索能检索ODB中已有的对象和创建新的对象。对象行为能执行对象操作,以更新对象的状态,或从对象状态中导出信息。利用继承能利用类型之间的子类型/超类型关系,进行对象存取、检索和更新等操作。,2023/7/14,26,OQL实现ODMG对象模型操纵的主要方法步骤,通常以有名对象或有名对象集作为入口,定位感兴趣对象,并可利用对象标识和对象关系在相关对象之间导航。这可形象比喻为一组“挑选(pick)”、“粘合(mix)”操作。通过pick操作,从已有对象集中挑出感兴趣的对象,再通过mix操作,把这些被挑出的对象粘合关联在一起。通过激活感兴趣对象上抽象操作所对应的方法,修改对象的状态,或从对象状态中抽取感兴趣的信息。返回一个表示结果信息的对象。,2023/7/14,27,10.4.2 OQL语言简介(1),1.类似SQL的基本SQL语句SELECT DISTINCT x.age FROM Persons x WHERE x.name=Pat它通常有一个数据库入口点可以是任意的有名持久对象。对于许多查询来说,入口点就是类的外延名。只要在OQL查询中引用了集合,就应该在定义一个相应的迭代器变量,来指代集合中的每个元素。有三种指定迭代器变量的语法形式(令e表示一个迭代器变量,Es表示一个集合对象):e in Es Es eEs as e,2023/7/14,28,OQL的条件子句,由于OQL支持正交特性,WHERE子句中条件表达更为灵活,允许出现任何返回布尔型直接量的条件表达。例如,除了SQL的比较操作符,OQL还支持一些测试集合对象内容的操作符或表达式。令v为变量,c为集合表达式,b为布尔类型条件表达式,e是与集合c中元素同类型的元素。如元素e是集合c的成员,则表达式(e in c)为true;如集合c的所有元素都满足b,则(for all v in c:b)为true;如集合c中至少有一个元素满足b,则(exist v in c:b)为true;如集合c有且只有一个元素,则表达式unique(c)为true;,2023/7/14,29,10.4.2 OQL语言简介(2),2.一些比SQL更简单直接的OQL查询表达 可以直接是一个对象名甚至一个具体值。名字可表示任何类型对象,包括原子型对象、结构型对象、集合型对象,或直接量。,2023/7/14,30,10.4.2 OQL语言简介(3),3.路径表达式(path expression)为实现对象之间的导航操作,OQL引入了路径表达式的概念。路径表达式由一个或多个路径步(steps)构成以一个有效名字(对象名、属性名、关系名或操作名)表示每个路径步用“点.或箭头”作为路径分隔符。应用举例假设我们已得到某特定人员对象p,若还希望知道其配偶居住的城市名,则可采用表达p 进行导航,2023/7/14,31,10.4.2 OQL语言简介(4),3.从集合中选择对象 1)从一个集合中选择对象简单SFW形式的OQL语句OQL也允许存取有序型集合对象中特定位置的元素,例如:2)关联查询多个对象集3)连接查询多个对象集,2023/7/14,32,10.4.2 OQL语言简介(4),3.从集合中选择对象 1)从一个集合中选择对象2)关联查询多个对象集类似SQL,SFW 形式的OQL中也可通过在在FROM后列出多个相关联的集合,来实现多个对象集的关联查询。例如,通过在前一集合迭代变量p之后,跟随一个以p开头的次层集合路径表达式,就可有效表达两个具有层次关系集合的关联查询。SELECT c.address FROM Persons p,p.children c 将检查所有人员的所有子女,结果值的类型为bag。3)连接查询多个对象集,2023/7/14,33,10.4.2 OQL语言简介(4),3.从集合中选择对象 1)从一个集合中选择对象2)关联查询多个对象集3)连接查询多个对象集在FROM语句中,也可同时声明多个不直接相关的集合。类似SQL,这允许计算这些集合之间的连接(join)。应用示例,从Persons对象集中选择以某种花名作名字的人:SELECT p FROM Persons p,Flowers f WHERE p.name=f.name,2023/7/14,34,10.4.2 OQL语言简介(5),4.利用查询构造对象1)利用类型构造器创建对象可借助类型名构造器来创建有标识对象。例如,为创建一个前述定义的Person对象,可使用下面的简单语句:Person(name:”Pat”,birthdate:date1956-3-28,salary:100000)也可直接创建无标识对象(literal)set(2,4,8,16)/返回一个无标识的set型集合直接量;struct(a:10,b:“Pat”)/返回一个无标识的结构;直接利用一些类型强制转换操作符构造对象:LISTTOSET(LIST(1,2,3,3,4)=SET(1,2,3,4)DISTINCT(BAG(1,2,3,3)=SET(1,2,3)FLATTEN(LIST(SET(1,2),SET(2,3),SET(4,5)=LIST(1,2,2,3,4,5)2)利用选择语句创建复杂对象,2023/7/14,35,10.4.2 OQL语言简介(5),4.利用查询构造对象1)利用类型构造器创建对象2)利用选择语句创建复杂对象SELECT DISTINCT STRUCT(a:x.age,s:x.sex)FROM Persons x WHERE x.name=PatSELECT DISTINCT STRUCT(name:x.age,hps:(SELECT y FORM x.subordinate as y WHERE y.salary100000)FROM Employees x这个语句对每个employee,建立了一个包含名字和它具有高薪下属的名字集结果是一个类型为set)的集合型直接量。,2023/7/14,36,10.4.2 OQL语言简介(6),5.激活方法、多态与滞后绑定1)激活方法OQL允许在属性名出现任何位置-激活一个可带参数的、返回值匹配表达式的方法。这种灵活的语法表达使得用户不需要区分是存储特性还是计算特性。例如,SELECT p.oldest_child.address.street FROM Persons p WHERE p.lives_in(“Paris”);2)多态与滞后绑定,2023/7/14,37,10.4.2 OQL语言简介(6),5.激活方法、多态与滞后绑定1)激活方法2)多态与滞后绑定面向对象的一个主要特性是可操纵多态集。例如,对象集Persons同时包含了Person、Employee和Student这三个类的实例对象,这些类的实例对象汇集构成了一个多态集。当一个多态集(如Persons)被过滤选择时,借助滞后绑定机制或加类限制指示符,在针对不同子类元素统一执行超类方法时,子类的一个特性或重载方法可被正确执行。例如,若Person类中定义了一个activities操作,它的子类Employee和Student中分别重载了这个方法。那么,当执行语句:SELECT p.activities FROM Persons p 时基于当前人员p的类型,OQL会激活正确的方法体。,2023/7/14,38,10.4.2 OQL语言简介(7),6.在OQL中应用分组操作符OQL增强了SQL的分组操作符,为每个分组(或分区)中的对象集都提供了显式引用。SELECT struct(city_name,city_population:count(partition)FROM p in PersonsHAVING count(partition)100,0000;这里,partition被用来指代每个分区的关键字。读者从这个例子不难归纳分组语句的一般语法形式。,2023/7/14,39,OQL语言简介(8),7.操作符组合与命名查询(named query)OQL中也引入了视图机制,并允许使用命名查询。可用关键字define指定命名查询的名字。例如,可通过以下四个语句构造复杂查询:查那些平均薪水最少雇员所居住的街道名称并排序。Define Employees()as SELECT(Employee)p FROM Persons p WHERE“has a job”in p.activitiesDefine salary_map()as SELECT street,avg_salary:avg(SELECT x.e.salary FROM partion x)FROM Employees()e GROUP BY street:e.address.street;Defing sorted_salary_map()as SELECT s FROM salary_map()s ORDER BY s.avg_salaryFIRST(sorted_salary_map().street,2023/7/14,40,10.5 C+语言绑定与OODBMS实现,10.5.5 C+OQL,10.5.4 C+OML,10.5.3 C+ODL,10.5.2 OODBMS语言绑定综述,10.5.1 OODBMS概述,2023/7/14,41,10.5.1 OODBMS概述,1.持久编程语言的基本特点(表10.2 与嵌入执行SQL语言对比),2023/7/14,42,10.5.1 OODBMS概述,2.持久编程语言必须处理的一些关键问题1)如何指定对象持久性先将类声明为可持久类,再结合其它一些限定方法,如声明类外延名字,或使用带有持久指示参数的扩展new()操作来创建新对象等方法,来指定持久对象。运行时动态指定对象的可持久性。通过可达性确定持久性。将一个或多个根(root)对象声明为持久对象,其它能直接或间接从持久根对象引用的对象,也被自动认为是持久对象。2)如何实现对象标识和指针3)如何存取持久对象,2023/7/14,43,10.5.1 OODBMS概述,2.持久编程语言必须处理的一些关键问题1)如何指定对象持久性2)如何实现对象标识和指针3)如何存取持久对象给对象命名,然后通过名字检索对象。该方法只适合于对象数目相对较少的应用。允许对外发布或在外部转储对象标识或指针。存储集合对象,并允许程序遍历集合以检索所需的对象。对声明了类外延名的可持久类,每当一对象被创建时,都会被自动插入类外延对象中;而当一对象被删除时,也会自动将该对象从类外延中移除。,2023/7/14,44,10.5.2 C+语言绑定综述,C+语言绑定,本质上,相当于基于C+实现了一个持久对象编程语言。它通过语言绑定映射技术,把ODMG/ODL中的各种基本构造映射到C+构造。具体映射通过C+类库(OODBMS运行库)实现。在C+类库中,所有实现ODMG模型基本概念或结构的类声明,统一采用以d_为前缀的名字空间。C+语言绑定也称为C+ODL/OMLC+ODL是C+ODL/OML的声明部分。C+OML代表对象操纵语言。,2023/7/14,45,10.5.2 C+语言绑定综述,1.定义可持久化对象的抽象基类d_Object,2023/7/14,46,10.5.2 C+语言绑定综述,2.实现了一个极具灵活的智能型指针(引用模板类 d_Ref)还有两个扩展了d_Ref的、用于建模关系的引用模板类d_Rel_Ref/d_Rel_Set,允许指定从当前类到类T的一个一对一关系,或一对多关系。引用指针的应用举例:d_Ref profP;/声明Professor类引用类型的实例profPd_Ref deptRef;profPage();/激活profP引用指向的那个Professor类实例上的age()方法deptRef=profP.dept;/将引用赋值到变量deptRef。,2023/7/14,47,10.5.2 C+语言绑定综述,3.实现DB事务管理类class d_Transaction 在C+绑定中,每个事务被实现为一个d_Transaction类的对象。C+绑定运行库中,通过具体类d_Transaction,实现了ODMG-ODL规范中的Transaction接口,定义了begin()、commit()、abort()、checkpoint()等操作。d_Transaction是一个独立的具体类,只有临时的实例对象。,2023/7/14,48,10.5.2 C+语言绑定综述,4.实现数据库对象(管理)类C+OML实现预定义了d_Database类型,提供了一组管理数据库对象的方法,以及在数据库中命名、更名对象和定位指定对象的方法。与事务d_Transaction的实例对象类似,d_Database实例对象也是临时对象。,2023/7/14,49,10.5.3 C+ODL,声明C+ODL类语法与C+类声明语法相同只是名字空间有所区隔而言。C+ODL专门构造类通常以前缀d_开头。C+绑定类库提供了C+ODL预定义基本数据类型的类定义/实现,包括d_Short、d_UShort、d_Long、d_Float、等。类的静态数据成员不包含在个体实例中,而是随类定义一起静态存储。声明对象关系(关联)方法,2023/7/14,50,10.5.3 C+ODL,声明C+ODL类语法与C+类声明语法相同只是名字空间有所区隔而言。声明对象关系(关联)方法 C+ODL允许指定对象之间的相互关系,包括一对一、一对多关系。假设在类A和类B之间存在如下1-1关系,则它们之间关系声明框架如下:extern const char _ra,_rb;class A d_Rel_Ref rb;class B d_Rel_Ref ra;const char _ra=ra,_rb=rb;声明1-多关系,用d_Rel_Set替换d_Rel_Ref关系的完整性约束由OODBMS维护。(图10.4),2023/7/14,51,OODBMS自动维护引用完整性的行为效果直观图(图10.4),2023/7/14,52,10.5.3 C+ODL,声明C+ODL类语法与C+类声明语法相同只是名字空间有所区隔而言。声明对象关系(关联)属性声明集合型属性成员C+绑定类库提供了实现ODMG/Collection接口的抽象模板类d_Collection,它由d_Object派生,指定了所有集合类的公共行为.template class d_Collection:public d_Object C+绑定类库中也定义了各种集合类型的模板类,如d_Set、d_List、d_Varray,它们均派生自d_Collection.应用示例d_Set ss,2023/7/14,53,10.5.4 C+OML,C+OML实现的指导原则尽可能以一套相同的语法,操纵临时对象和持久对象。但实际上,操纵两种对象多少还是会有所不同,比如,查询和事务一致性只能应用于可持久的对象。针对持久对象的主要操作种类包括创建对象、删除对象、标识对象、引用对象、激活对象,以及存取对象特性值等。,2023/7/14,54,10.5.4 C+OML,1.创建对象 创建对象一般用new操作符,C+绑定实现重载了C+的new操作,增加了指定新对象生命期的参数。以下是d_Object类中定义的三个new操作:void*operator new();/方法1void*operator new(const d_Ref_Any/方法3,2023/7/14,55,10.5.4 C+OML,2.删除对象 在C+OML中,对已创建的对象,既可利用d_Ref:delete_Object成员函数来删除,也可用持久对象(超类d_Object中定义)的delete操作符来删除。如果相关事务正常提交,则删除对象操作影响是永久的,对象在主存中的映象和DB中的持久数据都会被删除。应用举例:d_Ref obj_ref;obj_ref.delete_object();/删除被引用的那个对象,2023/7/14,56,10.5.4 C+OML,3.修改对象 通过更新一个对象的特性值,或激活定义在对象上的操作,均可达到修改对象状态的目的。当包含修改动作的事务提交后,更新影响将持久化且对其它用户可见。持久对象被修改时,必须与OODBMS运行库进程通信,通知相应对象状态已被修改。,2023/7/14,57,10.5.4 C+OML,4.对象命名及其操作 C+OML支持命名对象,并提供存取有名对象的能力。有关命名对象、更名对象和按名检索对象的操作,均在d_Database类中定义。DB应用通常从存取一个或多个关键的对象开始处理,然后通过引用,导航到其它要处理的对象。这些开始时被处理的对象,通常被称为根(root)对象。,2023/7/14,58,10.5.4 C+OML,5.用循环子Iterator操纵集合型对象 循环子(iterator)常用来遍历一个集合中元素,并顺序取回每个元素。为方便操纵集合型对象,C+绑定类库还提供专门构造循环子的模板类d_Iterator。d_Iterator的定义框架:template class d_Iterator public:d_Boolean next(T d_Iterator实现了ODMG:Iterator接口,可确保安全可靠返回指定集合中的每个实例元素。循环子通常在一个集合型对象上应用create_iterator方法来初始化。,2023/7/14,59,10.5.4 C+OML,6.类外延及其操作 ODMG提供了一个机制,允许在类声明中,可选地带一个声明类外延名的参数。例如,class Employee(extent Employees):public Person 声明类Employee的外延名为Employees为方便操纵可持久类外延,C+绑定也实现了一个模板接口类d_Extent,提供了一组操纵外延中对象元素的操作。d_Extent本身不是可持久类,这也是为什么它不能从d_Collection派生的原因。,应用举例:d_Extent all_Customers(bank_db);,2023/7/14,60,10.5.5 C+OQL(1),1.利用C+绑定提供的专门接口执行OQLC+绑定提供了一套可全功能利用OQL的接口规范。该规范包括查询准备构造步和查询执行步:通过使用类型d_OQL_Query的一个对象,构造查询;利用函数d_oql_execute执行查询。它是d_OQL_Query类中的一个友元函数,属于可独立使用的接口模板函数。template void d_oql_execute(d_OQL_Query 一旦构造好了查询,就可以用相同或不同的参数多次执行已构造好的查询。d_OQL_Query的“”操作符已被重载,以允许拼接左右操作数对应的结果串值,并返回左边操作数的值引用。从而允许用灵活参数形式构造d_OQL_Query。,2023/7/14,61,10.5.5 C+OQL(2),2.在集合类的查询方法中嵌入OQL 类d_Collection中定义了一个用于查询的成员函数:int query(d_Collection,2023/7/14,62,10.6 对象-关系数据库系统,10.6.1 嵌套关系表,10.6.2 复杂数据类型,10.6.3 继承,10.6.4 引用类型,10.6.5 复杂类型查询,10.6.6 函数、过程和方法,10.6.7 ADT及其封装,10.6.8 新型关系数据库,10.6.9 实现ORDBMS面临的一些新挑战,2023/7/14,63,对象-关系数据库系统,OODBMs及持久编程语言,主要通过附加类库方法,扩展原编程语言的持久性和其它数据库特性来实现。本节讨论对象数据库的另一种实现方案:扩展、增强原有的RDBMS,使之具备对象数据库系统的某些特性。对象-关系模型提供了更为丰富的类型系统,包括复杂数据类型和面向对象。关系查询/操纵语言,如SQL,相应地也需进行扩展,以适应更丰富的类型系统。,2023/7/14,64,SQL-99相对于SQL-92的主要增强点,增加了一些类型构造器来指定复杂对象。行类型(row type),对应于对象模型的元组或struct构造器,还可表达值集的数组类型。但SQL-99规范尚不包括set、list、bag等集合类型构造器。包括了一种可用引用类型来指定对象标识的机制。提供了继承机制。通过用户自定义类型机制,提供了操作封装。,2023/7/14,65,10.6.1 嵌套关系表,嵌套关系模型是传统关系模型的扩展,在嵌入关系模型中,属性值除了原子值外,还允许是另一个子关系或一个值集,即关系中允许内嵌子关系。嵌入关系的一个元组可表示一个复杂对象。一个含嵌入子表的典型关系表示例,2023/7/14,66,满足1NF的展开版本“图书”关系表(Flat-Books),2023/7/14,67,满足4NF的“图书”关系子表,2023/7/14,68,10.6.2 复杂数据类型(1),复杂数据类型也称为抽象数据类型(abstract data type,ADT)。本部分主要介绍SQL99在复杂数据类型方面的扩展和新用法。1.声明多值属性CREATE TABLE Books(;authors VARCHAR(20)ARRAY 10;)2.声明巨型属性 book-review clob(10KB);image blob(10MB);movie blob(2GB);,2023/7/14,69,10.6.2 复杂数据类型(2),3.使用结构化类型 结构化类型允许组合若干属性成份为一个新类型。SQL-99中,可按如下示例方式声明和使用结构化类型。基于结构化类型,既可用进一步定义更复杂结构化类型,也可直接基于它创建关系表。包含结构化类型的表称为嵌套表。,2023/7/14,70,10.6.2 复杂数据类型(2),3.使用结构化类型 SQL-99也允许直接声明匿名行类型。例如,属性声明publisher Publisher,也可用如下子句来替换:publisher ROW(name VARCHAR(20),branch VARCAHR(30)SQL-99也允许在类型定义中,直接附加操作声明。例如CREATE TYPE Employee AS(name VARCHAR(20),salary INTEGER)METHOD giveraise(percent INTEGER);可使用另一个创建方法语句,来定义实现操作的方法:CREATE METHOD giveraise(percent integer)begin SET self.salary=self.salary+(self.salary*percent)/100)end;,2023/7/14,71,10.6.2 复杂数据类型(3),4.创建复杂类型值在SQL-99中,一般用构造函数来创建结构化类型值。例如,若用如下语句定义了publisher的构造函数:CREATE FUNCTION Publisher(n VARCHAR(20),b VARCHAR(20);可用Publisher(McGraw-Hill,New York)来创建一个该类型值。向Books关系中插入一个元组的语句:INSERT INTO books VALUES(Compilers,ARRAY Smith,Jones,Publisher(McGraw-Hill,New York),ARRAY parsing,analysis);,2023/7/14,72,10.6.3 继承(inheritance),1.基于类型的继承类型继承不仅可继承超类型的属性,也可同时继承超类型的方法。子类型中也允许重载超类型中的方法。但SQL-99标准尚不支持多继承。应用示例,假如我们有以下关于人员的定义:CREATE TYPE Person AS(name VARCHAR(20),address VARCAHR(30);那么,对某个特殊人群,如学生和教师,我们可在重用Person定义的基础上,进行附加定义:CREATE TYPE Student UNDER Person(degree VARCHAR(20),department VARCAHR(30);CREATE TYPE Teacher UNDER Person(salary INTEGER department VARCAHR(30);,2023/7/14,73,10.6.3 继承(inheritance),2.基于表的继承SQL-99中的表继承对应于ER模型中的泛化/特化关系。例如,若已用CREATE TABLE people of Person创建了关系表people,那么,就可按如下语句定义people的子表students和teachers:CREATE TABLE Students UNDER People(degree VARCHAR(20),department VARCAHR(30);CREATE T

    注意事项

    本文(《对象数据库》PPT课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开