第15章 面向对象数据库及对象-关系数据库

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
officer part-time-teller full-time-teller part-time-secretary full-time-secretary
DAG
面向对象基本概念
语义模糊
当同一个变量或方法可以从多个父类中继承时,由于 无法确定该变量或方法是从哪个父类继承的,就会产 生语义模糊。 例如类secretary, teller, full-time, part-time中都定义 了变量pay,来代替employee中的salary。在full-time 中,pay(0~10 000)表示年薪,而在 part-time中, pay(0~20)表示每小时付的薪酬。
面向对象基本概念
类层次可以可以用特殊化(ISA)来表示 person
ISA
customer
employee
ISA
officer 子类继承父类的属性
teller
secretary
面向对象基本概念
类层次定义
class person { string name; string address; }; class customer isa person { int credit-rating; }; class employee isa person { date start-date; int salary; }; class officer isa employee { int officer-number; string expense-account-number; };
RDBMS的局限 的局限
类型有限
RDB的类型是系统内置的,用户只能使用固定的 几种。 新的应用需要灵活的类型机制,DBMS应该能够 支持用户定义适合自己应用的数据类型。 类型:数据抽象的一种方式,是一组值的集合以 及在这组值上的操作。
RDBMS的局限 的局限
类型系统的任务
提供一组内在的数据类型 如整数、字符等。 提供定义新的数据类型的手段 数组:聚合同类型数据。 结构:聚合不同类型数据。 类型检查 int x,y x = 10; y = x+’Tom’
面向对象基本概念
OID生成
值:用码来标识对象,是一种面向值的方法,使 对象标识具有值依赖性(关系数据库系统)。 名称:用用户提供的名称作为标识(文件系统)。 内置:对象标识符可以由系统内部自动产生(依 赖于特定系统),也可以来自外部(如人的身份 证)(面向对象数据库系统)。 地址:C++通过对象在内存空间中地址来区分对 象,但不具有持久性。也不能使用二级存储器地 址来作为对象标识符,否则会引起应用对数据的 物理依赖性。
面向对象基本概念
多重继承
person customer secretary
有何弊端?
part-time-teller full-time-teller part-time-secretary full-time-secretary
employee teller officer
面向对象基本概念
person customer secretary teller employee part-time full-time
面向对象基本概念
解决方案
以part-time-teller为例,它的父类是teller与part-time。 方案一: 方案一 part-time-teller中同时包含两个变量,分别命名 为teller.pay与part-time.pay。 方案二:根据类teller与part-time的创建时间选择其一。 方案二 方案三:强制用户在类part-time-teller的定义中显式地作 方案三 出选择。 方案四:将出现语义模糊的情况作为异常错误来处理。 方案四
在SQL中增加复杂类型和面向对象特征。
持久化程序设计语言
对某种现行的面向对象程序设计语言进行扩展。
3W----Who Will Win?
面向对象的语言
市场前景
ODL
SQL3
持久化程序设计语言
嵌入式SQL 嵌入式
宿主语言与数据操纵语言之间的类型系统有所不 同,由程序员负责两者之间的类型转换。 程序员负责编码实现数据从数据库到内存的装入 或写回。
可以使用多重继承来对“角色”来建模
学校数据库中,有person的多个子类,如student, teacher, footballPlayer等,每个对象可以同时属于这些类中的多个,每 个这样的类别被称为一个角色,如student.footballPlayer。
面向对象基本概念
对象标识符( 对象标识符(OID) )
面向对象基本概念
消息和方法
消息并不意味着物理信号的传递,它指的是对象 间请求的传递。可以将消息作为一个过程来实现。 方法是一段代码,其中
只有对象自己的变量才能直接引用。 其它对象的数据只能通过发送消息来引用。 方法可以分为只读和更新两种。 示例:职工对象有年薪变量,可以通过向其发送 annual-salary消息来查询年薪数额。将该消息实现为 一个方法,不同职工(经理、普通职工)年薪计算方 法不同,但提供的外部接口是一致的。从而对象内部 方法的改变不会影响到系统的其它成分。
面向对象基本概念
继承
有些类与类之间具有相似性,具有相同的变量和 消息。 如student有属性name和age,teacher也有属性 name和age。 每个student 都是一个person,因此student 是 person的一个特殊化。 创建类person,student,teacher,其中student 与teacher的共性被抽象为类person。 继承类似于E-R中的特殊化。
只有版本问题解决得好,长事务的处理才有希望。
面向对象基本概念
面向对象模型
一个对象对应着E-R模型中的一个实体。 对象:结构+行为的封装单元。
面向对象基本概念
对象结构
变量:包含该对象数据,相当于E-R模型中的 变量 属性。 消息:当欲查询对象、激活对象、请求对象时, 消息 向对象发送消息,对象对此做出响应。消息可 以有零个或多个参数。 方法:实现一个消息的代码段;一个方法返回 方法 一个值作为对消息的响应。 对象的物理表示只对对象的实现者是可见的。 消息和方法提供了从外部访问对象的唯一途径。
版本与长事务
多版本支持
有些应用如CAD、CASE,需要表示单个实体的多个不 同时期的版本,以便进行比较和重新设计。要求 DBMS能够支持数据的多个版本,并建立自然、方便 的管理机制。目前的RDBMS没有哪一个能够支持。
长事务
当前的有些应用需要锁住某些数据一整天甚或几个星 期,以便进行复杂的设计。这与传统的短事务(数秒 或数分钟内提交)有很大不同。传统的事务管理机制 已不再适合这种要求,需要新的数据一致性维护机制。
新的数据库应用
新的数据库应用
CAD(Computer-aided Desig)
CAD数据依附于某项工程,不但要记录单个组件的数 据项,还要记录各组件之间的相互联系(构成,位 置),以及在设计各阶段数据的不同版本。
CASE(Computer-Aided Software Engineering) Multimedia Database
每个对象是类的一个实例,对象标识符唯一标识 了一个对象。 OID在对象生成时产生,在撤消对象时被注销。 类似于人的身份证,DBTG系统中的DBK。 OID不随对象值的改变而改变。 两个具有相同值的对象其OID是不一样的。 OID可以作为对象的一个字段存储,也可以在一 个对象中引用其它对象的OID。 如person的spouse字段就是另一个person的OID。
持久化程序设计语言
对象的持久性
将一个瞬态对象变为持久的的方法:
(Class)按类持久 按类持久:声明一个类中所有对象都是持久的。 按类持久 简单但缺乏灵活性,有时一个类中可以同时有瞬态和持 久对象。 (Creation)按创建持久 按创建持久:扩展创建瞬态对象的语句来创 按创建持久 建持久对象。 (Marking)按标志持久 按标志持久:所有对象被创建为瞬态的,需 按标志持久 要持久的对象在程序结束前显式地标识为持久的。 (Reference)按引用持久 按引用持久:一个或多个对象被显式地声 按引用持久 明为(根)持久的;其它被根对象引用(直接地或间接 地)到的对象被看作是持久的。
面向对象基本概念
OID示例
Person(name, age, children) 无OID时:(Susan, 50, {(John, 25, {}}) (Peter, 52, {(John, 25, {}}) 无法判断Susan与Peter的孩子是否是同一个人。 更新复杂,如John又有孩子时,需要更新多处。 有OID时:OID1((Susan, 50, {OID3}}) OID2((Peter, 52, {OID3}}) OID3((John, 25, {}})
持久化程序设计语言
对象在数据库中的创建和存储不必经过任何外在 的类型转换。 允许在内存中操纵对象,不必显式地从数据库装 入或写回。 允许编程语言直接操纵数据库中数据,不必经过 数据操纵语言(如SQL)。
持久化程序设计语言
持久化程序设计语言的缺点
由于语言的强大的操纵能力,对数据库的安全性 更容易造成破坏。 由于语言的复杂性使得自动的高级优化难于实现。 对说明性查询语言的支持不够。
面向对象基本概念
实体的每一个属性对应着对象中的一个变量和一 对消息,其中一个用来读取消息,另一个用来更 新消息。 如职工有属性address,可以表示为: address •一个address变量 •一个get-address消息 •一个set-address消息
面向对象基本概念
对象类
许多相似的对象被分组形成一个类;每个这样的 对象称为类的一个实例。 一个类中的所有对象有相同的
DBMS有哪些不足? 有哪些不足? 有哪些不足
代价高 性能低
如何取舍? 如何取舍?
新的数据库应用
传统的数据特征
统一性( Uniformity): 数据的结构相似。 统一性 ( Uniformity): 数据的结构相似 。 一个 表中所有元组都具有相同的属性列。 表中所有元组都具有相同的属性列。 面向记录( Orientation): 面向记录 ( Record Orientation): 数据项由固 定长度的记录组成。 定长度的记录组成。 小数据项( Items): 小数据项 ( Small data Items): 每条记录都很 短。 原子字段( Field): 原子字段 ( Atomic Field): 字段内部不再有其 它结构,字段具有原子性( NF)。 它结构,字段具有原子性(1NF)。
面向对象基本概念
对象包含
车轮
车架
齿轮
Leabharlann Baidu
车闸
轮框
辐条
轮胎
传杆
闸盒
闸线
一个构件可以包含其它构件。 包含其它对象的对象称为复合对象或复杂对象。
面向对象基本概念
对象继承
is-a B A C B
Vs
对象包含
A C is-part-of
类B中的一个对象也是类A中的 一个对象,它继承了类A的所 有属性,同时具有自己的特殊 属性,以及对所继承的方法提 供自己的实现途径。
RDBMS的局限 的局限
结构与行为的分离
RDB中存储的只是实体的数据,而实体的行为则 交由应用程序来编码实现。 现实世界中的实体除了数据结构之外,同时还有 其自身的行为。 如学生应该具有选课的行为。 实体的行为也是实体的属性,应当同实体紧密结 合,由应用来维护是不适合的。
RDBMS的局限 的局限
类A中的一个对象包含类B中的 一个对象。A与B的属性不必类 似,也不必相互继承对方的属 性。类A中的一个对象只能通过 类B的方法来访问B中的变量。
面向对象的语言
如何将面向对象概念与数据库系统结合起来?
两条途径
将面向对象概念作为概念设计阶段工具[示例] 将面向对象概念结合到数据库操纵语言中
扩展SQL
变量类型 消息接口 方法
对象和类是型与值的区别。 类类似于E-R模型中的实体集。
面向对象基本概念
类定义实例
class employee { /*变量*/ string name; string address; int salary; /*消息*/ int annual-salary(); string get-name(); string get-address(); }
新的数据库应用
新的数据特征
大数据项
以兆计的一个数据项。
结构复杂
程序模块、图形、图象、文档、数字媒体流。
操作特殊
编译、旋转、播放、排版。
RDBMS的局限 的局限
表达能力有限
RDB的基本结构是二维表,是一种平面结构,无 法表达嵌套的信息结构。 在CAD等系统中,嵌套大量存在,如机器由很多 部件构成,每个部件又由多个零件构成。 嵌套的平面化可以通过模式分解和连接运算实现。 连接在关系数据库中是十分低效的运算。 XML的存储组织。
相关文档
最新文档