精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 系统分析>>面向对象专题>>面向对象的关系数据库设计

主题:面向对象的关系数据库设计
发信人: connor()
整理人: leeyg(2001-06-05 22:50:06), 站内信件

                面向对象的关系数据库设计

    林凯 赵晓华

  北京市公路局系统使用的是Oracle 7.3关系数据库,即RDBMS。由于我们对整个工程
使用了面向对象的软件工程(OOSE)开发方法学,所以数据库设计也是面向对象的。

一、 概念的区分
  有些人把面向对象的数据库设计(即数据库模式)思想与面向对象数据库管理系统
(OODBMS) 理论混为一谈。其实前者是数据库用户定义数据库模式的思路,后者是数据库
管理程序的思路。用户使用面向对象方法学可以定义任何一种DBMS数据库,即网络型、
层次型、关系型、面向对象?均可,甚至文件系统设计也照样可以遵循面向对象的思路。

  面向对象的思路或称规范可以用于系统分析、系统设计、程序设计,也可以用于数
据结构设计、数据库设计。OOSE自上至下、自始至终地贯彻面向对象思路,是一个一气
呵成的统一体。面向对象的数据库设计只是 OOSE 的一个环节。

二、 数据库设计的重要性
  一般数据库设计方法有两种,即属性主导型和实体主导型。属性主导型从归纳数据
库应用的属性出发,在归并属性集合(实体)时维持属性间的函数依赖关系。实体主导型
则先从寻找对数据库应用有意义的实体入手,然后通过定义属性来定义实体。一般现实
世界的实体数在属性数
1/10 以下时,宜使用实体主导型设计方法。面向对象的数据库设计是从对象模型出发
的,属于实体主导型设计。

  一般数据库应用系统都遵循以下相关开发步骤:1设计应用系统结构;2 选择便于
将应用程序与 DBMS 结合的DBMS体系结构,如RDBMS;3 根据应用程序使用的环境平台,
选择适宜的DBMS(如Oracle)和开发工具(如PB);4 设计数据库,编写定义数据库模式的
SQL程序;5 编写确保数据正确录入数据库的用户接口应用程序;6 录入数据库数据;
7 运行各种与数据库相关的应用程序,以确认和修正数据库的内容。

  对以上各步骤,有几点需要说明:

  (1)这不是瀑布模型,每一步都可以有反馈。

  在公路局系统中,以上各步不仅有反馈、有反复,还有并行处理。比如一些库表
在数据录入时,另一些库表设计还在修改。这与我们的递增式开发方法有关,也与面向
对象的特征有关。

  (2)上述顺序不是绝对的,大多数场合是从第三步开始的。

  (3)对大多数数据库应用系统来说,上述各步中最重要、最困难的不是应用系统设计
而是数据库设计。

三、 DBMS的支持和数据库设计
  很多数据库应用系统开发者不重视数据库设计的原因是:他们太迷信DBMS,认为购
入一个功能强大的 DBMS后数据库设计就不困难、不重要了。一些国内外的数据库教材常
常是在为DBMS的开发厂商做宣传,而很少站在数据库用户角度,从数据库应用系统出发介墒
菘馍杓品椒ā=峁苟琳吒悴磺迨橹薪樯艿氖鞘菘夤芾沓绦虻纳杓扑枷耄故怯γ
这种 DBMS
进行数据库设计的思想。

  其实,DBMS只是给用户为已采用的数据库提供一个舞台,而是否使用这个舞台上的
道具以及唱什么戏,则完全取决于用户的戏剧脚本和导演(开发者)的安排。例如,公路
局系统所使用的数据库管理系统,是以二维表为基本管理单元、支持所有关系代数操
作、支持实体完整性与实体间参
照完整性的全关系型 RDBMS,而我们要在这个舞台上利用上述“道具”设计一个面向对
象的关系数据库。

四、 应用对象模型与RDBMS模型的映射
  数据库设计(模式)是否支持应用系统的对象模型,这是判断是否是面向对象数据库
系统的基本出发点。由于应用系统设计在前,数据库设计随后,所以应用系统对象模型
向数据库模式的映射是面向对象数据库设计的关键。

  1.三层数据库模式面向对象模型的扩展

  一般数据库设计多参照ANSL/SPARC关于数据库模式的3层标准结构提案。最接近物理
数据库的内部模式由 DBMS
提供的SQL来描述。概念模式可以由若干个内部模式聚集而成,它是由数据库用户规范的
一些表的集合。例如,公路局计划处数据库模式、机务处数据库模式等,它们是逻辑数
据库,常常通过库表
ID来界定库边界。一般的概念模式是数据库物理模式作用域的边界,它能实现数据库的
物理意义、特定DBMS
的特殊操作对外部应用程序的信息隐蔽。外部模式是从特定用户应用角度看待的数据库
模式,从不同的应用出发对同一概念模式可以给出多种不同的外部模式。例如:公路绿
化情况查询应用看到的数据库是公路上的树木种类、数量、分布比率等,桥梁隧道状况
查询应用看到的是公路上的桥
梁、隧道长度、个数、路段等,但是它们可能访问的是同一个库表的不同子集。

  当外部应用系统以对象模型进行抽象时,从各个应用出发抽象出的对象模型可以映
射到外部模型上,对此我们不妨称之为外部对象模型。但是,外部模型只是概念模型的
子集,所以面向对象的数据库设计核心在于系统对象模型(不妨称之为概念对象模型)
向数据库概念模型的映射(参见图1) 。

  2.对象模型向数据库表的映射规则

  由于 RDBMS 是以二维表为基本管理单元的,所以对象模型最终是由二维表及表间
关系来描述的。换言之,对象模型向数据库概念模型的映射就是向数据库表的变换过
程。有关的变换规则简单归纳如下:

  (1)一个对象类可以映射为一个以上的库表,当类间有一对多的关系时,一个表
也可以对应多个类。

   图1 三层数据库模式面向对象模型的扩展

  (2)关系(一对一、一对多、多对多以及三项关系)的映射可能有多种情况,但一般
映射为一个表,也可以在对象类表间定义相应的外键。对于条件关系的映射,一个表至
少应有3个属性。

  (3)单一继承的泛化关系可以对超类、子类分别映射表,也可以不定义父类表而让
子类表拥有父类属性;反之,也可以不定义子类表而让父类表拥有全部子类属性。

  (4)对多重继承的超类和子类分别映射表,对多次多重继承的泛化关系也映射一个
表。

  (5)对映射后的库表进行冗余控制调整,使其达到合理的关系范式。

  3.数据库模式要面向应用系统

  我们选择面向对象的系统设计也好,面向对象的数据库设计也好,根本目的是服务
于应用系统的需要。

  以公路局计划处子系统为例。计划处的最大工作量就是处理成堆的报表,因此如何
有效地存取这些报表是计划处数据库设计的关键。考虑到每月上交的报表是同构的,我
们可以创建一张库表去存储同一种报表,例如公路工程月报表。但是又产生另一个问题,涤
没氩檠掣鲈碌墓?BR>工程月报表时,如何从库表中取出数据呢?按照数据库的思想应该有一个主键来标识这张
报表。在公路局的报表里,区别月报表靠上报时间和上报单位,但如果为每条记录都加
上这两个字段,无疑会加大库表冗余,增加查询时间,降低效率。更何况每张报表都有
单位负责人、填表人的属性,那么怎样解决这个问题呢?我们设计了超类对象 X3 表和
流水号表。X3 表和流水号表的表结构如下。

  表1 X3表和流水号表的表结构:

  将它们加入由应用对象模型映射出的数据库概念模型后,得到图2所示的结构。

  每一个应用模块对象对应建立一张流水号表,同一类的报表属同一流水号表,由
流水号表统一管理。流水号表对各分局、处室提交和建立的每一张报表分配一个流水
号,该流水号在整个数据库中是唯一的,因此在库中存放任何一张报表都是明确的。
流水号的数据类型为
Char(10),前4位为表号,后6位为序列号,其中序列号取自
X3表中最大序列号。也就是说,流水号就是对象标识符,报表是一个对象,一个对象
标识符唯一决定一个对象。流水号一旦被分配出去后,在这张报表的生存期内就具有
了永久不变性。无论报表的内容及结构怎么变化,它都不变,直到报表被删除,流水
号才会消失。流水号表是父类,报表
是子类,流水号表之间的联系只能通过 X3 表。5个应用模块对象完全映射到数据库概
念模型中,形成应用对象与数据库对象的一一对应,保持了5个应用对象在目标系统设
计中原有的独立性,具有很好的封装性和信息隐蔽性。尽管流水号表会有一些冗余,
但它是值得的。

  图2 超类对象间关系示意图

五、 面向对象关系数据库设计效果
  在公路局系统设计中,从某种意义上讲,是数据库设计的面向对象特征最终奠定了
整个系统的面向对象性,才使面向对象方法在程序开发阶段全面开花。其效果归纳如下:

  1.数据库结构清晰,便于实现OOP

  由于实现了应用模块对象对数据库对象的完全映射,数据库逻辑模型可以自然且直
接地模拟现实世界的实体关系。公路局用户所处的当前物理世界、系统开发者所抽象的
系统外部功能,与支持系统功能的内部数据库
(数据结构)一一对应,所以用户、开发者和数据库维护人员可以用一致的语言进行沟通。
特别是对多数不了解公路局业务的程序开发人员来说,这种将应用对象与相应的数据对
象封装在对象统一体中的设计方法,大大减轻了程序实现的难度,使他们只要知道加工
的数据及所需的操作即可,而且应用程序大多雷同,可以多处继承由设计人员抽象出来
的、预先开发好的各种物理级
超类。

  2.数据库对象具有独立性,便于维护

  除了数据库表对象与应用模块对象一一对应外,在逻辑对象模型中我们没有设计多
重继承的泛化关系,所以这样得到的数据库结构基本上是由父表类和子表类构成的树型
层次结构,表类间很少有继承以外的复杂关系,是一个符合局部化原则的结构,从而使
数据库表数据破坏的影响控制
在局部范围且便于修复,给公路局系统开通后的数据库日常维护工作带来便利。

  3.需求变更时程序与数据库重用率高,修改少

  在映射应用对象时,除关系映射规范化后可能出现一对多的表映射外,大多数应用
对象与表对象是一一对应的。我们可以把规范化处理后的、由一个应用对象映射出来的
多个表看成一个数据库对象。因此当部分应用需求变更时,首先,系统修改可以不涉及
需求不变更的部分。其次,变
更部分的修改可以基本上只限于追加或删除程序模块或追加新库表,而基本上不必修改
原有程序代码或原有库表定义,从而大大减少了工作量,降低了工作难度。

六、 最简单的就是最好的
  客观世界是错综复杂的,计算机科学理论的发展也越来越高深、复杂。然而,人类
探索理论和技术的最终目的是:让客观世界的复杂变简单,最简单的就是最好的。为此
我们给出以下几点忠告:

  1. 慎用外键

  RDBMS 支持复杂关系的能力很强,无论用户怎么在逻辑上设定外键,它基本上都能
从物理上帮用户实现。但是外键把许多独立的实体牵连在一起,不仅使 RDBMS
维持数据一致性负担沉重,也使数据库应用复杂化,加重了程序开发负担。这样的数据
库很难理解,很难实现信息隐蔽性设计,往往把简单问题复杂化。

  2. 适当冗余

  减少数据库冗余的设计思路产生于70年代,它是促使 DBMS
进步的重要动力之一。然而,犹如为了节省2个字节的存储空间而酿成了如今全球为之头
痛的2000年问题一样,它是计算机硬件主导时代的产物。以今天国内计算机市场价格为
例,6G服务器硬盘的价格不过2000元,而上海物价局 1996
年颁发的一个人月软件开发的指导价约8000元,即一个人月的软件价格就可以购买20G左
右的硬盘。即使有5万行数据的库表,每个记录压缩40字符的冗余,单纯计算合计也不足
2M,即节省0.6元钱的磁盘空间。

  今天的世界已进入软件主导的计算机时代。因此,最容易理解、应用开发工作量最
少、维护最简单的数据库结构才是最好的。只要数据完整性、一致性不受威胁,有些冗
余,不足为虑。换言之,最节省软件成本 (而不是硬件成本) 的是最好的。

  3. 信息隐蔽

  这是软件工程最重要的基本原则之一。简言之即信息的作用域越小越好,数据库的
透明度越大越好,因为应用程序需要知道得越多就越复杂。使数据库黑盒化 (透明度
高) 的方法很多,除了设计上的局部化处理外,还可以利用 DBMS
的触发器、存储过程、函数等,把数据库中无法简化的复杂表关系封装到黑盒子里,隐
藏起来,特别是放到服务器端,其优越性更是多方面的。

--
                微微的凉风吹拂了衣裙,
                淡淡的黄月洒满了一身。
                星样的远远的灯成行排队,
                灯样的小小的星无声长坠。

※ 来源:.网易 BBS bbs.netease.com.[FROM: 202.96.152.112]
发信人: riyuexing (升化), 信区: SystemAnalysis
标  题: Re: 面向对象的关系数据库设计
发信站: 网易虚拟社区 (Tue Jun  8 09:11:56 1999), 站内信件

【 在 connor (虎耳) 的大作中提到: 】
感谢Connor
:                 面向对象的关系数据库设计
:     林凯 赵晓华
:   北京市公路局系统使用的是Oracle 7.3关系数据库,即RDBMS。由于我们对整个工程

: 使用了面向对象的软件工程(OOSE)开发方法学,所以数据库设计也是面向对象的。
:    .......


--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.182.168]
发信人: ebus (Franky), 信区: SystemAnalysis
标  题: Re: 面向对象的关系数据库设计
发信站: 网易虚拟社区 (Wed Jun  9 00:27:54 1999), 站内信件

文章很好。
谢谢虎耳和作者。
可是我看到,对象模型和关系数据库表间映射还是混乱的。


【 在 connor (虎耳) 的大作中提到: 】
:                 面向对象的关系数据库设计
:     林凯 赵晓华
:   北京市公路局系统使用的是Oracle 7.3关系数据库,即RDBMS。由于我们对整个工程

: 使用了面向对象的软件工程(OOSE)开发方法学,所以数据库设计也是面向对象的。
:    .......


--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.98.118.150]
发信人: Tan (Eric Tan), 信区: SystemAnalysis
标  题: Re: 面向对象的关系数据库设计
发信站: 网易 BBS (Wed Jun  9 08:38:35 1999), 转信

文章不错,比较实用!
可我的概念越来越混乱,怎么办?
该如何理解关系数据库中的表与对象之间的关系呢?
【 在 ebus (Franky) 的大作中提到: 】
: 文章很好。
: 谢谢虎耳和作者。
: 可是我看到,对象模型和关系数据库表间映射还是混乱的。


: 【 在 connor (虎耳) 的大作中提到: 】
: :                 面向对象的关系数据库设计
: :     林凯 赵晓华
: :   北京市公路局系统使用的是Oracle 7.3关系数据库,即RDBMS。由于我们对整个工程

: : 使用了面向对象的软件工程(OOSE)开发方法学,所以数据库设计也是面向对象的。
: :    .......



--
※ 来源:.网易 BBS bbs.netease.com.[FROM: 202.103.152.102]
发信人: wwyd (公爵), 信区: SystemAnalysis
标  题: Re: 面向对象的关系数据库设计
发信站: 网易虚拟社区 (Tue Jul  6 19:22:52 1999), 站内信件

【 在 connor (虎耳) 的大作中提到: 】
:                 面向对象的关系数据库设计
:     林凯 赵晓华
:   北京市公路局系统使用的是Oracle 7.3关系数据库,即RDBMS。由于我们对整个工程

: 使用了面向对象的软件工程(OOSE)开发方法学,所以数据库设计也是面向对象的。
:    .......
没有图!有些乱码!
你能给我发一份完整的吗?
谢谢!


--
人不能像蜜蜂和蚂蚁那样生活!
人们追求自由、民主、科学、艺术探索人性与自然!
都是为了更好的生活!

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.6.226]

[关闭][返回]