14.4.3 面向对象数据库语言

2025-06-09 00:34:28 更新

面向对象数据库语言用于描述面向对象数据库的模式,说明并操纵类定义与对象实例。与关系数据库的标准语言SQL类似,面向对象数据库语言主要包括对象定义语言和对象操纵语言。对象查询语言是对象操纵语言的一个重要子集。

面向对象数据库语言一般应具备下列功能:

(1)类的定义和操纵。面向对象数据库语言可以操纵类,包括定义、生成、存取、修改与撤销类。其中类的定义包括定义类的属性、操作特征、继承性与约束等。

(2)操作/方法的定义。面向对象数据库语言可用于对象操作/方法的定义与实现。在操作实现中,语言的命令可用于操作对象的局部数据结构。对象模型中的封装性允许操作/方法由不同程序设计语言来实现,并且隐藏不同程序设计语言实现的事实。

(3)对象的操纵。面向对象数据库语言可以用于操纵实例对象.对象数据库管理组织(Object Database Management Group, ODMG)是面向对象数据库管理系统软件商的国际联盟,曾经提出一种标准,即ODMG1.0。该标准FI前已经修订到ODMG3.0。ODMG对象模型提供了数据类型、类型构造器,以及其他一些可以用于对象定义语言来说明对象数据库模式的概念,它是对象定义语言和对象查询语言的基础。

对象定义语言被设计成为支持ODMG对象模型的语义结构,并且立于任何特定的编程语言。它的主要用途是创建对象说明,也就是类和接口。因此对象定义语言不是一个完全的编程语言。用户可以独立于任何编程语言在对象定义语言中指定一种数据库模式,然后使用特定的语言绑定来指明如何将对象定义语言结构映射到特定编程语言的结构,如C"、SMALLTALK, Java。

对象查询语言是专门为ODMG对象模型指定的查询语言。对象查询语言被设计为与编程语言紧密配合使用,这些编程语言有一个ODMG绑定的定义,如C++、SMALLTALK, Java。

这样嵌入某种编程语言的一个对象查询语言的查询,可以返回与那种语言的类型系统相匹配的对象。对于查询,对象查询语言语法和关系型标准查询语言SQL的语法相只是增加了有关对象的特征,如对象标识、复杂对象、操作、继承、多态性。

面向对象数据库语言是面向对象数据库与传统数据库相区别的一个重要特征。但是面向对象数据库语言的查询功能很弱,这是因为用变量引用对象的方式不能对对象进行统一管理。例如图书作为类,作者是属性。面向对象数据库语言可从每一书的对象找到它的所有作者,但不支持另一方向的查询,即从作者查询他的所有作品,除非把作者也定义成一个类,同时把作品设置成属性,这样的设计将在数据库中造成冗余,为此就有必要扩充面向对象数据库语言的查询功能。

数据库系统从网状模型到关系模型的进步使数据库查询语言从用户导航式的过程性语言进入到了由系统自动选择查询路径的非过程性语言。但是非过程性语言的面向集合的操作方式又与高级程序设计语言的面向单个数据的操作方式之间产生了不协调现象,俗称阻抗失配。阻抗失配的根本原因在于关系数据库的数据模型和程序设计语言不一致。因而,对嵌入式数据库语言来说不可避免地产生阻抗失配。但面向对象数据库不同,它的数据模型的概念来自面向对象的程序设计方法,因此作为某一面向对象的程序设计语言扩充的面向对象数据库语言,能够从根本上解决阻抗失配问题。

商业的关系型数据库管理系统成功的一个原因在于SQL标准。对象数据库管理组织曾经提出ODMG1.0标准,己经修订为ODMG3.0,它包含了对象定义语言和对象操纵语言。但是目前还没有一个关于面向对象数据语言的标准能够像SQL标准那样得到业界的普遍支持,现今不同的面向对象数据库管理系统的数据库语言各不相同,要解决这个问题还要花很长的时间。