版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020/10/13,1,第2章 对象数据库技术,2.1 对象数据库系统概述,2020/10/13,2,人们通常将数据库的发展分为三个阶段。第一阶段以层次数据库系统和网状数据库系统为代表,这两类系统也称为第一代数据库;第二阶段即是关系数据库系统,关系数据库系统也称为第二代数据库;第三阶段就是对象数据库阶段,对象数据库就是人们通常所说的第三代数据库。对象数据库于20世纪80年代末、90年代初开始兴起,它与传统数据库有着如下区别:,2020/10/13,3, 从数据模型上看,对象数据模型包括“封装”(encapsulation)、“继承”(inheritance)和“多态”(polymorphis
2、m)等基本概念,而关系数据模型和其他传统数据模型不具有这些概念。,2020/10/13,4, 从数据库系统本身来说,对象数据库直接支持创建和管理具有面对象语义的对象应用需要,即面向对象程序设计语言或用面向对象设计风格的应用需要,而传统数据库则难以做到。,2020/10/13,5, 从应用实体角度着眼,前两代数据库的特点主要应用于商务系统,所处理的事务规模较小,例如金融部门的存取款业务、售票系统的定售票事项、业务部门(财务、人事、统计、仓库系统)的具体事务管理等,而对于计算机辅助设计与制造(CAD、CAM),计算机辅助软件工程(CACS)、时态和空间事务处理、多媒体数据管理等就显得无能为力或者力
3、不从心,而面向对象数据库处理起这些问题却相当自然、更加成功,相应的功能更为强大。,2020/10/13,6,由于处理问题的方法不同,ODBS可以分为对象关系数据库系统和面向对象数据库系统。 (1) 对象关系数据库系统(ORDBS) ORDBS的基本特征是在关系数据库系统中加入OO技术从而使得其具有新的功能和应用。,2020/10/13,7,对象关系数据库具有如下的优势: 从事数据库研究与应用的人大多熟悉关系数据库 现有关系数据库具有相当多的用户和顾客,具有主流的商业市场 关系查询语言具有很好的数学支撑,便于进一步研究和推广 现有的关系数据库语言具有广泛使用的工业标准。,2020/10/13,8
4、,(2) 面向对象数据库系统(OODBS) OODBS的基本特征是直接将面向对象程序设计语言引入数据库,完全与已有的数据库系统无关。,2020/10/13,9,面向对象数据库的主要优势在于:支持复杂的软件系统设计和类型更加广泛的数据库应用。 。,2020/10/13,10,2.2 面向对象方法,面向对象方法是人们认识和表示客观事物的一种极其重要的方法,其重要性在于将论及事物的问题空间和解决相应问题的方法空间一并考虑和研究,更符合人们实际进行的认识机理和实践过程。,2020/10/13,11,2.2.1面向对象与面向计算机,1.面向对象方法 “面向对象”(object oriented)一词中的
5、“对象”(object)可以解释为客观世界中的客体。 “面向对象方法”(OO方法)则可以理解为以客观世界中的客体为观察目标的方法。 OO方法学的出发点和基本目标是使人们分析、设计和实现一个系统的方法尽可能接近人们认识该系统的方法,也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。,2020/10/13,12,OO方法学涉及到分析方法、设计方法、思维方法和程序设计方法。其突出特点是通过可构造的手段将客观要求表示出来,用有限的构造手段与有限步骤建立起一个客观世界模型。由于计算机本身可构造的特点,使得面向对象方法所构造的模型从本质上来说可以在计算机上迅速实现,因此面向对象方法成为计算
6、机科学与技术中一种广泛使用和普遍有效的方法。,2020/10/13,13,2.面向计算机方法 OO方法与过去计算机领域中常用的一些方法大相径庭。传统的方法,例如模块化方法、树状的层次结构方法、网状的网络结构方法等,都是以计算机实现为目标,较少考虑其在客观世界中的实际背景,可以称之为“面向计算机方法”(computer oriented)。我们可以将面向对象方法与面相计算机方法进行必要的比较。,2020/10/13,14,2.2.2面向对象方法基本概念,1.对象基本概念 对象(Object)是由一组数据结构和在这组数据结构上的方法(程序代码)封装起来的基本单位。一个对象由属性集合、方法集合和消息
7、集合三部分加上对象标识组成。这些通常称为对象结构。,2020/10/13,15,2.对象结构 对象结构由两个集合和一个标识符组成。 (1)属性集合 对象通常具有若干特征,每个特征称为对象的一个属性(attribute)。属性反映对象的状态与特性,描述对象固有静态性质。,2020/10/13,16,(2) 方法集合 方法(method)是对象行为特性的描述,它定义了允许作用于该对象之上的某种操作,因此,方法也称为操作或行为。方法反映对象固有动态性质,它可以审视并且改变对象的内部状态。,2020/10/13,17,方法的定义包括两部分: 方法的接口 方法的接口用于说明方法的名称、参数和返回值的类型
8、,也称为调用说明。 方法的实现 方法的实现是用程序设计语言编写的一段程序代码,用以实现方法的具体功能,即对象操作的具体算法。,2020/10/13,18,(3)对象标识 在面向对象数据模型中,每个对象都有在系统内有一个唯一且不变的标识符,不允许两个不同的对象具有相同的对象标识符,这种标识符就称为对象标识(object id, OID)。,2020/10/13,19,OID具有如下基本要点: OID一般由系统产生,用户不得修改 OID形式不一定是要人们所容易理解的 OID的意义在于其是指针一级的概念,是一个强有力的数据操作原语,也是对集合、元组和递归等复杂对象操作的基础,2020/10/13,2
9、0,3.对象基本特性 对象具有三个重要特性,即封装性、隐蔽性与稳定性。,2020/10/13,21,(1)封装性 封装(encapsulation)是使对象的外部界面与内部实现之间实行清晰隔离的一种技术,是OO模型的主要特征之一。 封装性作为对象方法中的一个重要原则,通常具有两重含义: 表明对象的全部属性和行为是结合在一起的、不可分割的整体,他们共同组成了对象内部静态与动态的有机活动实体。 表明对象通过封装与外界隔绝,外界无法见到对象的内部表示。对象封装反映了客观世界物体的相对独立性,使得整个世界在有序一致的状态下活动,2020/10/13,22,(2)隐蔽性与界面 对象表示分为内部和外部两种
10、,一种是内部的属性与行为的捆绑,通过封装之后,外部用户是不可见的,这就另外需要一种外部表示,这种外部表示就称为对象界面(interface),外部通过界面认识对象并且与对象实施通信联系。,2020/10/13,23,对象界面实际上就是若干个外部接口,它对外部是开放的并为外部所可见的,而对象封装屏蔽了外界对内部细节的了解,这种屏蔽就称为隐蔽(hiddening)。对象隐蔽有助于外部世界只需要了解简单界面而不需要了解复杂的属性与行为,复杂处理简单化,简化了对象的认识与了解。,2020/10/13,24,(3)稳定性 在对象内部的对象行为是建立在对象属性之上的,即行为服务于属性或行为依赖于属性,这就
11、在对象内部建立起以属性为核心并以行为为附属体的稳定实体,这种现象称为对象的稳定性(stationary)。如对于某棵树,它具有属性:树叶、树干、树茎和树根等,相应这些于这些属性才会有行为:吸收地面水分(树根)、光合作用(树叶)及输送养分(树茎),它们构成了以树的属性为核心的稳定实体。,2020/10/13,25,4.消息 消息(message)是对象与对象之间的联系信息。由于对象的封装性和隐蔽性,对象的消息仅仅作用于对象界面,再通过界面进一步作用于对象内部。,2020/10/13,26, 消息的作用 消息的作用有三:请求对象为其服务;向对象传递消息并对对象操作;反馈服务结果。 消息的组成 消息
12、一般由三部分组成:接收者表示消息所施加作用的对象;操作要求 消息对对象的造作要求;操作参数消息行使操作时作需要的外部数据。 消息的发送与接收 每个对象都可以发送和接收若干消息。面向对象数据模型中的“消息”与计算机网络中传输的消息的含义不同。它是指对象之间的操作请求的传递,而不考虑操作实现细节。,2020/10/13,27,2.2.3 类的概念,类(Class)是对具有共同属性和方法的对象全体的抽象和概括地描述,它相当于关系模型中的关系模式。类给出了属于该类全部对象属性与行为的抽象定义,而此时类中的对象仅是这种类定义中的一个实体,人们称其为该类的实例。类的出现简化了人们对客观世界的了解,众多复杂
13、对象因为有了类而变得相当简单,人们可以对属于类的全体对象进行统一研究而不必对每个对象做个别的复杂的研究。,2020/10/13,28,类之间的基本关系可以分为三种:类的继承关系、类的组合关系和类的通信关系(消息)。继承关系和组合关系是类之间的两个基本关系,反映的是类与类之间静态联系。类之间还可以具有如同对象之间“消息”那样的通信关系,消息反映的类与类之间的动态联系,这里的“消息”和对象与对象之间的消息本质上相同,2020/10/13,29,2.2.4 继承关系,1.类继承概念 类与类之间的层次结构有一个重要的特点,那就是继承(inheritance).继承是指一个子类能够自动的继承其他某些类具
14、有的属性和方法。这是面向对象数据模型中避免重复定义的一个重要机制。如果没有继承性,不同类中的对象中的属性和方法就会出现大量的重复。继承性比较自然地体现了对象与对象之间的is-a联系。,2020/10/13,30,类结构示例,2020/10/13,31,在超类和子类的概念中,如果子类仅限于继承超类中的属性和方法,则定义子类就失去了意义。子类除了能继承超类中的属性和方法外,还可以用增加和取代的途径定义子类所具有的特殊属性和方法。所谓增加就是在子类中定义新的属性和方法;所谓取代就是在子类中重新定义超类中已有的属性和方法。,2020/10/13,32,2.类继承的特性 类继承通常具有下面的四个基本性质
15、。 传递性 单向性 可重用性 包含性,2020/10/13,33,3.继承的分类 (1)单继承和多继承 从子类继承超类的个数考虑,继承可以分为单继承和多继承。 单继承 多继承 (2)选择继承和完全继承 选择继承 完全继承,2020/10/13,34,2.2.5 组合关系,1.组合的概念 组合是类之间不同于继承的另一种重要关系。我们知道,复杂客观事物总可以分解为一些相对简单的基本事物,而这些基本事物的有机整合就构成原来的复杂事物。这种由部分组成整体的关系抽象到面向对象方法中,就是类间的组合(composition)关系。 如果一个类的属性域中的属性可以是另一个类,或属性值是另一个类中的实例以及其
16、子类,则称这两个类之间存在组合关系。,2020/10/13,35,2.组合的语义 类的组合关系是客观事物间“部分组成整体”关系的抽象,所以面向对象方法中的“组合”具有更加广泛的语义。,2020/10/13,36, 组合的部分组成整体 也就是说此时属性值是另一个类。 组合的嵌套性 类由属性集合组成,这些属性的部分或全部的值域又可以是一些带有自己属性集的类,如此等等,构成嵌套。,2020/10/13,37,组合的引用性。人们通常也把组合部分组成整体称为“组合引用”(composition reference),而把属性值在“另一个类的实例中”情况称为“弱引用”(weak reference),弱引
17、用是纯粹的类中实例引用而无任何“整体与部分”的语义的“组合关系”。 组合的递归性 一般而言,组合从原则上讲具有单向层次性质,但在某些情况下也可以具有一定的递归性质,2020/10/13,38,2.2.6面向对象的结构化方法,面向对象方法具有结构化特点,可以用结构化手段建立客观世界模型。 1.四种结构化方式 (1)对象的分类 (2)类间继承结构 (3)类间的组合结构 (4)类间的消息连接,2020/10/13,39,2.类层次结构图 以类为基本元素,以继承和组合为类之间结构手段可以构成一个类层次结构图,进而可以构做类层次结构图(class hierarchy diagram),在这个结构图中,为
18、区分继承与组合两种情况,我们分别用实线和虚线表示之,2020/10/13,40,类层次结构图,2020/10/13,41,2.3 面向对象数据模型,面向对象方法与数据库技术结合,首先就要建立面向对象的数据模型。数据模型通常由三个组成部分:数据结构,数据操作和数据约束,2020/10/13,42,2.3.1基本概念,面向对象数据模型(Object Oriented Data Model,OODM)即是依据面向对象方法所建立的数据模型,其中包括数据模式(数据结构)、建立在模式上的数据操作和数据约束。 (1)数据模式 用对象结构以及类间继承和组合关系建立数据间的复杂结构关系,这种模式结构的语义表示能
19、力远比ER方法与EER方法要强。,2020/10/13,43,(2)数据操作 用对象与类中方法构做模式上的操作,这种操作语义范围远比传统数据模型要强,如可以构做一个圆形类,它的操作可以除查询、修改外,还可以有图形的放大/缩小,图形的移动、图形的拼接等,因此OODM具有比传统数据模型更强的功能。 (3)数据约束 数据约束也是一种方法,一般讲的是一种逻辑型的方法,即是一种逻辑表示式,可以用类中方法表示模式约束。,2020/10/13,44,2.3.2基本模型,1类 “类”实际上可以看作是“对象”的集合,类本身有自身的名称,自己的结构即对象或数据结构说明,关于相应对象执行的操作或方法,接受外部请求即
20、消息。,2020/10/13,45,(1)类的基本描述 类可以进行如下描述: CLASS ,2020/10/13,46,(2)方法定义 方法定义由三个部分组成。 方法署名(signature) 方法署名就是前述的“方法说明”,它包括方法名、参数名和类/型(包括作为第一个参数的目标对象)以及结果的型(类) 方法体(method body)方法体就是方法的实现,即由程序设计语言写的实际代码,这种写方法体的语言就是应用的程序设计语言,亦即数据库系统的宿主语言。 触发器(trigger) 触发器一般指明一种由方法执行而引起的例外(条件)及其处理方法,这是一个可选项。,2020/10/13,47,由上述
21、可知,一个方法的定义格式为: METHOD 触发器用来扩展继承和系统定义方法的语义。方括弧表示其中元素可选。,2020/10/13,48,(3)消息 调用方法就是发送消息,它包括指明方法名、接受该消息的目标对象、方法的参数(实参)。这类似于一般程序设计语言的函数调用。,2020/10/13,49,(4)子类 对于每一个已有的类都可以定义一个或多个子类,它们继承其超类的属性与方法,所以只需要说明其另外或需要重新定义的属性和方法,其超类由关键字SUPPERCLASS说明。,2020/10/13,50,例2-4 一个子类的定义 CLASS Managers SUPERCLASS Employee A
22、TTRIBUTES(Position:String Office:String) METHODS(GetPsition() GetOffice(),2020/10/13,51,2.对象结构 对象结构类似于记录模型中的记录结构。任何一个对象及属性都有一种类型,OODM的类型系统有一组自身定义的基本类型和一些用来递归地构造复杂类型的构成器组成。,2020/10/13,52,(1)基本类型 基础型 整型、字符串和布尔型等。 “类”型 一个类本身就是一种如后所述的构造型,是一种复杂类型,但仍然可以将其作为一个整体看成一个“基础”的型,从而可以像上述基础型一样对待和使用。,2020/10/13,53,(
23、2)构造型 基础型和“类”型是基本型,通过它们,可以使用下述构造器形成各种复杂型(构造型)。 SET 如果T是任意型,则SET也是一种型,其对象是T的对象的一个有限集合。 BAG 如果T是任意型,则BAG也是一种型,其对象是型T的对象的一个“可重复”集合即一个元素可重用的集合,称为一个“袋”或“包”。包与集合的区别就是其中的元素可以重复。例如1,4,1,6是一个包而不是一个集合。,2020/10/13,54, LIST 如果T是任意型,则LIST也是一种型,其对象是T的零个或多个对象的一个序列表,例如,字符串型char实际上是表LIST型的一个速记特例。 ARRAY 如果T是一个型,i是一个正
24、整数,则ARRAY就是一个型,其对象为T的i个对象的一个数组,例如,ARRAY就是长度为10的字符串。,2020/10/13,55, RECORD 设Ti和Fi(i=1,2,n)分别为任意的一个型和该型的一个域(field) 的名字,则 RECORD(F1:T1;F2:T2,Fn:Tn)也为一种型,其对象为分别具有名字Fi和型Ti(i=1,2,n)的域所组成的记录。,2020/10/13,56,2.4 面向对象数据库系统,2.4.1面向对象数据库系统 一个系统要成为数据库系统,其最小需求是: 一个具有优化能力的高级查询语言; 支持持久性和自动的事务并发控制和恢复; 支持复杂数据类型快速和有效的
25、查询、索引和存取。,2020/10/13,57,一个数据库系统要成为OODBS,其最基本的标准是: (1)首先是一个面向对象系统 其出发点是针对面向对象程序设计语言的持久性对象存储管理,其核心是充分支持完整地面向对象概念和机制,例如用户自定义数据类型、自定义函数、对象封装等必不可少的OO方法特征,与当前流行的OO程序设计语言取得一致。,2020/10/13,58,(2)其次是一个数据库系统,借助扩充传统数据库语义,使之与核心OO数据模型协调,以支持传统数据库系统中的所有数据库特征和功能,例如持久性、辅存管理、数据共享、事务管理、一致性控制及恢复等,2020/10/13,59,按照上述标准,可以
26、将一个OODBS表达为 “面向对象系统数据库能力”,2020/10/13,60,2.4.2面向对象数据库管理系统,OODBMS产生于20世纪80年代后期,其基本特点是: 利用类来描述复杂的对象。 利用类中的封装的方法来模拟对象的复杂行为。 利用继承性来实现对象的结构和方法的重用。,2020/10/13,61,正是由于这些特点,使得OODBMS对一些特定应用领域(如CAD、GIS等),能较好地满足其应用需求。当然,这种纯粹的面向对象数据库系统并不支持SQL语言,在通用性方面失去了优势,因此其应用领域受到了很大的限制。,2020/10/13,62,2.5 面向对象数据操作,2.5.1 数据定义 面
27、向对象数据定义主要是类层次结构定义。类层次结构定义包括如下一些内容: (1)类结构定义 (2) 类方法定义 (3)类间继承与组合定义 另外在类层次结构中还可能包括类中的引用、集簇、hash和分区等定义。,2020/10/13,63,通过类层次结构定义就可以完整构造一个OODM,为此我们构做一个(虚拟的)OSQL语言用来具体表示面向对象的数据操作功能。 上述类层次结构定义中的三个部分一般可用OSQL的如下语句表示: 类创建语句;方法创建语句;类删除语句;方法删除语句;方法修改语句。,2020/10/13,64,1.类创建语句 创建一个新类用下面形式语句定义 CREATE CLASS Classn
28、ame :Superclasses:listofsuperclassespecs :Attributes:listofattributespecs ::Methods:listofmethodspecs,2020/10/13,65,例2-6 类Airplane可用类创建语句定义如下 CREATE CLASS Airplane :Supperclass (Motorize Vehicle, Airborne Vehicle) :Attributes(Capacity :Domain: Integer) (Weight :Inherit From:Motorized Vehicle) (Manuf
29、acturer :Inherit From:Airborne Vehicle) :Methods(Present Coordinates, Airborne Vehicle),2020/10/13,66,2.5.3数据查询,OODBMS中 数据查询所采用的子语言仍选用传统SQL的形式,即选用SELECT, FROM, WHERE子句形式,2020/10/13,67,2.非递归的单操作查询 单操作查询是在单个类层次结构上的查询。我们以图2-13所示的类层次结构图为模型作若干个查询例子,该模型是有关教学中的教务模型,它建立了学生、课程、教授及教师间的关系,其中学生分为大学生(U-student)和
30、研究生(G-sudent),2020/10/13,68,图2-13 一个类层次结构图,2020/10/13,69,例2- 7 查询“年龄大于50岁的教授所教的课程名” SELECT Cname FRO, WHERE C. Teacher. Page50;,2020/10/13,70,例2-8 查询“F.K.Wang所教的学生姓名和年龄” SELECT Sname FROM S,C,R,P WHERE exist S.Study.Teching. PnameF.K.Wang;,2020/10/13,71,例2-9 查询“教室在3号楼教室名为Mary的所教的学生姓名”。 SELECT Sname
31、FROM S, C, R, P WHERE exist S.Study.Classroom. Buildingno = 3AND S. Study. Teching. Paname Mary;,2020/10/13,72,例2-10 查询“三年级大学生的上课教室楼号”。 SELECT Buildingno FROM U, S, C, R WHERE R.Classroom. Study, S, U. Classroom = 3;,2020/10/13,73,2.方法创建语句 创建一个方法可以用下面形式的语句定义 CREATE METHOD methodname :Meters:listorme
32、terspecs :Body:bodyspec,2020/10/13,74,3.类删除语句 删除一个类可以用下述语句实现: DELETE CLASS Classname 该语句的执行是删除“Classname”所指的类,包括结构及其相应数据。,2020/10/13,75,4.方法删除语句 删除一个方法有下述语句实现 DELETE METHOD methodname 该语句的执行是删除“methodname”所指定的方法,包括相应参数和方法体。,2020/10/13,76,5.方法修改语句 可以使用下述语句修改方法: MODIFY METHOD methodname :New methodnam
33、e :Meters: Listofmeterspecs :Body: bodyspecs,2020/10/13,77,2.5.2抽象数据类型,抽象数据类型(Abstract Data Type)简称为ADT,它可以根据应用需要由用户自行定义新的类型。实际上,数据类型作为一种特殊的类,可以用类似于定义类的方法定义数据类型,一般而言可以用创建类型CREATE TYPE定义抽象数据类型,其形式如下: CREATE TYPE Typename : Atlributes: listofatfributespecs : Methods: listofmethodspecs,2020/10/13,78,例如
34、,我们可以定义一个文档类型 CREATE TYPE Docnment Dauthor (listofstring) Ddate (Date) 抽象数据类型有时候也可以定义少量方法。,2020/10/13,79,2.5.3数据查询,1.SELECT语句 OODBMS中 数据查询所采用的子语言仍选用传统SQL的形式,即选用SELECT, FROM, WHERE子句形式,2020/10/13,80,2.非递归的单操作查询 单操作查询是在单个类层次结构上的查询。我们以图2-13所示的类层次结构图为模型作若干个查询例子,该模型是有关教学中的教务模型,它建立了学生、课程、教授及教师间的关系,其中学生分为大
35、学生(U-student)和研究生(G-sudent),2020/10/13,81,图2-13 一个类层次结构图,2020/10/13,82,例2- 7 查询“年龄大于50岁的教授所教的课程名” SELECT Cname FRO, WHERE C. Teacher. Page50;,2020/10/13,83,例2-8 查询“F.K.Wang所教的学生姓名和年龄” SELECT Sname FROM S,C,R,P WHERE exist S.Study.Teching. PnameF.K.Wang;,2020/10/13,84,例2-9 查询“教室在3号楼教室名为Mary的所教的学生姓名”。
36、 SELECT Sname FROM S, C, R, P WHERE exist S.Study.Classroom. Buildingno = 3AND S. Study. Teching. Paname Mary;,2020/10/13,85,例2-10 查询“三年级大学生的上课教室楼号”。 SELECT Buildingno FROM U, S, C, R WHERE R.Classroom. Study, S, U. Classroom = 3;,2020/10/13,86,例2-11 查询“所有课程都在3号教学楼上课的学生姓名”。 SELECT Sanme FROM S,C,R W
37、HERE S.EACH Study. Classroom. Buildno = 3;,2020/10/13,87,例2-12 查询“年龄在18,19,20的学生所修读课程名”。 SELECT Cname FROM E,C WHERE C. Study. Sage IN(18,19,20);,2020/10/13,88,例2-13 查询“1960年以后出生的教授所教的课程名”。 SELECT Cname FROM E,C WHERE C. Teaching. Birthyear(Page)1960;,2020/10/13,89,3.递归的单操作查询,下面以图2-14所示的类层次结构为模型考察带环
38、查询的实例。,2020/10/13,90,例2-14 查询“所有由制造它们的公司的董事长自己驾驶的蓝色汽车”。 SELECT Vechicle. Id FROM Vechicle, Company, Employee WHERE Vechicle(Vechicle: V). manfacuture. President. Drives = V AND Vechicle. Color Blue;,2020/10/13,91,例2-15 查询“所有职工名为Johson的经理”。 SELECT Employee. manager FROM Employee WHERE E. Employee(Rec
39、urse manager). Name Johson;,2020/10/13,92,例2-16查询“所有董事长驾驶的日本汽车公司制造的蓝色汽车”。 SELECT Vechicle. id FROM Vechicle, Company Employee Japannese Antomobile WHERE Vechicle(J is a Japanese Automobile). Manafacture, Drive = J AND Vechicle. Color Blue;,2020/10/13,93,例2-17 查询“所有职工名为Johson的女经理姓名”。 SELECT Female em
40、ployee name FROM Femaleemployee employee WHERE Femaleemployee. Emp;oyee(rescurse manager M) M is a Female AND Employee. name Johsom;,2020/10/13,94,3.多操作查询,多操作查询是在多个类层次结构间的查询。下面以图2-12所示的两个类层次结构相连接的模型做多操作查询。 例2-18 查询“所有住在公司所在城市的职工姓名”。 SELECT Rmployee. name FROM Employee,Company, City WHERE Employee,re
41、sidence company. location;,2020/10/13,95,4.实例的增加、删除和修改,(1)删除 对象删除选用SQL中有关删除的语句类似形式,即 DELETE FROM Range Clause WHERE Condition Clause 其中FROM子句指定了删除的目标类,而WHERE则通过复杂路径表达式给出了所要删除的对象,而DELETE则给出了整个语句的性质。,2020/10/13,96,例2-19 删除学生Lu Ben所修读的所有课程信息。 DELETE FROM C WHERE C. Study. Sname Lu Ben,2020/10/13,97,(2)
42、插入 插入语句也称为增加语句,可以完成对象在类中的插入,对象的插入也选用类似于SQL语句中有关插入的语句: INSERT INTO Target Clause VALUE Instance 其中INSERT给出了语句的性质,INTO指出了插入的目标,最后Instance给出了插入的值。,2020/10/13,98,例2-20 将(P1387,Bob,45)插入到P中。 INSEERT INTO PPno,Pname,Page VALUE(P1387,Bob,45);,2020/10/13,99,(4)修改 修改语句可以完成类中对象的修改,对象修改选用类似SQL语句中有关修改的语句。 UPDAT
43、E Target Clause SET Set Clause WHERE Condition Clause 其中UPDATE给出了修改的目标名,而SET给出了修改的新值,可以是值和可以是公式,WHERE给出了对象的限制条件。,2020/10/13,100,例2-21 将学号为S5381的学生年龄增加一岁。 UPDATE S SET Sage = Sage+1 WHERE Sno S5381;,2020/10/13,101,2.6 对象关系数据模型,OODBS提出后,就有不少人认为,对象数据库将要取代关系数据库,成为下一代数据库的主流,因此,对象数据库成为当时数据库研究的热点之一。但形势发展并没
44、有像所预料的那样。 分析原因,主要是下列几点。,2020/10/13,102,(1)联想访问必不可少 (2)安全性要求放在首位 (3)更换涉及面广泛 (4)原理和标准没有完全一致 正是针对上述问题,人们在研究面向对象数据库的同时,也研究如何借鉴面向对象方法将现有关系数据库进行扩充的问题,这就导致了对象关系数据库的产生与发展。,2020/10/13,103,2.6.1.关系数据模型扩充,传统关系模型中的基本数据结构由三个层面组成:关系元组属性。其联系为: 属性为一些基本的数据类型所规定,例如整型、实型、字符串型等。 元组是属性值的有序集合。 关系是元组的无序集合。,2020/10/13,104,
45、所有的关系模式都要求满足1NF的基本要求,因此传统的关系模型就是一种平面关系模型(Plat Relational Model)。如果在关系模式中突破1NF即规定属性值是不可分解的限制(不允许属性值有还可以分解的结构,即具有复合性质),则就得到了扩充的关系模型,即复杂关系类型(Complete relational type)。,2020/10/13,105,复杂关系类型主要有组合(数据类型)、聚集(数据类型)和引用(数据类型)三种。而将传统关系模式中的数据类型:整型、浮点型、字符型、字符串型、布尔型和枚举型称为基本(简单)数据类型,2020/10/13,106,2.6.2组合类型,如果在平面关
46、系模型中,允许其中的属性既可以是一种关系,而且可以多次交替出现,则就构成组合关系类型(combination relation type),简称为组合类型。组合类型也称为结构关系类型(Structural Relational Type)、联合类型、行类型(Row Type)或元组类型。组合类型以“关系属性关系属性”的嵌套方式突破了1NF的限制。下面是组合类型概念。,2020/10/13,107,例2-22 在教育系统中,大学(University)与教师(Faculty)组成了组合关系: University(uno, uname, city, staff(fno, fname, age)
47、其属性分别表示学校编号、校名、所在城市、教师编号、教师姓名、年龄。属性staff是一个关系类型,表示一所大学的所有教师。这里关系University是一个组合关系。,2020/10/13,108,2.6.3 聚集类型,1.聚集概念与分类 聚集类型(Collection Type)一组相同类型元素组成的并且满足一定要求的集合称为聚集类型。聚集类型也称为集合类型,具体可以分为以下四种: 数组类型(Array Type) 相同类型元素的有序集合,一般而言,数组的大小是预先设置的,例如人名组:Jhon,Raul,Mary,White 列表类型(list Type) 相同类型元素的有序集合,但允许一个元
48、素多次出现。作为特例,字符串类型就是列表类型的简化形式,2020/10/13,109, 包类型(Bag Type) 相同类型元素的无序集合,但允许一个元素出现多次。也称为多集类型,例如成绩集合75,80,80,70,80 集合类型(Set Type) 相同类型元素的无序集合,每个元素只能出现一次,集合类型实际上就是一种关系,因此也称为关系类型。例如课程集合Maths,DB,Physics。,2020/10/13,110,2. 基本类型、组合类型与聚集类型对比,基本数据类型就是关系数据模型中出现的数据类型,例如整型、实型、字符串型等,其特征是属性值不能分解,不允许属性值具有复合性质(例如元组或关
49、系)。 组合类型是一种“规则”的嵌套关系模型,其特征是关系的属性值也可以是一个关系,而且可以出现多次这样的嵌套。 复杂数据类型是一种相当“任意”的复合关系模型,其特征是突破了关系定义上集合与元组必须严格交替出现的限制。,2020/10/13,111,2.6.4引用类型,组合与聚集作为数据类型的一个不足之处是不能表达递归的结构。如果直接用于表示递归结构,就会造成无穷的嵌套,带来语义上很大的混乱,甚至成为不可知,如下图所示。,2020/10/13,112,2020/10/13,113,人们采用“引用”(Reference)的技术解决数据类型中的递归问题,这就提出了“引用(数据类型)”概念。引用相当
50、于程序设计中指针概念,在面向对象技术中称为“对象标识”。引用类型概念可以将数据类型定义中的实例映射扩充到类型值域中的实例映射,提供有关细节的抽象。“引用类型”的实现方式避免了“无穷嵌套”。,2020/10/13,114,下图采用“引用”后的结构示意图。,2020/10/13,115,2.6.5对象与类型,将实体称为对象,将实体型称为对象类型,简称为类型或类。 在这样的观点之下,前述的平面数据类型、组合数据类型和聚集数据类型都可以看做是数据对象类型,简称为数据类型。,2020/10/13,116,有了类型概念,就需要讨论类型之间的联系,其中最基本的是类型之间的继承关系。 数据的泛化和细化 类型间
51、的继承性,2020/10/13,117,2.7 ORDB中的定义语言,2.7.1数据类型定义 例2-25 设有一个学生选课及成绩的嵌套关系如下: SC(name,cg(course,grade,date) 其属性表示学生姓名、课程名、成绩和日期等含义。可以用下列形式定义各种类型 CREATE TYPE MyString char varying; /*定义MyString是变长字符串类型*/ CREATE TYPE MyDate (day integer, Month char(10), year integer, date MyDate);/*定义MyDate是结构类型*/,2020/10/
52、13,118,CREATE TYPE CourseGrade rse Mystring, grade interger, date MyDate);/*定义CourseGrade是结构类型*/ CREATE TYPE StudentCrade setof(CourseGrade); /*定义StudentCourse是结构类型*/ CREATE TYPE StudentCourseGrade e Mystring, cg,studentGrade);/*定义StudentCourseGrade是结构类型*/,2020/10/13,119,在上述基础上再定义关系SC: CREATE TABLE
53、sc of TYPE StudentCourseGrade; /*定义表SC包含了类型结构StudentCourseGrade 的元组*/ 此处表的定义与传统数据库中的表的定义是有区别的,这里允许属性为集合或结构类型。,2020/10/13,120,在上述过程中,也可以不创建中间类型,直接创建所需要的表: CREATE TABLE sc (name MYString, cg setof(course MyString, grade integer, date Mystring));,2020/10/13,121,数据类型系统还支持数组和多集类型,例如: CREATE TYPE NameArra
54、y MyString10 /*定义NameArray是数组类型*/ CREATE TYPE Grades multiset(inteter) /*定义Grades是多集类型,每个成员是整数*/,2020/10/13,122,上述定义Grades是多集类型,多集类型中元素是无序的。如果我们要求是有序的,则可以使用列表类型定义: CREATE TYPE Grades listof(inteter);,2020/10/13,123,例2-26例2-22中大学与教师的嵌套关系: University(uno,unname,city,staff(fno,fname,age) 可用下列形式定义: CREA
55、TE TYPE MyString char varying; CREATE TYPE FacultyRow(fno Mystring, Fname Mystring, age integer);,2020/10/13,124,CREATE TYPE UniversityRow (uno Mystring, uname Mystring, city Mystring, staff setoff(FacultyRow); CREATE TABLE university of TYPE UniversityRow;,2020/10/13,125,2.7.2 .继承性的定义,1.类型级的继承 假设有关
56、于人的类型定义: CREATE TYPE Person(name Mystring, Social_number integer); 如果还需要在数据库中存储学生和教师这些人的其他信息,由于学生和教师也都是人,可以用继承性定义学生类型和教师类型:,2020/10/13,126,CREATE TYPE Students(degree MyString, department Mystring, under Person); CREATE TYPE Teacher(salary integer, department Mystring, under Person);,2020/10/13,127,
57、2.表级的继承性 在对象关系系统中,也可以在表级实现继承性。在上例中,首先定义Person: CREATE TABLE Person (name Mystring, social_number integer); 然后再用继承性定义表students和teachers:,2020/10/13,128,CREATE TABLE Students(degree MyString, department Mystring, under Person); CREATE TABLE Teachers(salary integer, department Mystring, under Person);,
58、2020/10/13,129,子表和超表应当满足下列一致性要求 超表中每个元组最多可以与每个子表中的一个元组对应 子表中的每个元组在超表中恰有一个元组与之对应,并且在继承的属性上有相同的值。,2020/10/13,130,2.7.3引用类型的定义,引用类型有两种方式: 一种是对类型的引用。例如,对人的引用属于类型ref(Person),这里Person是一个结构类型。在我们需要定义球队成员字段时可以定义成: team_list setof(ref(Person) 即对Person对象的引用集合。,2020/10/13,131,一种是对表中元组也可以有引用。例如,对Person表中元组的引用具有
59、类型ref(Person),可以用表的主键来实现对表中元组的应用。也可以表中每一个元组都有一个元组标识符作为隐含属性,对元组的易用简单就是引用这个元组标识符。子表隐含地继承这个元组标识符属性,就像它从父表中继承其他属性一样。,2020/10/13,132,例2-27 例2-22所表示的数据库可用下述方式定义: CREATE TYPE MyString char varying; CREATE TABLE university(uno MyString, uname MyString, city MyString, president ref (faculty), staff setoff (re (faculty), edit setof (ref (coursetext);,2020/10/13,133,CREATE TABLE faculty (fno MyString, fname MyString, salary integer, work_for ref (university), teacher setof (ref (coursetext);,2020/10/13,134,CREATE TABLE coursetext (cname MyString, textname MyString, teacher ref (fac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长春东方职业学院《经济学》2025-2026学年期末试卷
- 阳泉师范高等专科学校《语言与文化》2025-2026学年期末试卷
- 长春建筑学院《初级会计学》2025-2026学年期末试卷
- 园路、广场铺装及园林小品工程施工方案
- 2024年委托检验协议书
- 2024年车辆转让协议书
- 2024年绩效考核年度工作总结
- 2024年大学生酒店实习总结
- 2024年兽医微生物学复习题
- 2024年六年级上册语文专项复习教案
- 药品进货查验管理制度
- 乡镇医院科研管理制度
- DB62T 4085-2019 餐饮服务明厨亮灶建设要求
- 湖南省三支一扶招聘考试真题2024
- 《GPCR信号转导》课件
- 大数据知识产权法课件
- 四级育婴员模拟考试题及答案
- 河北省房屋建筑和市政基础设施工程总承包招标文件示范文本(2025 版)
- 2025年广东佛山市高三一模高考政治试卷试题(含答案详解)
- 毕业设计(论文)-基于Spring Boot的在线问卷调查系统的设计与实现
- 打造卓越的执行力培训课件1
评论
0/150
提交评论