第8章对象数据库系统(2008).ppt_第1页
第8章对象数据库系统(2008).ppt_第2页
第8章对象数据库系统(2008).ppt_第3页
第8章对象数据库系统(2008).ppt_第4页
第8章对象数据库系统(2008).ppt_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

1 第8章对象数据库系统 2 本章重要概念 1 1 新一代DBS的两条途径 ORDBS OODBS 2 OO的数据类型系统 基本类型 五种复合类型 引用类型 对象联系图的成分及表示方法 数据的概化 特化 继承性 3 UML的类图 用类图表达类 关联 关联类 概化 特化 聚合 3 本章重要概念 2 4 平面关系 嵌套关系 复合对象 对象关系模型的定义 两个级别的继承性 引用类型的定义 ORDB的查询语言 路径表达式 嵌套与解除嵌套 Oracle中查询的两种技术 5 ODMG标准 OODBS的定义 ODMG对象模型的主要内容 ODMG2 0标准的ODL和OQL 6 OODB与RDB ORDB的比较 4 第8章对象数据库系统 1 8 1面向对象的数据类型系统8 2对象联系图8 3使用UML类图来概念对象建模8 4ORDB的定义语言8 5ORDB的查询语言8 6OODBS的基本概念8 7ODMG对象模型8 8ODMGOQL8 9OODB ORDB与RDB的比较8 10小结 5 第8章对象数据库系统 2 第一代DBS 层次 网状数据库系统第二代DBS 关系数据库系统这两代DBS的应用领域主要在商务领域 其特点是所处理的事务比较小 诸如存款取款 购票订票 财务管理 仓库管理 人事管理 统计管理等 随着计算机应用领域的拓广 这两代DBS已不能适用新的应用需要 譬如多媒体数据 空间数据 时态数据 复合数据等 同时 传统数据库的数据结构比较简单 不能支持新的数据类型和嵌套 递归的数据结构 因此 这两代DBMS很难满足CAD CAM CASE 图像处理 GIS等新的应用领域的需要 为适应新的应用需要 应提出新的数据模型 数据库系统 6 第8章对象数据库系统 3 对于第二代以后的新一代DBS 有两种观点 这两种观点虽然都是从OO技术和DB技术相结合的角度考虑 但方法不一样 1989年9月 一批专门研究OO技术的学者著文 面向对象数据库系统宣言 提出继第一 二代DBS后 新一代DBS将是OODBS 即在面向对象程序设计语言中引入数据库技术 而另外一批长期从事关系数据库研究的学者在1990年9月著文 第三代数据库系统宣言 提出不同的看法 认为新一代DBS是从关系DBMS自然地加入OO技术进化到具有新功能的结果 从这两种观点出发 各自研制了一批DBS 7 8 1OO的数据类型系统 1 基本类型 整型 浮点型 字符 字符串 布尔型和枚举型复合类型行类型 不同类型元素的有序集数组类型 相同类型元素的有序集合列表类型 相同类型元素的有序集合 并且允许有重复的元素包类型 相同类型元素的无序集合 并且允许有重复的元素集合类型 相同类型元素的无序集合 并且所有的元素必须是不同的引用类型 8 8 1OO的数据类型系统 2 表8 1汇集类型的差异 9 8 2对象联系图 8 2 1对象联系图的成分8 2 2数据的概化 特化 10 8 2 1对象联系图的成分 1 11 P258图8 1 8 2 1对象联系图的成分 2 12 概化 数据的概化 特化 generalization specialization 是对概念之间联系进行抽象的一种方法 当在较低层上抽象表达了与之联系的较高层上抽象的特殊情况时 就称较高层上抽象是较低层上抽象的 概化 而较低层上抽象是较高层上抽象的 特化 这种特化联系是一种 是 isa 的联系 图8 2带概化边的对象联系图 8 2 2数据的概化 特化 13 8 3使用UML类图来概念对象建模 8 3 1统一建模语言 UML 概述8 3 2用类图表达类和关联8 3 3用类图表达关联类8 3 4用类图表达概化 特化8 3 5用类图表达聚合 14 8 3 1UML概述 在20世纪90年代中期 Booch Rumbaugh和Jacobson等三位专家源于早先的方法和符号 但并不拘泥于早先的方法和符号 设计了一个标准的建立模型语言 他们把这个成果称为 统一建模语言 UnifiedModelingLanguage 缩写为UML 并把UML版本交给OMG ObjectManagementGroup 组织 在1997年推出UML1 0和UML1 1版 确定UML为面向对象开发的行业标准语言 并得到了各大厂商的支持和认证 UML能表达系统多方面的透视 这些图有类图 ClassDiagram 用例图 Use CaseDiagram 状态图 StateDiagram 组件图 ComponentDiagram 等9种 15 8 3 2用类图表达类和关联 1 表8 2类图与ER图中术语的区别 16 类图中的基本成分是类和关联 1 类被表示为由三个部分组成的方框 上面部分给出了类的名称 中间部分给出了该类的单个对象的属性 下面部分给出了一些可以应用到这些对象的操作 2 关联是对类的实例之间联系的命名 相当于ER模型中的联系类型 与关联有关的内容有 关联元数 与关联有关的类的个数 称为关联元数或度数 关联角色 Role 角色名可以命名 也可以不命名 就用类的名字作为角色名 重复度 Multiplicity 重复度是指在一个给定的联系中有多少对象参与 即是关联角色的重复度 重复度类似于ER模型中实体基数的概念 但这是两个相反的概念 8 3 2用类图表达类和关联 2 17 P258图8 1 18 1 TEACH 8 3 2用类图表达类和关联 3 19 8 3 2用类图表达类和关联 4 20 8 3 3用类图表达关联类 21 8 3 4表达概化和特化 1 例8 8 P352 22 8 3 4表达概化和特化 2 23 8 3 4表达概化和特化 3 1 鉴别器 指定概化的基础 2 概化表示了继承性联系 3 抽象类和具体类 没有或有直接对象的类 4 子类的语义约束 overlapping 重叠 子类的对象集可以相交 disjoint 不相交 子类的对象集不可以相交 complete 完备 超类中的对象必须在子类中出现 imcomplete 非完备 超类中的对象可以不在子类中出现 24 8 3 5用类图表达聚合 聚合 aggregation 表达了成分对象和聚合对象之间 ispartof 一部分 的联系 25 8 4ORDB的定义语言 8 4 1从关系模型到对象关系模型的演变8 4 2数据类型的定义8 4 3继承性的定义8 4 4引用类型的定义 26 8 4 1到对象关系模型的演变 1 27 University uno uname city staff fno fname age president fno fname age 8 4 1到对象关系模型的演变 2 嵌套关系和复合对象的实例 28 嵌套关系和复合对象无法表达递归的结构 使用 引用 reference 的技术解决类型定义中的递归问题 引用相当于指针 图8 13类型构造示意图 8 4 1到对象关系模型的演变 3 29 传统的关系模型中属性只能是基本数据类型 而在对象关系模型中 属性还可以是复合类型 复合类型有五种 结构 或行 数组 列表 多集和集合 后面四种在数据类型定义时 要用到array listof multiset和setof等关键字 在具体使用时 复合类型的值的表示方法如下 行值的表示 值1 值2 值n 数组值的表示 array 值1 值2 值n 列表值的表示 list 值1 值2 值n 多集值的表示 multiset 值1 值2 值n 集合值的表示 set 值1 值2 值n 8 4 2数据类型的定义 30 继承性可以发生在类型一级或表一级 1 类型级的继承性CREATETYPEPerson namevarchar 10 social numberchar 18 CREATETYPEStudentUNDERPerson degreevarchar 10 departmentvarchar 20 CREATETYPETeacherUNDERPerson salaryinteger departmentvarchar 20 CREATETYPETeachingAssistantUNDERStudent Teacher 8 4 3继承性的定义 1 31 2 表级的继承性CREATETABLEpeopleOFPerson CREATETABLEstudentsofStudentUNDERpeople CREATETABLEteachersOFTeacherUNDERpeople CREATETABLEteaching assistantofTeachingAssistantUNDERstudents teachers 8 4 3继承性的定义 2 32 8 4 3继承性的定义 3 33 子表和超表应满足下列两个一致性要求 超表中每个元组最多可以与每个子表中的一个元组对应 子表中每个元组在超表中恰有一个元组对应 并在继承的属性上有相同的值 可以采用有效的方法存储子表 在子表中不必存放继承来的属性 超表中的主键除外 因为这些属性值可以通过基于主键的连接从超表中导出 有了继承的概念 模式定义更符合实际 8 4 3继承性的定义 4 34 在SQL3中 引用类型有两种方式 在创建类型时 类型中某属性可以是对一个指定类型的对象的应用 该属性可以用下列方式定义 属性名ref 类型名 或 属性名setof ref 类型名 在创建表时 要指明引用类型的属性将引用指定类型的哪一个表 其方式如下 引用类型的属性名WITHOPTIONSSCOPE表名这里对一个指向表的元组的引用范围 SCOPE 的限制是强制性的 它使用的方式与外键类似 8 4 4引用类型的定义 1 35 P271图8 16对象联系图 8 4 4引用类型的定义 2 36 CREATETYPEPerson social numberchar 18 namevarchar 10 ageinteger sexchar 1 CREATETYPEFacultyUNDERPerson fnochar 10 salaryinteger works forref University teachsetof ref Coursetext 8 4 4引用类型的定义 3 37 CREATETYPEUniversity unochar 10 unamevarchar 20 cityvarchar 20 presidentref Faculty staffsetof ref Faculty editsetof ref Coursetext CREATETYPECoursetext cnamevarchar 20 textnamevarchar 20 teacherref Faculty editorref University 8 4 4引用类型的定义 4 38 CREATETABLEpeopleOFPerson CREATETABLEfacultiesOFFaculty works forWITHOPTIONSSCOPEuniversities teachWITHOPTIONSSCOPEcoursetexts CREATETABLEuniversitiesOFUniversity presidentWITHOPTIONSSCOPEfaculties staffWITHOPTIONSSCOPEfaculties editWITHOPTIONSSCOPEcoursetexts CREATETABLEcoursetextsOFCoursetexts teacherWITHOPTIONSSCOPEfaculties editorWITHOPTIONSSCOPEuniversities 8 4 4引用类型的定义 5 39 上述定义中的关键字ref是不可省的 如果没有ref词 那么表之间是递归嵌套 在系统中是不可实现的 但有了ref词后 表示引用的是关系中元组的标识符 即 元组的地址 这样就能实现递归结构了 一般 系统在具体实现引用类型时 有两种方式供选择 可以用表的主键来实现对表中元组的引用 表中每个元组有一个元组标识符作为隐含属性 对元组的引用就是引用这个元组标识符 另外 子表隐含地继承这个元组标识符属性 就像它从父表中继承其他属性一样 8 4 4引用类型的定义 6 40 8 5ORDB的查询语言 8 5 1对SELECT语句的新规定8 5 2嵌套与解除嵌套8 5 3复合值的创建和查询8 5 4Oracle中查询的两种技术8 5 5函数和过程 41 扩充的SQL对SELECT语句作出了以下三条规定 1 允许用于计算关系的表达式可出现在任何关系名可以出现的地方 比如FROM子句或SELECT子句中 这种可自由使用子表达式的能力使得充分利用嵌套关系结构成为可能 2 在SELECT语句中 应为每个基本表设置一个元组变量 然后才可引用 否则语句将不做任何事情 这是因为在传统的SQL语言中 在语句里把基本表看成是元组变量直接与属性名连用 求出属性值 这对于非计算机用户来说是很不习惯的 因而在ORDB中 把这件事纠正过来了 8 5 1对SELECT语句的新规定 1 42 例8 12检索讲授MATHS课 采用 MathematicalAnalysis 教材的教师工号和姓名 SELECTF fno F fnameFROMfaculiesASFWHERE MATHS MathematicalAnalysis INF teach 例8 13检索上海地区各大学超过50岁的教师人数 可用下列语句表达 SELECTU uname count SELECT FROMU staffASFWHEREF age 50 FROMuniversitiesASUWHEREU city shanghai 8 5 1对SELECT语句的新规定 2 43 3 在对象联系图中 从已知的属性值找未知的属性值时沿途经过的属性名构成的式子称为 路径表达式 对路径表达式的使用 有这样两点规定 当属性值为单值或结构值时 属性的引用方式仍和传统的关系模型一样 在层次之间加园点 当路径中某个属性值为集合时 就不能连着写下去 譬如 在某大学里检索教师姓名 就不能写成U staff fname 因为这里staff是集合值 不是单值 此时应为staff定义一个元组变量 8 5 1对SELECT语句的新规定 3 44 例8 14检索上海地区的大学校长姓名 SELECTU uname U president fnameFROMuniversitiesASUWHEREU city shanghai 例8 15检索上海地区各大学超过50岁的教师姓名 可用下列语句表达 SELECTU uname F fnameFROMuniversitiesASU U staffASFWHEREU city shanghai ANDF age 50 这里设表universities的元组变量为U 元组分量U staff仍是一个表 也起个元组变量名为F 8 5 1对SELECT语句的新规定 4 45 例8 16检索复旦大学每个教师上课所用的教材及其编写的学校 SELECTF fname C textname C editor unameFROMuniversitiesASU U staffASF F teachASCWHEREU uname FudanUniversity 这个查询也可用另外一种形式表达 SELECTF fname C textname C editor unameFROMfacultiesASF F teachASCWHEREF works for uname FudanUniversity 8 5 1对SELECT语句的新规定 5 46 例8 17检索使用本校教材开课的教师工号 姓名及所在学校 可用下列语句表达 SELECTU uname F fno F fnameFROMuniversitiesASU U staffASF F teachASCWHEREC editor uname U uname 这个查询也可用另外一种形式表达 SELECTF work for uname F fno F fnameFROMfacultiesASF F teachASCWHEREF works for uname C editor uname 8 5 1对SELECT语句的新规定 6 47 将一个嵌套关系转换成1NF的过程称为 解除嵌套 例8 18例8 17中的SELECT语句的结果显示是一个1NF关系 形式如表8 3所示 8 5 2嵌套与解除嵌套 1 48 反向过程即将一个1NF关系转化为嵌套关系称为 嵌套 嵌套可以用对SQL分组的一个扩充来完成 例8 19在例8 17中 如果我们希望查询结果为嵌套关系 那么可在属性 fno fname 上对关系进行嵌套 语句如下 SELECTU uname set F fno F fname asteachersFROMuniversityASU U staffASF F teachASCWHEREC editor uname U unameGROUPBYU uname 此查询结果为非1NF的嵌套关系 如表8 4所示 8 5 2嵌套与解除嵌套 2 49 8 5 2嵌套与解除嵌套 3 50 例8 20嵌套关系sc name cs course score date 元组形式 ZHANG set DB 80 1 July 2000 OS 85 1 January 2001 如果想将元组插入到关系sc中 可以用下列语句实现 INSERTINTOscVALUES ZHANG set DB 80 1 July 2000 OS 85 1 January 2001 在查询中任何需要集合的地方就可以列举出一个集合 SELECTname count cs FROMscWHEREnameINset WANG LIU ZHANG 8 5 3复合值的创建和查询 51 Oracle中处理复合值 譬如表中的表 查询时 有两种处理技术 表积技术 tableproduct 这种技术类似于传统SQL中的联接查询 但操作的两个表是不同的级别 具有从属的关系 嵌套游标技术 nestedcursor 这种技术类似于传统SQL中的嵌套查询 但嵌套的形式和内容有所不同 是在SELECT子句中嵌有第二层循环 8 5 4Oracle中的查询技术 1 52 例8 21检索每所大学里超过50岁的教师工号和姓名 其表积形式的查询语句如下 SELECTu uname f fno f fnameFROMuniversitiesu table u staff fWHEREf age 50 这个查询的嵌套游标形式写法如下 SELECTu uname CURSOR SELECTf fno f fnameFROMtable u staff fWHEREf age 50 f tabFROMuniversitiesu 8 5 4Oracle中的查询技术 2 53 例8 22检索上海地区每所大学里低于30岁的教师所授课程的课程名和使用的教材名 其表积形式的查询语句如下 SELECTu uname f fname ame c textnameFROMuniversitiesu table u staff f table f teach cWHEREu city shanghai ANDf age 30 其嵌套游标形式的查询语句如下 SELECTu uname CURSOR SELECTf fname CURSOR SELECTame c textnameFROMtable f teach c c tabFROMtable u satff fWHEREf age 30 f tabFROMuniversitiesuWHEREu city shanghai 8 5 4Oracle中的查询技术 3 54 例8 23在例8 17中 检索使用本校教材开课的教师工号 姓名及所在学校 若用ORACLE表积形式 其语句如下 SELECTu uname f fno f fnameFROMuniversitiesu table u staff f table f teach cWHEREc editor uname u uname 其嵌套游标形式的查询语句如下 SELECTu unameCURSOR SELECTf fno f fnameFROMtable u satff fWHEREu uname SOME SELECTc editor unameFROMtable f teach c f tabFROMuniversitiesu 8 5 4Oracle中的查询技术 4 55 1 SQL函数和过程例8 24嵌套关系sc name cs course score date 如果想定义一个函数 给定一个学生 返回其选修课程的门数 CREATEFUNCTIONcourse count namevarchar 10 RETURNintegerBEGINDECLAREa countinteger SELECTcount B cg FROMscASBWHEREB name nameRETURNa count END 8 5 5函数和过程 1 56 SELECTA nameFROMscASAWHEREcourse count A 8 例8 25例8 24的函数也可以写成一个过程 CREATEPROCEDUREcourse count proc innamevarchar 8 outa countinteger BEGINSELECTcount B cg INTOa countFROMscASBWHEREB name nameEND 可以使用语句来调用过程 DECLAREa countinteger CALLcourse count proc WEN a count 8 5 5函数和过程 2 57 2 外部语言程序SQL3允许用户用诸如C或C 等程序设计语言来定义函数 这种方式定义的函数将比SQL中定义的函数效率要高 那些无法在SQL中执行的计算也可以由这些函数执行 例8 26对于例8 24中的SQL函数 现在可以这样指定 CREATEFUNCTIONcourse count namevarchar 10 RETURNintegerLANGUAGECEXTERNALNAME usr avi bin course count 例8 27对于例8 25中的SQL过程 现在可以这样指定 CREATEPROCEDUREcourse count proc innamevarchar 10 outa countinteger LANGUAGECEXTERNALNAME usr avi bin course count proc 8 5 5函数和过程 3 58 3 过程的构造SQL3中处理与通用程序设计语言相当的构造的部分称为 持久存储模块 PSM 主要有以下一些语句 1 复合语句其形式为 BEGIN END 在BEGIN和END之间可以包含多条SQL语句 还可以在复合语句中声明局部变量 2 重复语句重复语句有WHILE语句和REPEAT语句两种 其语法如下 8 5 5函数和过程 4 WHILE条件DO语句序列ENDWHILE REPEAT语句序列UNTIL条件ENDREPEAT 59 3 FOR循环语句例8 28DECLAREsumintegerDEFAULT0 FORrASSELECTscoreFROMscWHEREs s4 DOSETsum sum r scoreENDFOR上述程序在FOR循环开始执行时隐式地打开一个游标 并且用它每次获得的一行的值存入FOR循环变量 例子中的r 中 8 5 5函数和过程 5 60 4 条件语句例8 29IFr score 60THENSETl l r scoreELSEIFr score 75THENSETm m r scoreELSESETn n r score这段代码中假定l m n是整型变量 r是行变量 如果用这段IF THEN ELSE代码替换掉例8 28中FOR循环 SETsum sum r score 的行 则循环将按照低 中 高的成绩分别计算该学生三个档次的成绩和 8 5 5函数和过程 6 61 5 CASE语句CASE语句类似于C C 语言 在第3章习题3 9中已看到过CASE表达式的表示形式 6 异常的处理SQL3种有发信号通知 异常条件 的概念 以及声明 句柄 handler 来处理异常 譬如 DECLAREout of stockCONDITIONDECLAREEXIThandlerFORout of stockBEGIN END在BEGIN和END之间的语句可以执行信号 signal out of stock来引发一个异常 这个句柄说明 如果条件发生 将会采取动作终止BEGINEND中的语句 8 5 5函数和过程 7 62 例8 30过程findCourse是找给定课程 由参数cno指定 的所有直接和间接的先修课的集合 并将结果集中课程号存储到称为cour的关系中 这个关系已存在 关系course c cname pc 已在第3章的例子中给出 那里是用递归查询来实现的 下面是这个过程的代码 CREATEPROCEDUREfindCourse incnochar 4 BEGINCREATETEMPORARYTABLEnewcourse pc char 4 CREATETEMPORARYTABLEtemp pc char 4 INSERTINTOnewcourseSELECTpc FROMcourseWHEREc cno 8 5 5函数和过程 8 63 REPEATINSERTINTOcourSELECTc FROMnewcourse INSERTINTOtemp SELECTpc FROMnewcourse courseWHEREnewcourse pc course c EXCEPT SELECTpc FROMcour DELETEFROMnewcourse INSERTINTOnewcourseSELECT FROMtemp DELETEFROMtemp UNTILNOTEXISTS SELECT FROMnewcourse ENDREPEAT END 8 5 5函数和过程 9 64 8 6OODBS的基本概念 8 6 1ODMG标准8 6 2OODBS的定义8 6 3OODB的基本概念 65 什么是ODMG标准 基于对象的 把对象作为基本构造 而不是像SQL3中看到的是基于表的 把表作为基本构造 ODMG标准的五个核心概念对象是基本的数据结构每个对象有一个永久的标识符对象可以被指定类型和子类型对象状态由数据值与联系定义对象行为由对象操作定义 8 6 1ODMG标准 66 定义8 2一个OODBS应该满足两个标准 它是一个DBS 具备DBS的基本功能 譬如持久性 辅存管理 数据共享 事务管理 一致性控制及恢复 它也是一个OOS 是针对OOPL的持久性对象存储管理而设计的 充分支持完整的面向对象概念和机制 譬如用户自定义数据类型 自定义函数 对象封装等必不可少的特点 典型的OODBMS ObjectStore Ontos O2 Gemstone Objectivity PostVersant 8 6 2OODBS的定义 67 对象 由一组变量 消息和方法组成 类 相似对象的集合 继承性 子类继承超类的所有性质 单重继承性 多重继承性 对象标识 OID 唯一标识对象 对象包含 一个对象由几个对象组成 则该对象包含它的成员对象 8 6 3OODB的基本概念 1 68 8 6 3OODB的基本概念 2 69 8 7ODMG对象模型 8 7 1对象和文字8 7 2接口 类和继承8 7 3类外延 关键码和工厂对象8 7 4ODMGODL 70 对象 object 和文字 literal 区别 对象既包含一个对象标识 又包含一个状态 state 或当前值 而文字只有一个值 没有对象标识 1 对象的特征 OID 该对象在系统范围内的惟一标识 Name 用来在程序中表示该对象 Lifetime 该对象是持久对象还是暂留对象 Struct 该对象是原子对象还是汇集对象 8 7 1对象和文字 1 71 2 对象的结构汇集对象 汇集对象有数组 列表 包 集合和字典等五种 原子对象 指 用户定义的对象 对象类型 类 的定义由三部分组成 属性 联系 操作 3 文字的结构原子文字 对应于基本数据类型 结构文字 对应于基本类型或结构类型 汇集文字 是对象或者值的汇集 但是汇集本身没有对象标识 8 7 1对象和文字 2 72 1 接口和类在ODMG2 0对象模型中 采用关键字 接口 Interface 来代替关键字 类型 Type 和 类 Class 接口是不可实例化的 即对于接口不能直接创建对象 但它们可用于定义操作 且这些操作可以被特定应用中用户定义的对象所继承 对象模型中保留了关键字class 类 表示用户说明的形成数据库模式的类声明 用于创建应用对象 8 7 2接口 类和继承 1 73 定义8 3接口是对一个对象类型的抽象行为的详细描述 它指定了操作签名 用来指定操作名 参数类型及返回值 接口可以有状态特性 属性和联系 但是接口中的这些状态是不能被继承的 接口也是不可实例化的 即对于接口定义是不能创建对象的 定义8 4类是对一个对象类型抽象行为和抽象状态的详细描述 并且类是可实例化的 即对于类定义 可以创建单独的对象实例 8 7 2接口 类和继承 2 74 2 行为继承和扩展继承接口主要用于声明可以被类或者其它接口所继承的抽象操作 这称为 行为继承 即 接口继承 用符号 表示 行为继承要求超类型是一个接口 子类型既可以是一个类 也可以是另一个接口 另一种继承称为 扩展继承 即 类继承 用关键字extends来指定 它用来严格地继承类中状态和行为 在扩展继承中 超类型和子类型都必须是类 并且不允许通过 扩展 进行多重继承 然而 对于通过 的行为继承允许进行多重继承 这样 一个接口可以从多个不同的接口中继承行为 一个类通过 可以从多个接口中继承行为 但通过 extends 一个类最多只能从一个类中继承行为和状态 8 7 2接口 类和继承 3 75 定义8 5由类中所有的持久对象构成的集合 称为 类外延 命名了类外延 也就相当于创建了一个集合对象 类外延也用于自动地为超类型的类外延和子类型的类外延之间强制一种集合 子集合 Set Subset 的关系 一个带有类外延的类可以拥有一个或多个关键码 key 关键码由一个或多个特性 属性和联系 组成 在该类外延中 对于每个对象这些特性值是惟一的 定义8 6工厂对象 factoryobject 定义为可以用来通过它的操作生成或者创建单独对象的对象 8 7 3类外延 关键码和工厂对象 1 76 例8 33下面的代码列出了ODMG2 0对象模型中一个工厂对象的接口 interfaceObjectFactory Objectnew interfaceDateFactory ObjectFactory exceptionInvalidDate Datecalendar date inunsignedshortyear inunsignedshortmonth inunsignedshortday raises InvalidDate Datecurrent 8 7 3类外延 关键码和工厂对象 2 77 P271图8 16对象联系图 8 7 4ODMGODL 1 78 8 7 4ODMGODL 2 例8 34可以用ODMGODL来定义 形式如下 classPerson extentpersonskeysocial number attributestringsocial number attributestringname attributeintegerage attributestringsex classFacultyextendsPerson extentfacultieskeyfno attributestringfno attributeintegersalary relationshipUniversityworks forinverseUniversity staff relationshipSetteachinverseCoursetext teacher integernum teach raises noTeach 79 8 7 4ODMGODL 3 classUniversity extentuniversitieskeyuno attributeintegeruno attributestringuname attributestringcity relationshipFacultypresident relationshipSetstaffinverseFaculty works for relationshipSeteditinverseCoursetext editor integernum staff classCoursetext extentcoursetexts attributestringcname attributestringtextname relationshipFacultyteacherinverseFaculty teach relationshipUniversityeditorinverseUniversity edit 80 8 8ODMGOQL 8 8 1OQL中的SELECT语句8 8 2OQL表达式的附加格式8 8 3OQL中对象的赋值和建立8 8 4C 语言的绑定 81 P271图8 16对象联系图 8 8 1OQL中的SELECT语句 1 82 8 8 1OQL中的SELECT语句 2 例8 35 检索大学里授课门数超过3门的教师 要求显示大学校名和教师姓名 SELECTuniversity name F works for uname faculty name F nameFROMfacultiesFWHEREF num teach 3 检索上海地区大学中教师开设课程的课程名 可用下列语句表达 SELECTDISTINCTC cnameFROMuniversitiesU U staffF F teachCWHEREU city shanghai 83 8 8 1OQL中的SELECT语句 3 上述语句也可以用子查询形式表达 但子查询是出现在FROM子句中 SELECTDISTINCTC cnameFROM SELECTUFROMuniversitiesUWHEREU city shanghai D1 SELECTFFROMD1 staffF D2 D2 teachC 84 8 8 1OQL中的SELECT语句 4 这个语句也可用在WHERE子句中嵌有子查询的形式 SELECTDISTINCTC cnameFROMcoursetextsCWHEREC teacherIN SELECTFFROMfacultiesFWHEREF works forIN SELECTUFROMuniversitiesUWHEREU city shanghai 85 8 8 1OQL中的SELECT语句 5 检索复旦大学的教师 要求按年龄降序排列 若年龄相同按工资升序排列 该查询语句是 SELECTFFROMuniversitiesU U staffFWHEREU uname FudanUniversity ORDERBYF ageDESC F salary 查询年龄最大的五位教师姓名值 SELECTF fno F nameFROMfacultiesFORDERBYF ageDESC 0 4 检索上海地区各大学中教师开课的课程名 要求显示校名 教师名 课程名 SELECTStruct U uname set F name set C cname FROMuniversitiesU U staffF F teachCWHEREU city shanghai 86 8 8 2OQL表达式的附加形式 1 1 量词表达式全称量词表达式的句法 FORALLxINS C x 存在量词表达式的句法 EXISTSxINS C x 例8 36 检索存在60岁以上教师的大学校名 SELECTDISTINCTU unameFROMuniversitiesUWHEREEXISTSFINU staff F age 60 检索教师年龄全在50岁以下的大学校名 SELECTDISTINCTU unameFROMuniversitiesUWHEREFORALLFINU staff F age 50 87 8 8 2OQL表达式的附加形式 2 2 使用聚集操作和分组子句的SELECT语句例8 37 检索每个年龄段教师平均授课门数 SELECTF age avgNum AVG SELECTP F num teach FROMpartitionP FROMfacultiesFGROUPBYF age 检索以40岁为界的两个年龄段的教师平均授课门数 SELECTlow high avgNum AVG SELECTP F num teach FROMpartitionP FROMfacultiesFGROUPBYlow F age 40 88 8 8 2OQL表达式的附加形式 3 检索至少有一位教师年龄超过90岁的大学的编号 校名和教师人数 SELECTU uno U uname U num staff FROMuniversitiesUGROUPBYU uno U unameHAVINGMAX SELECTF ageFROMpartitionU U staffF 90 这个查询根据大学来分组 在HAVING子句中 挑选至少有一位教师年龄超过90岁 即教师中最大年龄超过90岁 的哪些组 然后再去求每组中有多少教师 89 8 8 2OQL表达式的附加形式 4 3 集合运算符例8 38检索教师人数不到1000人 但工资低于1500元的人数超过500人的那些大学的编号和校名 SELECTU uno U unameFROMuniversitiesUGROUPBYU uno U unameHAVINGU num staff 500 90 8 8 3对象的赋值和建立 1 这里考虑如何把OQL和它的宿主语言 C 相连 1 对宿主语言变量赋值传统SQL需要在元组分量和宿主语言变量之间传递数据 而OQL则不同 可以很方便地把表达式的结果值赋给任何合适类型的宿主语言变量 例8 39检索大于60岁的教师可用下列语句 oldFaculties SELECTFFROMfacultiesFWHEREF age 60 并且oldFaculties的值将成为这些Faculty对象的集合 91 8 8 3对象的赋值和建立 2 2 从聚集中提取元素获取集合或者包的每个成员是比较复杂的 但比传统SQL基于游标的方法要简单 首先 我们需要把集合或者包转换成列表 这可以用带ORDERBY子句的方法 见前面例8 35的 例8 40检索大于60岁的教师 要求查询结果按工资 年龄降序排列 可用下列语句实现 facultyList SELECTFFROMfacultiesFWHEREF age 60ORDERBYF salaryDESC F ageDESC 92 8 8 3对象的赋值和建立 3 例8 41假定我们想写一个C 函数来打印每个教师的工资 年龄 姓名和工号 该函数的描述如下所示 facultyList SELECTF FROMfacultiesFWHEREF age 60ORDERBYF salaryDESC F ageDESC numberOfFaculty COUNT facultyList for i 0 i numberOfFaculty i faculty facultyList i cout faculty salary faculty age faculty name faculty fno n 93 8 8 4C 语言的绑定 1 C 语言的绑定 binding 指明了从ODL构造如何映射到C 构造 这是通过C 的一个类库完成的 对于ODMG标准 要求加入到C 的类库都使用前缀 d 表示DB类 来处理数据库的类声明 对模式中的每个数据库类都定义了一个类d Ref 这样 d Ref类型的程序变量既可以用来表示类T的持久对象 也可以用来表示T的暂留对象 在类库中指定了各种抽象类和模板类 例如抽象类d Object指定了所有对象都可以继承的操作 抽象类d Collection指定了汇集的操作 譬如d Set d List d Bag d Array 以及d Dictionary等 这些和ODMG对象模型中的汇集类型 参见8 2 1节 相对应 因此 程序员可以创建例如d Set 类型的类 94 8 8 4C 语言的绑定 2 C ODL不仅允许用户使用数据库的类库所提供的构造来指定一个数据库模式的类 也允许用户使用C 的构造来指定数据库模式的类 可以使用一些基本类型 譬如d Shot UShot d Long和d Float等 除此之外 还有一些结构化的文字类型 譬如d String d Interval d Date d Time 以及d Timestamp 对于OML 绑定重载new的操作 能够用于创建持久对象或暂留对象 譬如通过下列操作实现 d Reff new DB1 Liming Faculty C 绑定还允许使用库类d Extent来创建类外延 extent 例如编写下面的代码 d ExtentAllPersons DB1 但是读者应注意 在C 绑定中不支持关键码约束 并且任何关键码的检查必须在类的方法中编程实现 95 8 9OODB与RDB ORDB的比较 8 9 1OODB与RDB在概念设计上的区别8 9 2OODB与ORDB的比较 96 8 9 1OODB与RDB的区别 1 OODB与RDB在概念设计阶段主要有以下三个区别 1 联系的处理在OODB中 联系是通过使用联系特性和包括相关对象的oid的参照属性来处理 在RDB中 联系是通过匹配值的属性来指定的 一般是外键和主键 由于RDB中属性不允许是多值 被限定为单值 因此 M N联系不可以直接地表示 而必须表示成单独的关系 表格 在OODB中 包含属性的二元联系的映射不是直接的 因为设计者必须选择属性应该被包括在哪个方向上 更希望通过创建一个单独的类来表示 即使用关系型的方法来表示联系 这种方法也可以用在n 2的n元联系上 97 8 9 1OODB与RDB的区别 2 2 继承性的处理在OODB中 继承的结构是内建在模型中 因此使用继承构造即可获得映射 譬如用接口继承 和类继承 EXTENDS 在RDB中 由于在基本的联系类型中不存在内建的构造 因此需要靠程序员来构造 譬如通过具有相同的

温馨提示

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

评论

0/150

提交评论