面向对象数据模型:概念、组件与应用
立即解锁
发布时间: 2025-08-23 00:29:15 阅读量: 2 订阅数: 6 

# 面向对象数据模型:概念、组件与应用
## 1. 引言
曾经有预测认为面向对象(OO)数据模型的数据库系统会在20世纪90年代中期超越关系型数据库系统,但这并未成为现实。不过,面向对象的概念确实在影响着信息系统,尤其是数据库系统的发展。许多关系型数据库管理系统(DBMS)供应商开始提供面向对象的特性,SQL3也在原本的关系型数据库子语言中加入了一些面向对象的特性。
“面向对象”这个术语在现代计算领域有多种含义。它最初用于源自SIMULA的编程语言,SIMULA是第一个引入抽象数据类型概念的语言。而最著名的面向对象编程语言可能是Smalltalk。直到较近时期,“面向对象”才被应用于数据库系统。面向对象编程语言和数据库的主要区别在于,面向对象数据库系统需要持久对象的存在,而在面向对象编程语言中,对象仅在程序执行期间存在。
目前,关于面向对象数据库系统是否比关系型数据库系统更适合数据库管理仍存在争议。面向对象方法似乎特别适合地理信息系统或计算机辅助设计等非标准应用,但在标准商业数据库应用中的使用仍有待探讨。许多关系型DBMS供应商将用户定义数据类型、触发器和存储过程等功能描述为面向对象特性,这些所谓的对象 - 关系系统也值得关注。
## 2. 语义数据模型
经典数据模型(如网络和关系数据模型)使用记录结构和记录结构之间的链接来表示模式,而语义数据模型则试图提供更丰富的构造来构建模式,以便数据库开发人员能在数据库系统中融入更多应用领域的语义。
语义数据模型的开发是为了解决关系数据模型的一些固有弱点:
- **实体表示不佳**:关系数据模型通过规范化过程将实体或类拆分成多个关系,导致对“现实世界”实体的表示不佳。
- **语义过载**:该模型使用一种构造来表示实体和关系,导致语义过载。
- **复杂对象管理困难**:关系数据模型的原子值约束使得难以管理层次/嵌套结构。
20世纪70年代和80年代,人们提出了许多替代关系模型的方案。其中,基于陈品山(Chen)提出的实体 - 关系方法的语义数据模型很受欢迎,大多数语义数据模型通过泛化和聚合等抽象机制扩展了这一基本方法,例如Hammer和McCleod开发的SDM模型。
语义数据模型和面向对象数据模型的区别并不明确。一种可能的区分方式是,语义数据模型主要用于产生结构抽象,而面向对象数据模型更侧重于提供行为抽象。也就是说,语义数据模型更侧重于数据表示,而面向对象数据模型更侧重于数据操作。
## 3. 扩展关系方法
在数据库领域,有两种实现面向对象的替代方法:一是用更适合面向对象需求的语义丰富的数据模型取代关系数据模型;二是利用关系模型的能力并扩展其面向对象的功能。
## 4. 面向对象数据模型的组件
虽然没有一个人能定义面向对象数据库系统的关键元素,但关于面向对象数据模型的关键元素已逐渐形成共识。一些组织试图为对象数据管理制定标准,例如对象数据库管理组(ODMG)在1991年成立,旨在开发一套促进应用程序可移植性的对象数据管理标准。
由于面向对象数据模型没有统一的语法,这里使用一种简化的语法来展示可能的模型的一般特征,它大致基于ODMG模型和某些面向对象数据库管理系统(OODBMS)的功能。
## 5. 数据定义
面向对象数据库由通过抽象机制链接的对象和对象类组成。
### 5.1 对象
对象是数据和过程的封装。数据包含在对象的属性中,过程由对象的方法定义,方法通过对象之间传递的消息激活。
面向对象数据模型必须支持对象标识,即能够区分具有相同特征的两个对象。关系数据模型是基于值的数据模型,不支持为数据库中的每个对象提供独特的标识符。因此,在关系数据模型中,两个相同的元组或行必须指代同一个对象,而在面向对象数据库中,两个相同的记录可以通过系统生成的唯一标识符指代两个不同的对象。
所有对象都必须具有封装性,即将数据和过程封装在一个定义好的接口中,并控制对该接口的访问。封装性在对象的定义中是隐含的,因为对象的所有操作都必须通过附加到对象的定义过程来完成。
### 5.2 对象类
对象类是相似对象的分组,用于定义一组对象的共同属性、方法和关系。对象是类的实例,具有相同的属性和方法。对象类定义了面向对象数据库的内涵,是数据库设计的核心;对象定义了数据库的外延,是数据库实现的核心。
### 5.3 抽象机制
对象数据模型支持泛化和聚合两种抽象机制,允许数据库构建者构建对象类的层次结构或格结构。
泛化机制允许将某些对象类声明为其他对象类的子类。例如,经理、秘书和技术员可以声明为员工类的子类,销售经理、生产经理等可以声明为经理类的子类。
聚合是将多个低级对象组合成一个高级对象的过程。例如,汽车实体可以由车轮、底盘、发动机等组件组成。
面向对象数据模型还需要提供将对象与对象类链接的方法,即对象类对对象进行分类,对象是对象类的实例。
### 5.4 继承
与泛化层次结构相关的是继承过程,主要有两种类型:
- **结构继承**:子类继承父类的属性。例如,如果员工类有姓名、地址、工资等属性,那么经理子类也将具有这些属性。
- **行为继承**:子类继承父类的方法。例如,如果员工类有计算工资的方法,那么经理子类也将具有该方法。
继承还可以分为单继承和多继承。单继承意味着一个类只能是一个父类的子类,而多继承允许一个类继承多个父类的属性或方法。
### 5.5 定义模式
定义面向对象数据库的模式意味着定义对象类。模式定义包括以下元素:
- 每个类在模式中都有唯一的名称。
- 某些类基于父类定义,例如学生类是系统类(元类)“对象”的子类。
- 类的属性可以是简单属性,它们基于预定义的数据类型(如整数、字符和日期),取值为字面量;也可以是复杂属性,包含集合或引用。
- 子类可以包含关系声明,并且关系通常有逆关系定义。
以下是一个大学数据库的简单对象类定义示例:
```sql
CREATE CLASS Student
SUPERCLASS: object
ATTRIBUTE studentName: CHARACTER,
ATTRIBUTE termAddress: CHARACTER,
ATTRIBUTE dateOfBirth: DATE,
ATTRIBUTE dateOfEnrolment: DATE
CREATE CLASS Undergraduate
SUPERCLASS: Student
RELATIONSHIP Course memberOfCourse INVERSE courseEnrolment
RELATIONSHIP SET(Module) memberOfModule INVERSE Module moduleEnrolment
CREATE CLASS Postgraduate
SUPERCLASS: student
RELA
```
0
0
复制全文
相关推荐









