简介 Oracle9 i. 已经迅速发展成为可用于所有数据(从简单到复杂的各种类型数据)的数据库。多媒体数据类型(如图像、地图、视频剪辑和音频剪辑等)曾经只能在专业软件中见到。现在很多基于Web 的应用程序需要它们的数据库服务器治理此类数据。 其他的软件解决方案需要存储涉及金融工具、设计图表或分子结构的数据。为了满足这些需求,Oracle9 i. 数据库服务器采用“对象关系技术”,为涉及复杂数据的开发、部署和治理提供简单策略。
通过使用对象关系技术,开发人员可以增强Oracle9 i. 服务器,从而创建他们自己的“应用程序域特定”的数据类型。采用类型演变功能,Oracle9 i. 已经增强了支持全面的对象建模功能,包括继续和多级集合在内。例如,可以创建代表客户、资产组合、照片或电话网络的新数据类型,然后,确保数据库程序可以处理与应用程序域同样的抽象级别。很多情况下,需要将这些新域类型与服务器尽可能紧密地集成,这样它们便能作为内置类型(如NUMBER 或VARCHAR)看待。使用扩充性服务可以实现这一目的。采用这样的集成方式,可以将数据库服务器方便地扩展到新域中。
采用类型演变功能,Oracle9 i. 已经增强为可以支持包括继续和多级别集合在内的全面的对象建模功能。
使用UML 分析和设计应用程序后,即可使用特定编程语言和永久数据存储将生成的对象模型映射为目标实施。然后,可将已实施的应用程序部署到特定目标体系结构。随着该面向对象开发过程的进行,Oracle9 i 对象关系技术的优势逐渐显现出来。如下节所述,使用Oracle9 i 的“对象类型系统”,可以将UML 对象模型的结构完全一对一地映射到相应的对象关系模式中。
Oracle 的对象类型系统 以前,应用程序注重访问和修改存储在由诸如INTEGER、NUMBER、DATE 和CHAR等本地SQL 数据类型组成的表中的共同数据。 在Oracle9 i 中,不但支持这些本地类型,而且也支持新的“对象”数据类型,这是最近的ANSI SQL99 标准中的新部分。本节将简介对象关系类型系统的基本特性。
类型层次 使用CREATE TYPE 语句创建层次的根类型,并应将其声明为NOT FINAL。 CREATE TYPE Person_t AS OBJECT( name VARCHAR2(100), dob DATE,
MEMBER FUNCTION age() RETURN number, MEMBER FUNCTION print() RETURN varchar2) NOT FINAL; 可在“非最终”类型下创建子类。它从其超类继续所有属性和方法。它可添加新属性和方法,以及/或覆盖已继续的方法。 CREATE TYPE Employee_t UNDER Person_t( salary NUMBER, bonus NUMBER, MEMBER FUNCTION wages() RETURN number, OVERRIDING MEMBER FUNCTION print() RETURN varchar2); 在“Oracle 通用模式”中,有一个更加具体的有关类型继续层次的示例。 如图2 所示,Category 类及其子类采用精致而简单的结构进行建模,表示树状结构的部分与整体间的层次。该示例进一步展示了Oracle9 i 对象类型系统在保留应用程序对象模型的所有方面中的主要优点。 create type category_typ as object ( category_name varchar2(50) , category_description varchar2(1000) , category_id number(2) ) NOT INSTANTIABLE NOT FINAL; create type subcategory_ref_list_typ as table of ref category_typ; create type product_