重邮版第十二章_第1页
重邮版第十二章_第2页
重邮版第十二章_第3页
重邮版第十二章_第4页
重邮版第十二章_第5页
已阅读5页,还剩38页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

第十二章对象—关系数据库本章要点面向对象的基本概念对象定义语言ODL对象关系模型面向对象设计和关系设计与复杂类型有关的查询12.1面向对象的基本概念面向对象数据库(ObjectOrientedDataBase,OODB):以面向对象数据模型为基础,对数据对象的行为进行建模,用已有的面向对象程序设计语言来透明地访问数据库对象-关系数据库(ObjectRelationalDataBaseSystem,ORDBS):以关系数据库和SQL为基础,在关系数据库模型上添加面向对象的特性,并对SQL语言进行扩充12.1.1类类(Class):是对共享同样属性和方法的所有对象的抽象描述,每个对象称为类的实例(Instance)类相当于关系模型中的关系模式,类的属性相当于关系模式中的属性,对象相当于元组类的组成:变量集合、在类之间通信的消息集合,实现消息的方法集合面向对象数据库模式就是类的集合12.1.2对象对象(Object):是对客观世界中存在实例的抽象描述,是由一组数据和在这组数据上操作的程序代码封装而成的基本单位对象的组成:变量集合:描述对象状态、组成和特性的数据消息集合:能由对象接收和响应,是对象与系统进行交互的接口方法集合:是实现消息的代码段,是对对象的操作,方法返回值是对消息的响应。12.1.3继承继承:是面向对象技术中一个重要而基本的概念,是一个类自动继承其他类所有属性和方法的机制由现有的类导出新的类,新的类被称为原有类的“子类”(Subclass),是类的特化,而原有类称为“超类”(Superclass),是类的泛化单继承:一个子类只继承一个超类的属性和方法多重继承:一个子类继承了多个超类的属性和方法12.1.4多重继承注:从多个超类中继承的属性或方法有相同的名字,会引起二义性问题不同系统的解决办法:重命名:将P分成两个变量,一个命名为A.P,另一个命名为B.P系统根据类创建的顺序,选择其中一个作为子类的属性变量用户根据自己的需要,自己选择属性值系统将这种情况作为错误处理12.1.5对象标识对象标识(ObjectIdentifier,OID):具有永久性的,在全系统内是唯一的,不随对象的属性值和方法的改变而改变对象标识的特点:唯一性不可重用性独立于对象状态独立于对象的物理存储位置12.1.6对象包含对象包含又称为对象嵌套,即一个对象的属性也是一个对象包含其他对象的对象称为复杂对象(ComplexObject)或复合对象(CompositeObject)类之间的包含关系实现了关系模型中的“is-part-of”联系一个类的属性可以是一个基本类也可以是一个一般类12.2面向对象语言面向对象语言是面向对象程序设计语言的扩展,包括对象定义语言(ObjectDefinitionLanguage,ODL)和对象操作语言(ObjectManipulateLanguage,OML),其中OML又分为对象查询语言(ObjectQueryLanguage,OQL)和对象控制语言(ObjectControlLanguage,OCL)12.3对象关系模型在关系数据库和SQL上添加面向对象特性的对象-关系数据库,既保持了关系数据库系统非过程化的数据存取方式和数据的独立性,继承了关系数据库原有的数据管理能力,又增加了数组、集合等有继承性及对象标识的面向对象特性的数据模型和对这些类型操作的能力,因此对象-关系数据库比面向对象数据库更普遍12.3.1嵌套关系嵌套关系模型是关系模型的一个扩展,也就是说,关系可以存储在关系中,一个复杂对象就可以用嵌套关系的一个元组来表示12.3.2复杂类型对象关系数据库在基本数据类型的基础上提供了诸如数组、集合、记录等复杂数据类型,元组的属性中可以包含复杂的数据类型集合类型:一组相同类型元素组成的满足一定要求的有序集合被称为集合类型,又称为聚集类型集合类型一般分为以下5种集合类型(SetType):一组有相同类型的元素无序无重复的集合多重集合类型:也称为包集合(Multiset/BagType),一组具有相同类型的元素无序有重复的集合列表集合(ListType):一组类型相同的元素有序且可以重复的集合,但集合中元素位置可变,可按位置访问或更改数组类型(ArrayType):一组类型相同的元素有序且可以重复的集合,元素也可按位置访问或更改,但元素位置是不可变的字典类型(DictionaryType):由一组“<码,值>”(<k,v>)对构成的无序无重复的集合,一般用于索引结构结构类型(StructuredType):又称为元组类型(TupleType)或行类型(RowType),是一组有密切关系但属性属于不同数据类型的数据所构成的元组【例12-2】在购买记录中有一个购买日期为MyData类型,为购买日期和购买记录定义如下:CREATETYPEMyDate(dayINTEGER,monthINTEGER,yearINTEGER)CREATETYPEList(clothing-NoINTEGER,addressMyString,dateMyDate,phoneSETOF(INTEGER),buyerSETOF(MyString))CREATETABLElistOFTYPEList大对象类型(LargeObject,LOB):对象关系数据库支持大对象的存储大对象类型分为以下4种:二进制数据大对象类型(BinaryLargeObject,BLOB):一般存储音频、图像数据等字符型数据大对象类型(harLargeObject,CLOB):一般存储长字符串、文本型数据等字节字符型数据大对象类型(NCharLargeObject,NCLOB)二进制文件(BinaryFILE,BFILE):存储在数据库外的操作系统文件中,是只读的,不能参与数据库的事务12.3.3引用类型引用类型又叫参照类型,简称REF类型,它具有面向对象程序设计语言提供的对对象的引用功能【例12-3】在网上服装销售系统中,要对部分顾客信息进行引用,可以定义如下:buyerSETOF(REF(Customer))引用类型一般有两种实现方式:一种是对类型的引用,另一种是对元组的引用【例12-4】VIP对Person的引用限制在Customer表中的元组中,其定义如下:VIPREF(Person)SCOPECustomer12.3.4继承类型类型继承:类型继承是对象-关系数据库中类型之间最基本的关联。【例12-5】设人的类型定义为Person,用类型继承的方法定义管理员和顾客的类型Seller和Customer如下:CREATETYPEPerson(nameMyString,social-securityINTEGER)如果希望管理员和顾客有不同于Person的属性存在,可以自定义Seller和Customer类型如下:

CREATETYPESeller(numberINTEGER,departmentMyString)UNDERPersonCREATETYPECustomer(numberINTEGER,addressMyString,phoneINTEGER)UNDERPerson【例12-6】当管理员购买自己服装店中的服装时,用类型继承的方式定义员工顾客的类型Seller-Customer如下:CREATETYPESeller-CustomerUNDERSeller,Customer【例12-7】使用换名子句AS重新对员工顾客的类型Seller-Customer定义如下:CREATETYPESeller-CustomerUNDERSellerWITH(numberASSeller-No),CustomerWITH(numberASCustomer-No)【例12-8】将员工顾客的类型Seller-Customer看作是“叶节点”,则定义如下:CREATETYPESeller-CustomerUNDERSellerWITH(numberASSeller-No),CustomerWITH(numberASCustomer-No)FINAL;表继承:与类型继承概念相似,子表的类型必须是超表类型的子类型,即超表中的每个属性都出现在子表中。【例12-9】设有表Person,定义其子表seller和customer如下:CREATETABLEPerson(nameMyString,social-securityINTEGER)CREATETABLEseller(numberINTEGER,departmentMyString)UNDERPeopleCREATETABLEcustomer(numberINTEGER,addressMyString,phoneINTEGER)UNDERPeople【例12-10】子表seller-customer可以定义如下:CREATETABLEseller-customerUNDERsellerWITH(numberASseller-No)customerWITH(numberAScustomer-No)12.4面向对象设计和关系设计从面向对象属性到关系属性对象元素关系模型元素域域类表接口无属性列标识符码操作(具有存储过程范型)存储过程操作(具有存储功能范型)存储功能关联外码或表关联类表和两个指向关联的类所生成的外码继承表或外码依赖无实现无引用无对象元素和关系模型元素的对应关系将对象模型转换成关系模型的转换规则:(1)类的转换:一个类或对象可以直接转换成关系数据库中的一个表,属性类型则映射成数据库中的域(2)继承的转换:类中父类与子类的继承关系也不能直接映射到关系数据库中,有3种方法将继承关系映射到单个表中,即整个继承关系被转换成一张表,把子类中的属性合并到父类中,将父类映射成一个表,通过表中的列来区分不同的类。每个类映射成一个表,继承关系中的每个类都会生成单独的表,子类的表和父类的表通过外码关联,外码同时作为子类表的主码每个具体的类映射成一个表,即只有继承关系中的叶子节点类才会转换成表,父类不进行转换,每个非叶子节点的类属性所生成的列会对应到叶子类的表中。(3)多重关系的转换:类的关系映射中,一对一的关系一般不多,一对多的关系在数据库中也能直接实现,但是多对多的关系要进行分解关联转换规则一对一单向的关联转化时会生成一个外码,外码的方向和关联的方向一致,父表的主码会对应成子表的外码。而双向的关联则会生成两个外码,一般只需在一个表中保留外码,将关联属性转到此表中,删除另一个表中的外码。一对多不管是单向还是双向,都只在多端表中生成外码,多端持久类生成的表为子表,父表的主键会对应成子表的外码。例如每个服装店都可以有多个雇员,将服装店与雇员的雇佣关系表现在雇员表中,即雇员的属性中加上店名一项,或是按照下面多对多的方式映射成表多对多将对象之间的关联行为单独地映射到一张表中,此表的属性由两个对象的主关键字和关联属性构成多重关系的转换规则(4)关联的转换:类或对象的数据耦合性较低时可直接映射成数据库中的表,不必为对象之间或类之间的关系建立表,也不必设计数据的完整性;若数据之间有一定的耦合性时,则可以用SQL视图为关系建立临时的表聚集的转换,即类或对象之间存在整体与部分的关系时,关系映射成的表中关联到子表的关键词可以为空,映射成表后建立一对多的关系,并设置数据完整性规则,采用级联修改和忽略插入删除组合的转换,主从关系的聚集,关系映射成的表中关联到子表的关键词不能为空,映射成表后建立一对多的关系,并设置数据完整性规则,修改和删除都采用级联和忽略插入。(5)关联类的转换:一些复杂的关联关系本身也有一些属性和操作,这种关联关系一般用一个类来表示,称其为关联类。将两个相关联的类转换成表的过程中,可以将关联类单独转换成表。面向对象中对象的标识:对象根据其存活的时间可以分为挥发性对象和持久化对象挥发性对象:瞬态标识符,只有在创建它的程序正在执行时才合法,一旦程序结束,对象被删除,其标识符就没有意义了。持久性对象:持久化对象标识符,在程序结束后仍然有效,持久(Persistent)程度大概分以下3种(1)过程内部持久(Intra-procedure)(2)程序内部持久(Intra-program)(3)程序之间持久(Inter-program)

关系模型与对象关系模型的区别关系模型采用的数据模型要求数据有较高的结构化,是面向机器的语法数据模型;只能处理非嵌套事务,引起数据的冗余,不利于查询和更新;连接过多不同的关联表,造成操作时间较长,在事务发生故障时,数据库的恢复比较困难对象关系模型能够支持复杂对象,保护数据的完整性;支持类型及表的继承,有效地减少了数据的冗余;允许嵌套属性的存在,能够以更少的花费、更快的速度建立并维护数据库;由于复杂对象的属性和操作被封装在一起,类型与类型之间可以继承,相应减少了关系模型中表之间的连接操作12.5与复杂类型有关的查询经过对SQL语句进行扩展,SQL可以处理复杂类型的查询基于关系值的属性路径表达式聚组与析组(1)基于关系值的属性:扩展后的SQL允许用于计算关系值的表达式出现在关系名能够出现的任何地方【例12-11】创建购买记录list表如下:CREATETABLElist(clothing-NoINTEGER,addressMyString,dateMyDate,phoneSETOF(INTEGER),buyerSETOF(REF(Customer)))【例12-12】查询电话为“12345678”服装店的位置。SELECTaddressFROMlistWHERE"12345678"INphone【例12-13】查询每款服装购买者的名字。SELECTA.clothing-No,B.nameFROMlistASA,A.buyerASB聚集函数(如min()、max()和count())是一个以属性为集合,将其作为参数并返回的函数。它们可以用于任何以关系值为返回结果的SELECT表达式中。【例12-14】计算每款服装的购买人数。SELECTclothing-No,COUNT(buyer)FROMlist

(2)路径表达式:同计算关系值表达式一样,路径表达式也可以出现在SELECT、WHERE和FROM子句中【例12-15】定义管理员-购买记录表s-list如下:CREATETABLEs-list(sellREF(seller))UNDERlist【例12-16】找出所有管理员的名字。SELECTFROMs-list路径表达式【例12-17】查询所有服装的所有购买者的名字。SELECTA.nameFROMs-list.buyerASA

【例12-18】查找员工号为“123”的员工售出的服装号。SELECTs-list.clothing-NoFROMs-listWHERE

s-list.sell.number="123

温馨提示

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

评论

0/150

提交评论