您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 北京邮电大学软件工程研究生的课程---数据库设计开发-0-4
北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4对象关系数据库•传统关系型仅支持简单数据类型;不支持数组、嵌套和递归的数据结构,给新型数据模型-面向对象的数据模型提供了应用背景。•面向对象的程序设计思想和技术促进了面向对象的数据模型的实现和应用-OODBS(面向对象数据库)。•习惯于‘填表’方式的客户不太愿意接受对象模型,而且面向对象数据库系统与编程语言集成度高,没有统一可行标准;OODBS只占很小的市场分额。•以关系数据库和SQL为基础扩展关系模型-对象关系数据库(ORDBMS)的发展满足了许多应用需求。北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4对象关系数据库•ORACLE、DB2UDB、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.2ORACLE对象关系库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《数据库设计与开发》讲义1.4.1面向对象数据模型•面向对象数据库系统(ObjectOrientedDatabaseSystem,OODBS)是数据库技术与面向对象程序设计方法相结合的产物;面向对象程序设计方法的主要活动在建立对象和对象之间的联系;面向对象数据库系统一般依赖于一个面向对象的程序设计语言.一个面向对象数据库系统是一个持久的、可共享的对象库的存储和管理者;而一个对象库是由一个OO模型所定义的对象的集合体。•面向对象数据模型是用面向对象观点来描述现实世界实体的逻辑组织、对象间限制、联系.面向对象程序设计语言中建立的对象自动保存在磁盘上即OODBS面向对象数据库的用户主要是应用软件系统软件开发专业程序员北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.1面向对象数据模型•面向对象数据模型的主要观点:对象:对象是基本的数据结构,现实世界的任一实体都被统一模型化为一个对象,每个对象有一个永久标识;对象可以被指定为一个给定类型,还可以定义为其它对象的子类型;封装:每一个对象是其状态与行为的封装。封装的状态为属性,行为为方法。对象与外部通信一般只能通过显式的消息传递。继承:子类型继承父类型的所有特性和行为.面向对象的核心观点构成OO模型的基础,没有像关系模型那样的规范说明。如果与面向对象数据库相比,RDBMS可以称为面向表的数据库。北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.1.1对象与标识•对象是由一组数据结构和在这组数据结构上的操作的程序代码封装起来的基本单位,包括:属性、方法和消息。•面向对象的数据库系统在逻辑上和物理上从面向记录上升为面向对象、面向可具有复杂结构的一个逻辑整体。•面向对象数据库中的每一个对象都有一个唯一的不变的标识(OID)。创建对象时系统就给它赋予一个OID,直到它被删除。•外部与对象的通信只能通过消息,隔离了对象的实现与对象的应用,提高数据独立性。•查询属性值通过调用方法,不象关系系统那样使用SQL,不够方便灵活。ORDBMS中不支持封装,可即席查询北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.1.2类和类层次•相似对象的集合称为类,每个对象称为它所在类的一个实例,一个类中的所有对象共享一个定义,它们的区别仅在与属性的取值不同.类本身也可以看作一个对象(类对象).•面向对象数据模型提供类层次结构,一个面向对象数据库模式可能有多个类层次(超类和子类),在一个类层次中,一个类继承其所有(直接和间接的)超类的全部属性、方法和消息.超类是子类的抽象,子类是超类的特殊化.对相似对象的重复定义十分浪费,将相似对象分组形成一个“类”不同类的对象可以共享他们公共部分的结构和特性北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.1.2类和类层次•类层次可以动态扩展,一个新的子类能从一个或多个已有类导出。•面向对象数据库中,类是“型”,对象是某一类的一个“值”.类属性的定义域可以是任何类(基本类或包含属性和方法的一般类)。•面向对象数据库模式是类的集合,类可能有多个类层次。例如:一个学校应用的面向对象数据库,其中有教职员工和学生两个类,这两类都有身份证号、姓名、性别、住址等属性,也有相同的方法和消息。统一定义教职员工和学生的公共属性、方法和消息部分,称为一个类“人”;分别定义各自的特殊属性、方法和消息部分,分别称为教职员工类和学生类,教职员工类和学生类定义为人的子类。北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.1.3继承和嵌套•子类继承超类的特性,避免许多重复定义.这种继承性有两优点:是建模的有力工具;提供信息重用机制.封装和继承导出多态性.•子类可以定义自己特殊的属性、方法和消息,在定义这些特殊的属性、方法和消息时可能与超类或多个超类之间发生冲突.这种冲突由系统解决,不同系统使用不同的冲突解决方法.•一个对象属性可以是另一个对象称为对象的嵌套.这样一来,不仅类之间具有层次结构,而且某一个类内部也具有嵌套层次结构,形成对象横向和纵向的复杂结构.不像RDBMS中的平面结构北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.1.4面向对象数据库•在OODB中,与对象模型密切相关的是面向对象数据库语言。OODB语言主要包括对象定义语言(ODL)和对象操纵语言(OML),对象操纵语言一个重要子集是对象查询语言(OQL)。•OODB语言一般应具备类的定义与操纵、操作/方法的定义、对象的操纵功能。•面向对象数据库语言的研制是OODB系统开发中的重要部分,人们试图扩充面向对象程序设计语言OOPL的查询语言或者扩充SQL的功能,目前还没有像SQL那样的关于面向对象数据库语言的标准。不同的OODBMS其具体的数据库语言各不相同。RDBMS中有数据定义DDL、数据操纵DML、数据控制DCL北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.2ORACLE对象关系库(对象关系模型)•对象关系模型支持用户类型定义(ORACLE称对象类型;INFORMIX称行类型;DB2UDB称用户定义类型).一个表是包含用户定义类型的多个行.•对象关系模型允许一个行包括一个行值汇集(如数组或单个列自身是一个表).•面向对象数据库中,只能通过对象的方法操纵对象,在对象关系模型中,所有对象被看作是公共的而并非私有的,通过SQL即可操纵对象,当然也可使用用户定义的函数.显然,对象关系模型违反第一泛式规则显然,对象关系模型没有面向对象数据模型和关系模型那样严格北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.2ORACLE对象关系库(一个例子)职工号姓名职务家属关系姓名0001张家口职员妻子李小玫儿子张冠李0002柴米油经理妻子陆续琴0003郝成功职员妻子朱那亚儿子郝乃军女儿郝佳欣家属属性有内部数据结构,对象类型每个行中包含多个值,汇集类型北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.2.1ORACLE中对象类型•一个对象类型有多个类型属性,ORACLE中对象类型由Createtype语句创建.例:createtypenamesex_tasobject(namechar(8),sexchar(2));/createtableemployees(eidchar(4),enamenamesex_t,jobchar(6));insertintoemployeesvalue(‘0001’,namesex_t(‘赵子龙’,’男’),’经理’);selecte.eid,e.ename.name,e.ename.sexfromemployeesewheree.job=‘业务员’;SQL*plus中创建对象必须有/前面‘表名.’不能省略typename(属性值)称为对象构造器北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.2.1ORACLE中对象类型•创建对象的一般格式:CREATETYPEtypenameASOBJECT(属性名类型[,属性名类型…]);(informix中用createrowtyperowname(),行类型)•若ORACLE中表的行包含对象类型,则称为对象表(informix中称类型表).采用如下形式定义表:CREATETABLEtablenameOFtypename[([属性名NOTNULL][,属性名NOTNULL…][,PRIMARYKEY(属性名[,属性名…])])];•DROPTYPEtypename[FORCE];DROPTABLEtablename;可以是其他用户已经定义的类型,由此形成对象的嵌套和依赖typename对象中属性即成为表中属性北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.2.1ORACLE中对象类型•例:createtypeemployee_tasobject(eidchar(4),enamenamesex_t,jobchar(6));createtableemployeesofemployee_t(primarykey(eid));•对象表(包含行对象employee_t和列对象ename)无名顶层列employees顶层属性eidenameJobename属性ename.nameename.sex行10001赵子龙男经理行20002张翌德男职员行30003孟可飞女职员北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.2.1ORACLE中对象类型•可用嵌套的点号访问一个对象的属性,无名顶层列可以用VALUE()形式引用行对象.select*fromemployeesewheree.job=‘经理’;selectvalue(e)fromemployeesewheree.job=‘经理’;selecte.eid,e.jobfromemployeesewheree.ename=namesex_t(‘孟可飞’,’女’);eidename(name,sex)job0001namesex_t(‘赵子龙’,’男’)经理value(e)(eidename(name,sex)job)employee_t(0001namesex_t(‘赵子龙’,’男’)经理)行对象列对象对象构造器北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.2.1ORACLE中对象类型•INSERT和UPDATE同样可以使用对象构造器.insertintoemployeesvalues(‘0004’,namesex_t(‘胡作为’,’男’),null);updateemployeesesete=employee_t(‘0004’,namesex_t(‘胡有为’,’男’),‘职员’)whereeid=‘0004’;•ORACLE为每个行对象提供一个唯一标识(对象标识符).一个表的列可被定义为REF(引用)的内部数据类型,允许它‘指向’一个对象表的行对象.对象的REF与对象自身具有不同类型.北京邮电大学软件学院郭文明2003.06《数据库设计与开发》讲义1.4.2.1ORACLE中对象类型createtypec_tasobject(…);createtypea_tasobject(…);createtypep_tasobject(…);createtypeo_tasobject(ordnoint,monthchar(2),cidchar(3),aidchar(3),pidchar(
本文标题:北京邮电大学软件工程研究生的课程---数据库设计开发-0-4
链接地址:https://www.777doc.com/doc-145256 .html