面向对象数据的定义

面向对象数据库(OODB)是一个基于面向对象编程语言(OOP)的数据库,其数据都是以对象/类的形式表示并存储在面向对象数据库中。简单来讲,面向对象数据库 = 面向对象编程语言 + 关系型数据库特性。在这个公式里面,面向对象编程语言的三个特性为继承、多态、封装;而关系型数据库特性的三个特性:实体完整性、并发、查询处理,因此可用下图[1]表示面向对象数据库。
在这里插入图片描述

关系型数据库的问题

传统的关系型数据库存在一些约束:

  • 数据以简单的二维表形式将数据存储,每个元组的字段不可分。
  • 类型必须为内置的有限几种类型。
  • 不能用一个独立的单元表示一个复杂实体。
  • 不能定义属于某个类型的复杂处理操作。

因为以上提出的约束,在传统关系型数据中,应用程序不能直接使用SQL查询返回的结果,需要执行装箱和拆箱操作:即需要显式地将返回的字节序列转换到相应编程语言下的类型 (拆箱),当数据需要存储回数据库前 ,也需要完成上述转换的逆过程(装箱)。举个例子[2],假设在数据库中存有一个零件表格part:

create table part ( //零件关系part的schema
    int Pno,
    char(15) pname,
    char(10) psize,
    char(5) pcolor
);

应用程序使用C语言访问pno = 16的零件,需要按照如下伪代码地形式预处理:

Define cursor P as Select * From Part Where pno = 16; //用游标读取数据库
struct Part { //应用程序访问时需定义Part类型
    int number;
    char* name;
    char* bigness;
    char* color;
} Example_part;
//将打开的part表格的游标转换到Example_part类型上去
Open P into Example_part Until no-more{
    Fetch P (
    Example_part.number = pno,
    Example_name = pname,
    Example_part.bigness = psize,
    Example_part.color = pcolor);
}
//对访问的结果进行后续操作

上述例子表明,由于SQL查询返回的结果独立于任何编程语言,应用程序访问SQL查询结果时必须先将结果绑定到应用程序中的自定义类型上去,随后才能对数据执行操作。并且SQL中的数据类型不能为每种实体定义相应的复杂操作,应用程序需要手动实现这些对实体数据的操作代码。此外,由于不能自定义数据类型以及封装处理数据对象的操接口, 用户必须显式地管理不同数据表格之间的关联关系,为了保证完整性需要定义主键,为复杂的数据操作和事务写相应存储过程

面向对象数据库的应用场景

一般的数据库应用程序例如银行,教务处等需要应对的数据类型结构简洁,进行数据库设计和应用程序设计时负担较小。但是对于那些不得不与复杂,特殊化的数据结构打交道的新型的数据库应用,例如卫星数据应用,CAD建模应用,多媒体数据库应用,让应用程序显式地管理数据表格之间的关联关系、定义复杂的主键、实现复杂的存储过程无疑是不现实的。在这些应用场景下,传统关系型数据库性能较差,例如实现一个最近邻查找可能都需要引入join操作。

面向对象数据库在1985年左右应运而生,主要是希望解决上述问题,他们主要以工程应用软件作为其市场[2]。当然,由于OODB缺乏数据保护、访问控制机制、查询处理和事务处理系统,大部分OODB并不将商业数据处理作为他们市场,这也是OODB数据库无法获得较高数据库市场占有率的根本原因。

面向对象数据库以对象作为存储的基本单位,多个类型相同的对象的集合成为一个类。现实世界的任一实体都被统一地模型化为一个对象,每个对象有一个唯一的标识,称为对象标识。借助持久性编程语言的底层特性,任何对象从磁盘读入内存和写回磁盘均能隐式地保证,在内存中的数据只是数据库中该对象的临时副本,应用程序可以调用属于该对象的接口,处理封装在对象内部的数据,类似C++和java那样。

面向对象数据库的优缺点

最后总结而言,面向对象数据库相比关系型数据库的优缺点如下[3]:

优势

  • 数据模型为语义数据模型,基于现实世界。
  • 对象访问不需要装箱和拆箱操作,节省编程和执行时间。
  • 更好的并发控制 – 对象的层次结构可能被锁定。
  • 在分布式架构状态下可以很好的工作。

劣势

  • 关系表更简单易懂,数据结构的存储较为简单。
  • 数据间的关系相对简单时,面向对象数据库效率较低。
  • 关系数据库有更多的工具,对事务处理,分析型数据处理任务的支持更好。
  • 关系型数据库拥有统一的标准,相应的服务和支持更加稳定。
参考文献

[1]. What is an Object-Oriented Database, https://study.com/academy/lesson/what-is-an-object-oriented-database.html 2020,2,24

[2]. Joseph M. Hellerstein and Michael Stonebraker. What Goes Around Comes Around. Readings in Database Systems, 4th Edition (2005)

[3]. 面向对象数据库,https://tson.com/object-oriented-databases-translate/ 2020,2,24

Logo

数据库是今天社会发展不可缺少的重要技术,它可以把大量的信息进行有序的存储和管理,为企业的数据处理提供了强大的保障。

更多推荐