第9章_面向对象和对象—关系数据库_第1页
第9章_面向对象和对象—关系数据库_第2页
第9章_面向对象和对象—关系数据库_第3页
第9章_面向对象和对象—关系数据库_第4页
第9章_面向对象和对象—关系数据库_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 面向对象和对象一关系数据库木章内容:9.1面向对彖数据模型9.2而向对象数据库建模9.3对彖一关系数据库9.1面向对象数据模型面向对象数据模型(object-oriented data model,简称oodm)是一种可扩充的数据模型,用 户可根据需要,h己定义新的数据类型及相应的约束和操作。面向对象数据模型可以通过下列概 念來表述:9.1.1对象9.1.2类和实例9.1.3类的继承9.1.1对象对象是oodm的基本结构,是而向对象数据库系统的核心。一个对象是由一些数据以及能够作用在这些数据上的操作组成。例如,职工对象数据(职工号、姓名、性别.职称、部门)操作(增加职工、删除职工、改变

2、职称)在传统的、非而向对象的数据库系统中,操作被设计为数据操纵的一部分。而在而向对象数 据库系统中,操作被定义为数据的一部分,然后对以在任何必耍的地方使用它们。数据以及操作 被封装起来,它们对用户是隐藏的。即操作或访问数据时,用户不必知道操作是如何施加在数据 上的。一个对象包括三个部分:属性集合、方法集合和消息集合1. 属性集合每一个对彖都有各口的状态、组成和特性,称为对彖的属性。属性可能是一组简单的值,也可能是其他対彖,即对彖的嵌套,并月这种缺套町以继续下去,从而组成各种复杂的对彖。每个对象冇唯一的对象标识(oid: object identity )o2. 方法集合方法是对象的行为特性。方

3、法可改变对象的状态,对对象进行各种操作。方法的定义包含两 个部分:一是方法的调用说明,说明方法的名称、参数和结果类型;二是方法的实现部分,它是 用程序设计语言编写的一个过程,以实现方法的功能。3. 消息集合对象是封装的,即每一个对象是其状态和行为的封装。所以外界与对象的通信一般只能借助 于消息。方法是在数据定义的过程中定义的。为了真正执行一个方法中的步骤,用八必须向对象 发送消息。消息传送给对彖,调用对彖的相应方法,进行相应的操作,最后,以消息形式返回操 作的结果。一条消息是一个执行方法的请求。在用户发送的消息中,必须指明要执行的方法的名称以及 所需耍的参数。9丄2类和实例在组织信息时,人们总

4、是将具有相似特性的对象归为一类(class)。类中的每个对象称为类 的一个实例(instance)0 一个类中的所冇对彖其特性必须相同,即具冇相同的属性、使川相同的 方法、响应相同的消息。如果说类的概念相当于关系模型小的关系模式,那么类的实例类似于元组,类的实例z间和 类之间可以有复朵的联系。9丄3类的继承一个类中往往会包含某些具冇附加特性的对彖,而这些特性并不和类的所冇成员相关,这些 具有附加特性的对象称为子类。如果类d是类c的子类,则称类c是类d的超类,子类可继承其超类的所有特性(包括属 性、方法和消息),同吋乂可具有超类所没有的特性。一个子类可以只继承一个超类的特性(单 继承)也对以继承

5、多个超类的特性(多重继承)。例如,学校模型中冇教职工和学生两个类,其中教职工中又口j分为教师类和行政人员类,所冇 教师有专业这一属性,行政人员有行政级别属性,它们是教职工的两个子类。同时教职工和学生也 具有某些相似的属性,如:都有身份证号码、姓名、性别、年龄等,可以把它们看成是人的子类。 其类层次结构如图9 - 1所示。图9-1学校数据库的类层次结构9.2面向对象数据库建模而向对象数据库模型的描述工具odl (object definition language),它是corba (正在制 定的分布式而向对象计算标准)的一个组件。odl是从设计者的角度观察数据的结构,与具体 的oodbms无关

6、。所以,odl和e-r图一样,是基于数据库概念模型上的工具,它们都可以 向dbms支持的数据模型转化,如图92所示。e-r抽象关系数odl抽象二据模式/对象数> rdbms据模式> oodbms图9 - 2数据库建模和实现的过程9.2.1 odl中类的说明在类的定义中主耍包括以下几个部分: 关键字interface (接口); 类的名字: 类的特性花 可以是属性、联系、方法。所以,odl中类说明的最简单形式是:interface v类名字v特性表 ;9.2.2 odl中属性的说明属性是类的一种最简单的特性。例91利用odl描述职工(employee)类,语句如下:interface

7、 employee attribute string name;attribute integer age;attribute enum sextype male,female sex;;语句说明:第一行说明employee是一个类;第二行说明属性name,其类型是string,即长度未知的字符串;笫三行说明属性age,类型是整型;第四行说明属性sex,其类型是枚举型,枚举类型名字为sextype, sex的值从male或female 中选择。这就是employee类的说明,任何一个employee对象在这儿个属性上均对应一个分量。例9.2给出类department的odl描述,有属性name

8、 (部门名)、manager (负责人)、address (办公地址),其中address是一个结构,包括楼层和房间号:in terface departme nt attributestringn ame;attributestringman ager;attributestructaddrstring room, string floor address;);odl中的原子类型有:整型(integer)、浮点型(float)>字符(char)、字符串(string)> 布尔型(boolean)和枚举型(enum)。复杂类型町以是集合、列表、数组和结构等。9.2.3 odl中联系

9、的说明为了得到对象与同类或不同类的其他对象的连接方式,需要在类的定义中说明类与类z间的 联系。如职工类与部门类z间有联系。一个职工对彖总与某个部门对彖有关系(工作关系)。在 employee类说明中,可用下面的odl语句表示这种联系:relationship department workin;该语句,说明在employee类中的每个对象,都有一个对department对象的引用,引用名为 workin oi大i为在职工类和部门类的联系中述有一层联系是一个部门对彖中总包含了若干个职工对彖, 即从部门类中的每个对彖,也应该能实现对职工类中的对象集的引用。那么这种引用如何实现 呢?在odl中有反向

10、联系的概念,耍说明一个部门可有多个职工,需耍在department类说明屮 加进对employee类对象的引用:relationship set<employee> ownsinverse employee : workin;h冲联系名为owns,关键字set表示集合,set<employee>表示employee的对象集合,说明 department 对象将引用 employee 的对象集合,inverse employee : work in 说明 owns 联系是 employee 类中联系workin的反向联系。在e-r模型中,没有反向联系的概念,因为e-r模型

11、中的联系是双向的。所以e-r模型中的 一个联系,在odl中要用一对反向联系來表示。在odl中关于联系的说明也就只冇两种情况:要么和其他类屮的一个对象有关,要么和其他类屮的对象集合有关。例 9.3 用 odl 描述 employee、departments item 类及其联系:interface employee attributestringname;attributeintegerage;attributeenumsextype male,female sex;relationship department workin inverse department: owns;relations

12、hip set<item> joins inverse item: joinby;interface department attribute stringname;attribute stringmanager;attribute struct addr string room, string floor address;relationship set <employee> owns inverse employee : workin;interface item attributestringname;attributefloatoutlay;attributes

13、tructdate integer day, integer mouth, integer year check_date;relationship set<employee> joinbyinverse employee : joins;9.2.4 odl中的类的继承假设类d是类c的子类,那么在定义类d时,对以在后加上:c,说明类d是类c的子类,并 口j继承类c的所冇特性。例9.4定义类manager (部门经理)为employee的子类。interface manager :employee relationship department lead;语句说明:第一行说明类man

14、ager是类employee的子类;第二行表明所有的manager对象都有一个联系lead,表示该经理所管理的部门,并且一位经 理只能管理-个部门。在多重继承时,特性名z间可能会发生冲突。如两个或多个超类对能有同名的属性或联系,1佃这些特性的类型对能不同。在odl中提供以卜几种机制来建立解决多重继承产生的冲突:指出超类特性的多个定义中哪一个川于了类;在子类中,对于有相同名字的另一个特性给一个新的名字;在子类屮重新定义一个或多个超类小已定义的某些特性。9.2.5 odl中方法的说明类的另一个特性是方法,方法是与类相关的函数。类中的侮一个对彖都能引用方法,同一方 法可用于多个类,这是面向对彖语言的

15、特点。方法说明屮主要有方法名、方法的输入/输出类型说明等。而方法的实际代码是用宿主语言 写的,代码本身不是odl的一部分。调用方法时,可能会引起界常,即出现界常或非希望的情况,这种情况一般应山某个函数來 处理(相当于出错处理)。在odl的方法说明中,提供关键字raises (引发),在括号里列出异常 处理列表。例9.5类employee的扩充定义,增加了方法的说明:interface employee (key name) attribute string name;attribute integer age;attribute enum sextype male, female) sex;r

16、elationship department workin inverse department: owns;relationship set<iteni> joins inverse item : joinby;string departname () raises (nodepartfound)otheritem (in item, out set<employee>) raise (noitemin);;第一个方法是departname,该函数将产生一字符串型的返回值,假设(因为odl定义屮没 有函数代码,所以只能假设)该方法的功能是返回应用该方法的对象所在的部门

17、名,如果应用该 方法的对象所在的部门不存在,将引发名为nodepartfound的界常处理。笫二个方法是otheritem,该函数没有任何返凹值,其输入参数类型为item,输出参数为 employee的对彖集合。该方法可能是希望该职工参加了这个项冃,如果不是,那么就会引发异常 noitemino如果他参加了这个项目,将给出所有-参加该项目的其他职丁。除了属性、类型、方法、继承的说明外,一般类说明小还应包括码的说明。该语句屮的(keyname) 说明了 employee 码为 nameo9.2.6 e-r模型向面向对象数据模型的转换当建立了现实世界的e-r模型以后,可将其转换为00模型。转换时,

18、可按照以下的步 骤进行:(1) 将e-r模型屮的每个实体集住成一个类,实体集的属性转换为类的属性。(2) 将e-r模型中具有isa联系的实体集牛成的类之间建立类/子类关系。(3) 在转换得到的类中加入联系的说明: 对原e-r模型中冇一对一联系的实体集,在其生成的类中,都加入联系说明,说明 其和另一个类中的一个对象有关。 对原e-r模型中有一对多联系的实体集,在一方生成的类中,加入联系说明,说明 其和另一个类中的对象集合有关;在多方生成的类中,加入联系说明,说明其和另一个类中的一 个对彖有关。 对原e-r模型中冇多对多联系的实体集,在其生成的类中,都加入联系说明,说明 其和另一个类屮的对象集合有

19、关。9.3对象一关系数据库1990年,以michael stonebraker为首的高级dbms功能委员会发表了 “第三代数据库系统宣 言”的文章,提出一个而向对彖数据库系统必须具有两个条件:支持一核心的面向对彖数据模型;支持传统数据库系统所具有的数据库特性。虽然面向对象数据库系统在一些特定应用领域(如cad等)较好地满足了其应用需要,但 是,这种纯粹的而向对象数据库系统并不支持sql,因而在通用性方而失去了优势,其应用领域 受到很大的局限。而同时,面向对彖技术和数据库技术相结合的另一个产物对象一关系数据库管理系统 (ordbms)却得到了快速的发展。ordbms是将传统的关系数据库加以扩展,

20、增加面向对象特性,既支持己被广泛使用的sql, 具有良好的通用性,乂具有而向对象特性,支持复杂对象和复朵对象的复朵行为,适应了新应用 领域的需耍和传统应用领域发展的需耍。正在制定中的国际标准sql3也体现了 ordbms的特 性。ordbmsrdbmsql3sql复杂对象 复杂行为ordbms在sql环境中主要增加了以下四个特征:对基本类型扩充的支持;对复杂对彖的支持;对继承性的支持:对产生式规则系统的支持。berkeleypostgres :ordbms先驱;ii;ordbms产9.3.1基本数据类型的扩充目前的rdbms !'只支持固定的数据类型集、操作符和少量的函数。而ordbm

21、s屮具有可 扩充的数据类型、函数和操作符。illustra把一组数据类型及其上的有关函数和操作符、访问方法进行封装,称为datablade (数 据刀片)模块。1. 创建基本数据类型创建-个新的数据类型需要指明类型名、类型的存储信息和该数据类型同ascii來冋转换的 子程序。例如:create type mytype (internal length = 8,input = my type input,output = my type out put);该sql语句创建了用八h定义的数据类型mytype, 'i1 internal length指明存储该类的实例时 将分配到的字节数,两

22、个函数my type in put和my type output分别是在该数据类型的实例同 ascii z间转换时调用的输入、输出例程,该例程可以用于加密、解密运算等,也可以什么都不 做。另外,创建数据类型时还可以包含约束,方便数据的完幣性检查并拒绝不合适的数据输入。2. 用户自定义函数ordbms中既可以用sql也可以用第三代编程语言(例如c等)编写函数,然后把函数注 册到系统中以供调用。函数定义中必须指明函数名、参数、返回值类型以及函数的执行代码,命 令格式为:create function函数名(类型1,类型2,)returns 类型 as(文件名或sql语句表达式);例如:在职工表em

23、ployee中,假设有工资字段salary,可定义一个函数,用来计算每个职 工的工资与平均工资的差别:create function diff_salary (float)returns float asselect $1 - avg (salary)from employee;然后就町以在数据的操作中自由运川函数diff_salary 了。例如:杳询所有职工的姓名及其工资与平均工资的差别,可表示成:select name, diff_salary (salary)from employee;口定义函数也对以是c语言程序,在此不作介绍。3. 用户自定义操作符在illustra系统中,用crea

24、te operator命令来登记操作符,形式如下:create operatorbinding操作符名to函数名;说明中允许用户用任何符号作为操作符,并把它赋给一个指定的函数。9.3.2支持复杂对象复杂对象是由多种基本的或用户定义的类型构成的对象。在ordbms中创建复杂对象的构 件有:组合、集合、引用、数组、列表、堆栈等,其中最基本的是前面三种。1 使用组合构造对象例:定义一组合phone-t,由国家号(country-num地区号(area-num) 1吨话号码(tele-num) 组成:create type phone-t ( country-num varchar(4),area-n

25、um varchar(4),tele-num varchar(8);组合类型的成分也可以是另一个组合类型,即组合类型可以嵌套使川。组合类型创建好麻,就可以在创建表时使用:create table employee ( namevarchar(lo),ageinteger,salaryfloat,phonephone-t为了对组合进行操作,ordbms对标准sql进行了扩充,提供多种方法使用组合或组合对 象的属性。如路径表达式的使用:组合名.属性名例如:查询职工(如胡一民)的电话号码:select phone.tele-numfrom employeewhere name ="胡一民&

26、quot;;2.使用集合构造对象在0rdbms中任何一种数据类型值的集合也是一种数据类型,表示成:setof (t)其中t可以是基本数据类型,也可以是组合数据类型。例如:査询所有杭州地区职工的电话号码:select name, phone. tele-numfrom employeewhere '0571' in phone, area-num ;phone, area-num是一个集合,如果集合中有0571,则where条件为真3使用引用构造对象在ordbms中任何一种数据类型俏的引用也是一种数据类型,表示成:ref (t)其中t可以是组合或集合数据类型。引用可以作为任何表的

27、任何列的数据类型。9.3.3支持继承ordbms的第三个特性是支持子类对超类的各种特性的继承,包括数据继承和函数继承,单继承和多重继承。有如下关于人的类型定义:图91学校数据库的类层次结构首先考虑类型的继承,假如在如图91所示的数据库中,create type person(identify integer,name varchar (10), sex char(2);在数据库中需要对学*和教师分别存储一些信息。山于学生和教师同样是人,因而可以使用继承来定义学生和教师类型如下:create type stuedntcreate type teacher(degree varchar( 10),

28、( salary integer,department varchar(20)department varchar(20)under person;)under person;student 和 teacher 都继承 / person 的属性,即 identify 和 nameostudent 和 teacher 称为 person的子类,person既是student的超类,也是teacher的超类。假定要存储关于在职研究生的信息,这些研究生既是教师又是学生,甚至可能是不同的系。如果类型系统支持多重继承,可以为在职研究生定义类型如下:create type teachstudent under student, teacher ;teachstudent应该继承student和teacher的所冇属性,这引起了另一个问题:属性identifyx name 和 department 同时存在于 student 和 teacher 表中。丿皿性identify和name都是从类person屮继承来的,因此同吋从student和teacher小继承这两 个属性不会引起冲突。但student和teacher中都有depa

温馨提示

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

评论

0/150

提交评论