面向对象数据库技术

  
面向对象的关系数据库设计
一、         概念的区分
有些人把面向对象的数据库设计 ( 即数据库模式 ) 思想与面向对象数据库管理系统 (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 来描述。概念模式可以由若干个内部模式聚集而成 , 它是由数据库用户规范的一些表的集合。一般的概念模式是数据库物理模式作用域的边界 , 它能实现数据库的物理意义、特定 DBMS 的特殊操作对外部应用程序的信息隐蔽。外部模式是从特定用户应用角度看待的数据库模式 , 从不同的应用出发对同一概念模式可以给出多种不同的外部模式。当外部应用系统以对象模型进行抽象时 , 从各个应用出发抽象出的对象模型可以映射到外部模型上 , 对此我们不妨称之为外部对象模型。但是 , 外部模型只是概念模型的子集 , 所以面向对象的数据库设计核心在于系统对象模型 ( 不妨称之为概念对象模型 ) 向数据库概念模型的映射
2 、对象模型向数据库表的映射规则
由于 RDBMS 是以二维表为基本管理单元的 , 所以对象模型最终是由二维表及表间关系来描述的。换言之 , 对象模型向数据库概念模型的映射就是向数据库表的变换过程。有关的变换规则简单归纳如下 :

   (1) 一个对象类可以映射为一个以上的库表 , 当类间有一对多的关系时 , 一个表也可以对应多个类。
   (2) 关系 ( 一对一、一对多、多对多以及三项关系 ) 的映射可能有多种情况 , 但一般映射为一个表 , 也可以在对象类表间定义相应的外键。对于条件关系的映射 , 一个表至少应有 3 个属性。
   (3) 单一继承的泛化关系可以对超类、子类分别映射表 , 也可以不定义父类表而让子类表拥有父类属性 ; 反之 , 也可以不定义子类表而让父类表拥有全部子类属性。
   (4) 对多重继承的超类和子类分别映射表 , 对多次多重继承的泛化关系也映射一个表。
   (5) 对映射后的库表进行冗余控制调整 , 使其达到合理的关系范式。
3 、数据库模式要面向应用系统
我们选择面向对象的系统设计也好 , 面向对象的数据库设计也好 , 根本目的是服务于应用系统的需要。
 
五、面向对象关系数据库设计效果
从某种意义上讲 , 是数据库设计的面向对象特征最终奠定了整个系统的面向对象性 , 才使面向对象方法在程序开发阶段全面开花。其效果归纳如下 :
1 、数据库结构清晰 , 便于实现 OOP
由于实现了应用模块对象对数据库对象的完全映射 , 数据库逻辑模型可以自然且直接地模拟现实世界的实体关系。用户所处的当前物理世界、系统开发者所抽象的系统外部功能 , 与支持系统功能的内部数据库 ( 数据结构 ) 一一对应 , 所以用户、开发者和数据库维护人员可以用一致的语言进行沟通。特别是对多数不了解业务的程序开发人员来说 , 这种将应用对象与相应的数据对象封装在对象统一体中的设计方法 , 大大减轻了程序实现的难度 , 使他们只要知道加工的数据及所需的操作即可 , 而且应用程序大多雷同 , 可以多处继承由设计人员抽象出来的、预先开发好的各种物理级超类。
2 、数据库对象具有独立性 , 便于维护
除了数据库表对象与应用模块对象一一对应外 , 在逻辑对象模型中我们没有设计多重继承的泛化关系 , 所以这样得到的数据库结构基本上是由父表类和子表类构成的树型层次结构 , 表类间很少有继承以外的复杂关系 , 是一个符合局部化原则的结构 , 从而使数据库表数据破坏的影响控制在局部范围且便于修复 , 给系统开通后的数据库日常维护工作带来便利。
3 、需求变更时程序与数据库重用率高 , 修改少
在映射应用对象时 , 除关系映射规范化后可能出现一对多的表映射外 , 大多数应用对象与表对象是一一对应的。我们可以把规范化处理后的、由一个应用对象映射出来的多个表看成一个数据库对象。因此当部分应用需求变更时 , 首先 , 系统修改可以不涉及需求不变更的部分。其次 , 变更部分的修改可以基本上只限于追加或删除程序模块或追加新库表 , 而基本上不必修改原有程序代码或原有库表定义 , 从而大大减少了工作量 , 降低了工作难度。
六、最简单的就是最好的
客观世界是错综复杂的 , 计算机科学理论的发展也越来越高深、复杂。然而 , 人类探索理论和技术的最终目的是 : 让客观世界的复杂变简单 , 最简单的就是最好的。为此我们遵循以下原则 :
1 、慎用外键
RDBMS 支持复杂关系的能力很强 , 无论用户怎么在逻辑上设定外键 , 它基本上都能从物理上帮用户实现。但是外键把许多独立的实体牵连在一起 , 不仅使 RDBMS 维持数据一致性负担沉重 , 也使数据库应用复杂化 , 加重了程序开发负担。这样的数据库很难理解 , 很难实现信息隐蔽性设计 , 往往把简单问题复杂化。
2 、适当冗余
减少数据库冗余的设计思路产生于 70 年代 , 它是促使 DBMS 进步的重要动力之一。然而 , 犹如为了节省 2 个字节的存储空间而酿成了如今全球为之头痛的 2000 年问题一样 , 它是计算机硬件主导时代的产物。以今天国内计算机市场价格为例 ,6G 服务器硬盘的价格不过 2000 , 而上海物价局 1996 年颁发的一个人月软件开发的指导价约 8000 , 即一个人月的软件价格就可以购买 20G 左右的硬盘。即使有 5 万行数据的库表 , 每个记录压缩 40 字符的冗余 , 单纯计算合计也不足 2M, 即节省 0.6 元钱的磁盘空间。
今天的世界已进入软件主导的计算机时代。因此 , 最容易理解、应用开发工作量最少、维护最简单的数据库结构才是最好的。只要数据完整性、一致性不受威胁 , 有些冗余 , 不足为虑。换言之 , 最节省软件成本 ( 而不是硬件成本 ) 的是最好的。
3 、信息隐蔽
这是软件工程最重要的基本原则之一。简言之即信息的作用域越小越好 , 数据库的透明度越大越好 , 因为应用程序需要知道得越多就越复杂。使数据库黑盒化 ( 透明度高 ) 的方法很多 , 除了设计上的局部化处理外 , 还可以利用 DBMS 的触发器、存储过程、函数等 , 把数据库中无法简化的复杂表关系封装到黑盒子里 , 隐藏起来 , 特别是放到服务器端 , 其优越性更是多方面的。
 
 
 
面向对象数据库相关知识:
。"面向对象"是数据库设计(即数据库模式)思想,是数据库用户定义数据库模式的思路,
用户使用面向对象方法学可以定义任何一种DBMS数据库,即网络型、层次型、关系型、
面向对象型均可,甚至文件系统设计也照样可以遵循面向对象的思路。
 关系数据库以二维表来表示数据实体及其相互关系,是现在大多数商用
关系型数据库所采用的。传统的关系数据库缺乏对于多媒体数据的有力支持,但是
可以通过适当的手段进行扩展后用于多媒体数据的建模。
    面向对象数据库的基本思想是将代码和数据封装在一个称为“对象”的单元内,
封装在对象内部的代码定义了作用于内部数据之上的操作,对象与系统其他部分之间的
接口以一组消息来定义。
面向对象数据库就是将面向对象(OO)模型、方法和机制与先进的数据库
技术进行有机的结合而形成的新型数据库系统。
   从目前数据库市场商用产品的实际发展现状来看, 面向对象数据库(OODB)
的研究和实现可归纳为以下两种方式:一种是在面向对象的设计环境中加入
数据库功能;另一种是对传统数据库进行改进,使其支持
面向对象的数据模型.
面向对象数据库和关系型数据库不是同一个范畴的概念。
只能说面向对象数据库是关系型数据库的一个子集。
 
千中元同志讲道:
“这段时间学习 oracle8i, 对其面向对象数据库功能的大致认识就是“你可以定义一个象仅有 property 的类一样的数据类型,并且在创建表的时候它可以作为某字段的数据类型”。
目前我想,只能设计一个 delphi 的类来对应该字段,但这样做显然不能用数据敏感控件了。
有哪位设计过这样面向对象的数据库来着?用 delphi 或者 java 作为前端开发工具
均可。谈谈吧。
 
关注此问题:
本人认为,面向对象数据库主要针对某些方面, 如用户权限,验证系统 .
通常在设计时要对设计好的对象与关形数据库进行转换。
 
1 )面向对象的数据库是要和语言有个绑定过程的,比如 GemStone
2 oracle 的对象是无法和编程语言绑定的
结论 : 劝您还是不用的好
提示:可以看一看 Object-Relational mapping 方面的资料
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值