资源预览内容
第1页 / 共54页
第2页 / 共54页
第3页 / 共54页
第4页 / 共54页
第5页 / 共54页
第6页 / 共54页
第7页 / 共54页
第8页 / 共54页
第9页 / 共54页
第10页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1.4 对象关系数据库 传统关系型仅支持简单数据类型;不支持数组、 嵌套和递归的数据结构,给新型数据模型-面向 对象的数据模型提供了应用背景。 面向对象的程序设计思想和技术促进了面向对象 的数据模型的实现和应用-OODBS(面向对象数据 库)。 习惯于填表方式的客户不太愿意接受对象模 型,而且面向对象数据库系统与编程语言集成度 高,没有统一可行标准; OODBS只占很小的市场分 额。 以关系数据库和SQL为基础扩展关系模型-对象关 系数据库(ORDBMS)的发展满足了许多应用需求。郭文明 2003.06.051.4 对象关系数据库 ORACLE、DB2 UDB、INFORMIX都推出ORBMS, ANSI/ISO 发布的SQL-99标准是一个对象关系 标准。 1.4.1 面向对象数据模型1.4.1.1对象与标识1.4.1.2类和类层次1.4.1.3继承和嵌套1.4.1.4面向对象数据库 1.4.2 ORACLE对象关系库1.4.2.1ORACLE中对象类型1.4.2.2ORACLE中汇集类型1.4.2.3PL/SQL过程、用户定义函数和方法1.4.3 对象关系数据库1.4.3.1对象联系1.4.3.2ORDB数据定义1.4.3.3ORDB数据查询1.4.3.4三种产品的对象 关系特征郭文明 2003.06.051.4.1 面向对象数据模型 面向对象数据库系统(Object Oriented Database System, OODBS)是数据库技术与面向对象程序设计方法相 结合的产物;面向对象程序设计方法的主要活动 在建立对象和对象之间的联系;面向对象数据库 系统一般依赖于一个面向对象的程序设计语言. 一个面向对象数据库系统是一个持久的、可共享 的对象库的存储和管理者;而一个对象库是由一 个OO模型所定义的对象的集合体。 面向对象数据模型是用面向对象观点来描述现实 世界实体的逻辑组织、对象间限制、联系.面向对象程序设计语言中建立的对象自动保存在磁盘上即OODBS面向对象数据库的用户主要是应用软件系统软件开发专业程序员郭文明 2003.06.051.4.1 面向对象数据模型 面向对象数据模型的主要观点:对象:对象是基本的数据结构,现实世界的任 一实体都被统一模型化为一个对象,每个对象有 一个永久标识;对象可以被指定为一个给定类型 ,还可以定义为其它对象的子类型;封装:每一个对象是其状态与行为的封装。 封装的状态为属性,行为为方法。对象与外部通 信一般只能通过显式的消息传递。继承:子类型继承父类型的所有特性和行为.面向对象的核心观点构成OO模型的基础,没有像关系模型那样 的规范说明。 如果与面向对象数据库相比,RDBMS可以称为面向表的数据库。郭文明 2003.06.051.4.1.1对象与标识 对象是由一组数据结构和在这组数据结构上的操 作的程序代码封装起来的基本单位,包括:属性 、方法和消息。 面向对象的数据库系统在逻辑上和物理上从面向 记录上升为面向对象、面向可具有复杂结构的一 个逻辑整体。 面向对象数据库中的每一个对象都有一个唯一的 不变的标识(OID)。创建对象时系统就给它赋予 一个OID,直到它被删除。 外部与对象的通信只能通过消息,隔离了对象的 实现与对象的应用,提高数据独立性。 查询属性值通过调用方法,不象关系系统那样使 用SQL,不够方便灵活。ORDBMS中不支持 封装,可即席查询郭文明 2003.06.051.4.1.2 类和类层次 相似对象的集合称为类,每个对象称为它所在类 的一个实例,一个类中的所有对象共享一个定义, 它们的区别仅在与属性的取值不同.类本身也可 以看作一个对象(类对象). 面向对象数据模型提供类层次结构,一个面向对 象数据库模式可能有多个类层次(超类和子类), 在一个类层次中,一个类继承其所有(直接和间接 的)超类的全部属性、方法和消息.超类是子类的 抽象,子类是超类的特殊化.对相似对象的重复定义十分浪费,将相似对象分组形 成一个“类”不同类的对象可以共享他们公共部分的结构和特性郭文明 2003.06.051.4.1.2 类和类层次 类层次可以动态扩展,一个新的子类能从一个或 多个已有类导出。 面向对象数据库中,类是“型”,对象是某一类的 一个“值”.类属性的定义域可以是任何类(基本 类或包含属性和方法的一般类)。 面向对象数据库模式是类的集合,类可能有多个 类层次。例如:一个学校应用的面向对象数据库,其中有教职员工 和学生两个类,这两类都有身份证号、姓名、性别、住址 等属性,也有相同的方法和消息。统一定义教职员工和学 生的公共属性、方法和消息部分,称为一个类“人”;分别 定义各自的特殊属性、方法和消息部分,分别称为教职员 工类和学生类,教职员工类和学生类定义为人的子类。郭文明 2003.06.051.4.1.3 继承和嵌套 子类继承超类的特性,避免许多重复定义.这种继 承性有两优点:是建模的有力工具;提供信息重用 机制.封装和继承导出多态性. 子类可以定义自己特殊的属性、方法和消息,在 定义这些特殊的属性、方法和消息时可能与超类 或多个超类之间发生冲突.这种冲突由系统解决, 不同系统使用不同的冲突解决方法. 一个对象属性可以是另一个对象称为对象的嵌套 .这样一来,不仅类之间具有层次结构,而且某一 个类内部也具有嵌套层次结构,形成对象横向和 纵向的复杂结构.不像RDBMS中的平面结构郭文明 2003.06.051.4.1.4 面向对象数据库 在OODB中,与对象模型密切相关的是面向对象数 据库语言。OODB语言主要包括对象定义语言( ODL)和对象操纵语言(OML),对象操纵语言一 个重要子集是对象查询语言(OQL)。 OODB语言一般应具备类的定义与操纵、操作/方 法的定义、对象的操纵功能。 面向对象数据库语言的研制是OODB系统开发中的 重要部分,人们试图扩充面向对象程序设计语言 OOPL的查询语言或者扩充SQL的功能,目前还没 有像SQL那样的关于面向对象数据库语言的标准 。不同的OODBMS其具体的数据库语言各不相同。RDBMS中有数据定义DDL、数据操纵DML、数据控制DCL郭文明 2003.06.051.4.2 ORACLE对象关系库(对象关系模型) 对象关系模型支持用户类型定义(ORACLE称对象 类型;INFORMIX称行类型;DB2 UDB称用户定义类 型).一个表是包含用户定义类型的多个行. 对象关系模型允许一个行包括一个行值汇集(如 数组或单个列自身是一个表). 面向对象数据库中,只能通过对象的方法操纵对 象,在对象关系模型中,所有对象被看作是公共的 而并非私有的,通过SQL即可操纵对象,当然也可 使用用户定义的函数.显然,对象关系模型违反第一泛式规则显然,对象关系模型没有面向对象数据模型和关系 模型那样严格郭文明 2003.06.051.4.2 ORACLE对象关系库(一个例子)职工号姓名职务家属 关系姓名 0001张家口职员妻子李小玫 儿子张冠李 0002柴米油经理妻子陆续琴 0003郝成功职员妻子朱那亚 儿子郝乃军 女儿郝佳欣家属属性有内部数据结构,对象类型每个行中包含多个值,汇集类型郭文明 2003.06.051.4.2.1 ORACLE中对象类型 一个对象类型有多个类型属性,ORACLE中对象类 型由Create type语句创建.例:create type namesex_t as object(name char(8),sex char(2);/create table employees (eid char(4),ename namesex_t,job char(6);insert into employees value(0001,namesex_t(赵子龙,男),经理);select e.eid,e.ename.name,e.ename.sexfrom employees ewhere e.job=业务员;SQL*plus中创 建对象必须有/前面表名.不 能省略typename(属性 值)称为对象构 造器郭文明 2003.06.051.4.2.1 ORACLE中对象类型 创建对象的一般格式:CREATE TYPE typename AS OBJECT(属性名 类型 ,属性名 类型);(informix中用create row type rowname(),行类型) 若ORACLE中表的行包含对象类型,则称为对象 表(informix中称类型表).采用如下形式定义表:CREATE TABLE tablename OF typename(属性名 NOT NULL,属性名 NOT NULL,PRIMARY KEY (属性名,属性名); DROP TYPE typename FORCE;DROP TABLE tablename;可以是其他用户已经定义的类型,由此形成对象的嵌套和依赖typename 对象中属 性即成为 表中属性郭文明 2003.06.051.4.2.1 ORACLE中对象类型 例:create type employee_t as object(eid char(4),ename namesex_t,job char(6);create table employees of employee_t(primary key(eid); 对象表(包含行对象employee_t和列对象ename) 无名顶层列employees 顶层属性eidenameJob ename属性ename. name ename.sex 行10001 赵子龙男经理 行20002 张翌德男职员 行30003 孟可飞女职员郭文明 2003.06.051.4.2.1 ORACLE中对象类型 可用嵌套的点号访问一个对象的属性,无 名顶层列可以用VALUE()形式引用行对象.select * from employees e where e.job=经理;select value(e) from employees e where e.job=经理; select e.eid,e.job from employees e where e.ename=namesex_t(孟可飞,女);eid ename(name,sex) job 0001 namesex_t(赵子龙,男) 经理value(e) (eid ename(name,sex) job) employee_t (0001 namesex_t(赵子龙,男) 经理)行 对 象列 对 象对象构造器郭文明 2003.06.051.4.2.1 ORACLE中对象类型 INSERT和UPDATE同样可以使用对象构造器 .insert into employeesvalues(0004,namesex_t(胡作为,男),null);update employees e set e=employee_t(0004,namesex_t(胡有为,男),职员) where eid=0004; ORACLE为每个行对象提供一个唯一标识( 对象标识符).一个表的列可被定义为REF( 引用)的内部数据类型,允许它指向一 个对象表的行对象.对象的REF与对象自身 具有不同类型.郭文明 2003.06.051.4.2.1 ORACLE中对象类型create type c_t as object (); create type a_t as object (); create type p_t as object (); create type o_t as
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号