编辑: 枪械砖家 | 2016-09-20 |
1 背景 面向对象的DBMS(OODBMS) ,也就是那些非主流的关系型( RDBMS)的DBMS,是 面向对象程序语言(如Actor和SmallTalk)的直接继承.永久存储的需要是促使 DBMS和RDBMS的出现来替代第三代语言( 3GL)/基于文件的信息系统的最基本的原因之一,也促使 OODBMS的产生来替代面向对象的编程语言信息系统.很有趣的是,喜爱面向对象系统的人 通常认为,面向对象系统比关系数据模型的派生物(如实体关系图的变体)提供更有力的语 义模型,并具有更高的层次.然而,与此同时,反对面向对象系统的人认为,由于它们关注 3GL/基于文件的信息系统,它们的实现和语言要素偶尔会下降到十分低的层次(按C/C++指 针方式) .从本质上讲,它们采取导航的或过程化的查询,这也与前关系型系统(如基于 COBOL的分层和网络DBMS)十分相似,而在基于 SQL的RDBMS系统中的查询大多是描述性 的和声明的. 不能不考虑关系型的厂商(如Oracle)因此考虑Oracle 8和它的当前关系 -对象型的实现. 当用任何RDBMS厂商的产品时,为了估计它的面向对象的能力,必须考虑几件事情,如下所 示: 对面向对象概念和结构的信任. 面向对象到关系的映射的概念和结构. 仿真、完全或混合实现. 性能的降低或加强. 使用现有RDBMS子系统的能力. 希望RDBMS具有面向对象的接口的一个主要的原因是,这样做面向对象应用的程序就可 以与RDBMS中的面向对象部分直接进行通信,这与在程序代码中必须动态地处理对象 -关系 型映射(分解和重组)相反.作为一个例子,考虑嵌入式 SQL.这里SQL是基于集合的语言, 必须与一个基于记录的主机 3GL(如C)交互.这是不希望的情况,称为阻抗失配,可以通过 诸如游标的结构和诸如预编译的软件(例如 Pro*C)来进行补救.一个基于面向对象的程序语 言的应用与一个RDBMS 的交互,情况与此相似. Oracle 8特别地帮助缓解面向对象的开发和 RDBMS后端的情况,方法是提供一些强有力 的内建的面向对象能力,如下所示: 关系作为数据类型. 继承. 集合作为数据类型,包括嵌套(容器) . 用户定义(可扩展的)数据类型. 改进大对象(LOB) . 和如用任何OODBMS或对象-关系DBMS(ORDBMS)一样,使用Oracle 8时,你能利用 面向对象模型的优点.面向对象模型是比关系型模型更高层次的抽象.换句话说,你能抽象 出事物的模型作为一个整体来比较接近地反映 真实的 世界.例如,在你的 OODBMS中, 可以具有一个称为 CAR的复杂对象,它很可能是 RDBMS中的几个表,如MAKE、MODEL、 ENGINE、PARTS等等.面向对象模型与关系模型在 自然性 方面的注释是不同.我们来 打个比方: 用面向对象技术,就像你在早上醒来穿上你的衣服,在夜晚你简单地脱掉它们以供下次 再穿,十分自然.但是用关系型技术,你必须为你的衣服收集所有的纺织物,将它们缝在一 起,然后穿上;
在夜晚,必须把它们分开,按次序保存它们以供下次再缝和再穿. 尽管这个比喻不完全准确,却有些道理.基本思想是,用RDBMS进行工作时必须连结在 前一次通过规范化分开的部分.关系设计者知道这种情况,这就是这类事情作为非规范化而 存在的原因. 面向对象技术有哪些优点,特别是与关系型技术有关的并且是通常的优点呢?有些比较 重要的已经讨论过了,而这里有一个列表,列出了大多数面向对象的主要强度: 建模:业务级抽象. 重用性:生命周期的代码重用可以在很大程度节约成本. 复杂性:没有数据类型限制;