面向对象数据库简介-程序员宅基地

技术标签: Database  数据库  

面向对象数据的定义

面向对象数据库(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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ypluo/article/details/104641730

智能推荐

linux下 boa cgi移植(转)-程序员宅基地

文章浏览阅读181次。http://blog.chinaunix.net/u1/33226/showart_485155.html嵌入式WEB服务器常见的有lighttpd shttpd thttpdboa mathopd minihttpdappwebgoahead=========================================================..._cgipath /bin:/usr/bin:/usr/local/bin

结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程...-程序员宅基地

文章浏览阅读452次。1、bootstrap-fileinpu的简单介绍在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用,整合两者可以实现我们常规的Web数据导入操作,导入数据操作过程包括有上传文件,预览数据,选择并提交记录等一系列操作。关于这个插件,我在早期随笔《Boots..._c# bootstrap excel导入

编写应用程序,有一个标题为“计算”的窗口,窗口的布局为FlowLayout布局。窗口中添加两个文本区,当我们在一个文本区中输入若干数时,另一个文本区不断地更新求和及平均值。_实现标题计算的窗口,随着用户输入,输出求和及平均值-程序员宅基地

文章浏览阅读4.8k次,点赞8次,收藏46次。import javax.swing.*;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import java.awt.*;import java.util.Scanner;public class Dzj { public static void main(String[] args) { new DzjWin("计算"); }}class ._实现标题计算的窗口,随着用户输入,输出求和及平均值

Android 音视频采集与软编码总结_android 软编码算法-程序员宅基地

文章浏览阅读1.1w次,点赞11次,收藏36次。前言本文总结了笔者在 Android 音视频采集与软编码中的一些经验与技巧,包括移植 FFmpeg、YUV 视频帧处理、最新的 JNI 编写技巧、 ndk 开发技巧等,为了不扯太远本文不会对音视频编码的一些原理性东西进行剖析,也不会大量贴源码,更注重使用方法与流程的讲解。 文章最后将展示一个实现了音视频采集功能与本地视频压缩功能的完整项目。采用软编码利弊众所周知_android 软编码算法

css中级选择器_css 子类怎么设置-程序员宅基地

文章浏览阅读479次,点赞3次,收藏2次。讲述了一些常见的css中级选择器,例如派生选择器(所有子代)、直接子类选择器(只找儿子)、分组选择器(不同标签,相同样式时)、兄弟选择器(找右边临近的第一个元素)_css 子类怎么设置

平板鸿蒙系统实测,平板电脑已预装鸿蒙系统,我们来看看效果-程序员宅基地

文章浏览阅读1.6k次。就在近日,华为方面也是再次传来了好消息,根据华为心声社区的最新报道中,华为创始人任正非先生也正式对外透露了,华为最新平板电脑产品已经开始预装鸿蒙OS系统,这意味着大家一直非常期待的华为鸿蒙OS系统终于要被预装到华为平板电脑上,消费者很快就能够看到这款平板电脑上市销售了,但华为任正非并未透露具体的产品上市时间,但这也意味着华为在遭到谷歌的“断供”之后,华为鸿蒙OS系统、华为HMS生态系统服务,终于要..._鸿蒙系统平板

随便推点

CentOS 7 下Docker的安装与部署详细步骤(图文详解)_contos7 pageplug docker-程序员宅基地

文章浏览阅读6.2k次,点赞5次,收藏43次。Docker的安装与部署准备工作操作系统要求操作系统环境设置准备工作1、操作系统:VMWare虚拟机 、 CentOS 7VMware虚拟机下载和安装教程CentOS 7安装教程2、CentOS 7 操作系统网络可用。3、官方参考文档纯英文操作系统要求1、安装docker需要在centos7以上版本;2、linux内核版本需要在3.10以上,可通过uname -r 查看系统内核。操作系统环境设置1、关闭防火墙centos7 以后默认用firewalld取代iptables,这两个防_contos7 pageplug docker

linux的tomcat下载,tomcat linux 64位下载-程序员宅基地

文章浏览阅读1.2k次。tomcat 8发布了,这里为大家带来了 linux版本下载,此版本为8.0.32 tomcat linux 64位下载,它是由Apache 所开发的一个核心项目,由于Tomcat 产品的技术先进、性能稳定,而且免费,因此该程序深受Java 爱好者的喜爱,此软件目前成为了比较流行的Web 应用服务器。下面有详细的安装配置教程,大家可以学习一下。官方介绍使用Apache Tomcat 软件了Jav..._tomcat linux64位下载

Laravel 5 系列入门教程(三)【最适合中国人的 Laravel 教程】_laravel layouts 单选框-程序员宅基地

文章浏览阅读852次。本教程示例代码见:https://github.com/johnlui/Learn-Laravel-5 大家在任何地方卡住,最快捷的解决方式就是去看我的示例代码。本篇教程中,我们将利用 Laravel 5 自带的开箱即用的 Auth 系统对我们的后台进行权限验证,并构建出前台页面,对 Pages 进行展示。1. 权限验证后台地址为 http://fuck._laravel layouts 单选框

CentOS7下安装MySQL5.7.29_mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar-程序员宅基地

文章浏览阅读1.3k次。准备工作Linux 命令教程以下有的不懂命令可以在这里查询理解https://www.runoob.com/linux/linux-comm-rpm.html查看CentOS7版本cat /etc/redhat-release卸载mariadb查询所有mariadb套件同时卸载掉rpm -qa|grep mariadbrpm -e --nodeps mariadb-libs..._mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar

nginx的部署和常用命令_pcre-devel-8.43-程序员宅基地

文章浏览阅读200次。nginx的部署前言在部署项目时,用到nginx,很多时候在内网,无法在线安装,这里使用在线,离线两种方式,部署依赖。一、安装说明系统环境:CentOS7.5软件:nginx-1.18.0.tar.gz其他所需软件:gcc-4.8.0.tar.gz、pcre-8.43.tar.gz、zlib-1.2.11.tar.gz、openssl-1.0.2p.tar.gz安装方式:源码编译安装安装位置:/usr/local/nginxroot用户操作安装,否则无法创建默认目录安装包下载地址:ng_pcre-devel-8.43

c语言求最大公约数和最小公倍数_最大公因数和最小公倍数求法之我见-程序员宅基地

文章浏览阅读1.3k次。随着课程改革的不断推进,老师们逐渐认识到,教材仅仅是课程的一种重要载体,而不是课程的全部。任何课程实施,都需要和开发大量的课程资源。下面就和大家谈一谈除了教材资源,怎样用“数学眼光”来搜索教学资源的。众所周知,最大公因数和最小公倍数有着广泛的应用,特别是在分数四则运算中,更是不可缺失。所以求最大公因数和最小公倍数是小学高年级数学教学的重点,也是难点。下面列举两个数的最大公因数和最小公倍数..._用c语言求24和36的最大公倍数