精华内容
下载资源
问答
  • 面向对象数据库简介

    千次阅读 2020-03-03 21:18:18
    面向对象数据库(OODB)是一个基于面向对象编程语言(OOP)的数据库,其数据都是以对象/类的形式表示并存储在面向对象数据库中。简单来讲,面向对象数据库 = 面向对象编程语言 + 关系型数据库特性。在这个公式里面,面向...

    面向对象数据的定义

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

    展开全文
  • 面向对象数据库系统

    千次阅读 2018-04-23 09:05:14
    在面向对象的方法中,对象作为描述信息实体的...深圳IT 外包 http://www.lankuai.info面向对象数据库的实现一般有两种方法:一种是纯粹的面向对象数据库技术,用于构建面向对象技术的数据库;另一种是在现有关系...

    在面向对象的方法中,对象作为描述信息实体的统一概念,把数据和对数据的操作融为一体,通过方法类、继承、封装和实例化机制来实现信息含义的存储和描述。因此,对象可以自然、直观地表达复杂结构对象,并用操作封装来增强数据处理能力。

    深圳IT 外包  http://www.lankuai.info

    面向对象数据库的实现一般有两种方法:一种是纯粹的面向对象数据库技术,用于构建面向对象技术的数据库;另一种是在现有关系数据库基础上增加对象管理的技术,从而构成面向对象数据库。由于面向对象数据库支持的对象标识符、类属联系、分属联系、方法等概念很难实现存储和管理,所以第一种方法实现起来成本比较高。因此,大多数人将目光转到改造和优化现有的关系数据库上,这种基于关系数据库实现的对象数据库又称为对象关系数据库。

    对象关系数据库增强了关系数据库的数据管理能力,是对关系数据库的改进,同时也是对象数据库理论的一种实践应用。对象关系模型是指在关系数据库模型的基础上增加了对复杂数据类型的查询规则的模型。通过复杂数据类型管理,关系数据库中元组的属性可以是复杂的数据类型。这种数据库的演变是为了扩展有数据库系统的建模能力,而不是破坏已有的成熟的数据模型。基于对象关系模型的对象关系数据库系统为那些想在关系数据库中使用面向对象特征的用户提供了一种便利的操作途径。

    对象关系数据库系统集成了关系数据库系统的优点和面向对象数据库的建模能力,具有用户根据应用需要扩展数据类型和函数的机制,支持复杂类型的存储和操作能力。由于对象数据库系统增强了面向对象的建模能力,因此具有面向对象数据库的特征和优点,是目前关系数据库系统发展的一个新方向。

    展开全文
  • 面向对象数据库的产生主要是为了解决“阻抗失配”,它强调高级程序设计语言与数据库的无缝连接。什么叫无缝连接,假设你 不用数据库,用C语言编了一个程序,你可以不需要(或基本不需要)任何改动就将它作用于数据库...
    面向对象数据库的产生主要是为了解决“阻抗失配”,它强调高级程序设计语言与数据库的无缝连接。什么叫无缝连接,假设你 不用数据库,用C语言编了一个程序,你可以不需要(或基本不需要)
    任何改动就将它作用于数据库,即你可以用C语言透明访问数据库,就好象数据库根本不存在一样,所以也有人把面向对象数据库理解为语言的持久化。怎么样,听起来挺玄的吧,可是我们自己开
    发的数据库系统——OSCAR早就做到了这一点。 由于实现了无缝连接,使得面向对象数据库能够支持非常复杂的数据模型,从而特别适用于工程设计领域。打个比方,想象CAD中的一个复杂部件,
    它可能由成千上万个不同的零件组成,要是用关系模型中的表来表达,得用多少张表啊?而描述这种复杂的部件,正好是高级程序设计语言的强项。

    此外,面向对象数据库还吸收了面向对象程序设计语言的思想,如支持类、方法、继承等概念。 面向对象数据库很好地解决了阻抗失配的问题,但它也有缺点。它的缺点正好是关系数据库的强项
    ,由于模型较为复杂(而且缺乏数学基础),使得很多系统管理功能难以实现(如权限管理),也不具备SQL处理集合数据的强大能力。

    转载于:https://www.cnblogs.com/sistrong-5880558/p/7833057.html

    展开全文
  • 3.4Python之对象数据库ZODB

    千次阅读 2016-09-25 15:22:41
    通常,对象数据库可能更适合解决某些问题。ZODB是一个可扩展和冗余的对象数据库,其专注于存储可扩展的对象,而没有天生“对象-关系”不匹配情况:在尝试将面向对象的语言与关系查询系统映射对象建立关系时,可能会...
    一、基本概念
    关系数据库并不是Python程序员唯一可用的解决方案。通常,对象数据库可能更适合解决某些问题。ZODB是一个可扩展和冗余的对象数据库,其专注于存储可扩展的对象,而没有天生“对象-关系”不匹配情况:在尝试将面向对象的语言与关系查询系统映射对象建立关系时,可能会出现这种不匹配情况。
    二、ZODB使用
    • 建立和断开与ZODB的连接
    连接到ZODB的标准方法设计创建四个对象:存储数据库数据的方法、围绕存储并未存储提供实际数据库行为“db”包装、启动与该数据库的特定会话“connection”对象、允许我们访问包含在数据库中的对象层次结构的根的“dbroot”对象。以下所有代码示例都需要将下面代码片段放在Python文件中的示例代码前面,以便正确地打开和关闭ZODB示例:
    使用ZODB
    #-*-coding: UTF-8 -*-
    from ZODB import FileStorage, DB
    import transaction
    
    class MyZODB(object):
        def __init__(self, path):
            self.storage = FileStorage.FileStorage(path)
            self.db = DB(self.storage)
            self.connection = self.db.open()
            self.dbroot = self.connection.root()
    
        def close(self):
            self.connection.close()
            self.db.close()
            self.storage.close()
    • 存储简单Python数据
    ZODB数据库可以存储所有类型的Python对象。
    存储简单Python数据
    from myzodb import MyZODB, transaction
        db = MyZODB('./Data.fs')
        dbroot = db.dbroot
        dbroot['a_number'] = 3
        dbroot['a_string'] = 'Gift'
        dbroot['a_list'] = [1, 2, 3, 5, 7, 12]
        dbroot['a_dictionary'] = { 1918: 'Red Sox', 1919: 'Reds' }
        dbroot['deeply_nested'] = {
          1918: [ ('Red Sox', 4), ('Cubs', 2) ],
          1919: [ ('Reds', 5), ('White Sox', 3) ],
          }
        transaction.commit()
        db.close()
    获取简单数据
    from myzodb import MyZODB
    db = MyZODB('./Data.fs')
    dbroot = db.dbroot
    for key in dbroot.keys():
    print key + ':', dbroot[key]
    db.close()
    运行结果:

    注意:我们使用文件名"Data.fs"纯粹是为了遵循传统,因为许多ZODB安装在使用特定文件名方面实际上已经实现了标准化,你可以随心所欲地使用任何名称。
    更改简单数据
    当将某个键设置为新值,ZODB始终能够了解这一点。因此,对上面的数据库进行类型如下的更改将会自动别检测和持久化:
    db = MyZODB('./Data.fs')
        dbroot = db.dbroot
        dbroot['a_string'] = 'Something Else' 
        transaction.commit() 
        db.close()
    但是,需要显示地将对列表或字典的更改告诉ZODB,因为ZODB无法了解所做的更改。这是持久性框架中的一个规定的可变性和参与功能。下面的代码不会导致ZODB看到更改:
    a_dictionary = dbroot['a_dictionary']
    a_dictionary[1920] = 'Indians'
    transaction.commit()
    db.close()
    如果打算更改——而不是完全替换——类似如此的复杂对象,需要设置数据库根的属性 _p_changed,以通知它需要重新存储其下的属性:
    a_dictionary = dbroot['a_dictionary']
    a_dictionary[1920] = 'Indians'
    db._p_changed = 1
    transaction.commit()
    db.close()
    删除对象:
    del dbroot['a_number']
    transaction.commit()
    db.close()
    注意:如果没有调用transaction.commit(),则上面更改都不会对数据库产生任何影响。正如在关系数据库中一样,只有通过提交已执行的操作,这些操作才会出现在数据库里。
    • 持久化对象
    当然,很少有Python程序员希望使用上面的诸如列表、元祖和字典等日益复杂的数据结构。相反,希望创建全能的Python对象,并且其属性将会自动地持久化。下面介绍如何定义一个可持久到数据库的类型。为此,该类将必须从Persistent继承。
    from persistent import Persistent
    class Host(Persistent):
        def __init__(self, hostname, ip, interfaces):
            self.hostname = hostname
            self.ip = ip
            self.interfaces = interfaces
    存储对象
    现在可以创建该类的几个实例,并在ZODB中将其持久化:
    from mymodel import Host
        host1 = Host('www.example.com', '192.168.7.2', ['eth0', 'eth1'])
        dbroot['www.example.com'] = host1
        host2 = Host('dns.example.com', '192.168.7.4', ['eth0', 'gige0'])
        dbroot['dns.example.com'] = host2
            
        transaction.commit()
        db.close()
    获取对象
    from mymodel import Host
        for key in dbroot.keys():
            obj = dbroot[key]
            if isinstance(obj, Host):
                print "Host:", obj.hostname
                print " IP address:", obj.ip, " Interfaces:", obj.interfaces
        db.close()
    更改对象
    正如“dhroot”对象能够自动检测在其键索引处放置的值一样,持久化对象将在您设置其属性时,自动执行检测,并将属性保存到数据库。
    host = dbroot['www.example.com']
    host.ip = '192.168.7.141'
    transaction.commit()
    db.close()
    但是,如果您在某个对象下面存储复杂数据类型,则会出现与连接到数据根的复杂数据类型完全相同的问题。必须像前面一样设置 _p_changed 属性:
    host = dbroot['www.example.com']
    host.interfaces.append('eth2')
    host._p_changed = 1
    transaction.commit()
    db.close()
    最后,ZODB数据库实例很容易维护。由于ZODB数据库实例不包含需要设计或修改的模式,要执行的唯一例行维护是定期压缩以防止其耗尽整个磁盘。为了支持事务回滚,写到ZODB数据库的每个新的更改实际上都是追加到“Data.fs”文件,而不是更新该文件中已经存在的信息。要删除随着事务提交二积累的旧信息,ZODB管理员必须偶尔对其数据进行压缩。
    注意:一次只有一个程序能够安全地打开“Data.fs”文件


    ZODB官方:http://www.zodb.org

    展开全文
  • 关系数据库与对象数据库

    千次阅读 2019-08-12 16:01:38
    关系数据库(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由...
  • 现在正在从事面向对象数据库在国内的推广工作,如果有兴趣可以与我联系。如果有任何问题可以私信我,也可以到我们网站上 面向对象数据库交流社区 来向我提问,我一定以最快的速度解答。 想把 面向对象数据库...
  • 关系数据库系统与面向对象数据库系统各自的优缺点 关系数据库系统的优点 a.灵活性和建库的简单性:目前在多数RDDMS产品中使用标准查询语言SQL,允许用户几乎毫无差别地从一个产品到另一个产品存取信息。 b....
  • 对象数据库 VS 关系数据库

    千次阅读 2004-10-20 09:30:00
    对象数据库 VS 关系数据库我们将对象数据库管理系统(ODBMS)定义为一个集成了数据库能力与面向对象编程语言能力的数据库管理系统(DBMS),ODBMS使数据库对象看起来像是已有的一个或多个程序设计语言中的程序设计...
  • 现在正在从事面向对象数据库在国内的推广工作,如果有兴趣可以与我联系。如果有任何问题可以私信我,也可以到我们网站上 面向对象数据库交流社区 来向我提问,我一定以最快的速度解答。 想把 面向对象数据库...
  • 面向对象数据库

    千次阅读 2006-03-02 22:23:00
    面向对象数据库系统支持面向对象数据模型,简称OO模型。也就是说,一个面向对象数据库系统是一个持久的、可共享的对象库的存储和管理者;而一个对象库是由一个OO模型所定义的对象的集合体。面向对象数据库系统目前尚...
  • GAE对象数据库设计特点

    千次阅读 2009-12-20 23:21:00
    GAE对象数据库设计特点Google App Engine的数据库属于对象数据库,设计的思路比较独特,主要适用于“多查询,少更新”的web应用。今天去参加Sun的开发者日,正好有个MySQL的讲座,其中提到MySQL的pluggable storage ...
  • ODB(Object Database,面向对象数据库)是数据库技术发展的趋势之一。面向对象数据库的目标是能够直接保存Java对象。目前市面上已经有几种比较成熟的面向对象数据库产品,例如DB4O等等。面向对象数据库使用简单,...
  • 面向对象数据库技术

    千次阅读 2006-08-28 10:58:00
    面向对象的关系数据库设计一、 概念的区分有些人把面向对象的数据库设计(即数据库模式)思想与面向对象数据库管理系统(OODBMS) 理论混为一谈。其实前者是数据库用户定义数据库模式的思路,后者是数据库管理程序的思路...
  • 面向对象数据库和NoSQL

    千次阅读 2011-02-28 22:57:00
    先来说说对象数据库。定义参见维基:http://zh.wikipedia.org/zh/%E5%AF%B9%E8%B1%A1%E6%95%B0%E6%8D%AE%E5%BA%93 一个数据库的持久性整体规划通常都是不成套的。各种ORM(对象关系映射)工具都能更容易地进行对象...
  • PowerBuilder核心对象数据库窗口对象

    千次阅读 2014-03-24 11:00:50
    PowerBuilder是一种基于C/S结构的面向对象的可视化工具,主要是安装在客户端使用,作为数据库应用系统的开发工具而存在。这也就说明了PowerBuilder更是一种数据库开发工具。  数据窗口是PowerBuilder功能最强,最具...
  • ZODB 入门 如何通过面向对象的动态语言 Python 使用对象数据库 Noah Gift, 软件工程师, Giftcs Brandon Craig Rhodes (brandon@rhodesmill.org), 软件工程师 简介: 关
  • 但自己试用觉得这个东东真心不错(当然也有自己的优势和劣势),所以自己建立了这个网站来推广(面向对象数据库交流社区)。 但今天在打开db4o的官方网站时发现Versant已经不再对db4o进行支持。这点让我非常的痛心...
  • 原文:http://zwwwxy.blogchina.com/blog/article_81038.1423950.html 今天的数据处理方式呈现出明显的在表达层和数据层...对象数据库从十年前开始出现,目的是为了满足这一访问向中间层转变的需要,甚至设想把对象
  • 事物总是对立与统一的,有结构化的数据就有非结构化的...关系型数据库用了这么多年, 也感觉到对于一些非结构化数据的处理确实比较困难。因此NoSQL数据库的出现也是必然。但NoSQL的出现,并不代表关系型数据库的没落
  • 对象数据库与关系数据库利弊谈

    千次阅读 2007-02-06 09:41:00
    在20世纪60年代后期引入的面向对象技术引起了一场革命。...不再像关系型数据库一样用死板的二维表格来表示数据,对象技术使用类对数据进行描述。一个对象是一个类的实例,就像一颗特定的橡树是橡树类的实例一 样。对
  • DELPHI与WIN32时空第三章 多线程第四章 接口第五章 包第六章 事件与消息第七章 组织你的模块第八章 探索数据库第九章 多层体系结构第十章 操作界面与操作逻辑第十一章 面向对象数据库基础 本书原著李战...
  • ①关系数据库系统的优点 a.灵活性和建库的简单性:从软件开发的前景来看,用户与关系数据库编程之间的接口是灵活与友好的。目前在多数RDDMS产品中使用标准查询语言SQL,允许用户几乎毫无差别地从一个产品到另一...
  • 原载: 在设想使用XML和关系数据库形成一个对象数据库>一文中,已经阐述了关系数据库和对象数据库的主要区别:对外键的使用是通过直接记录,还是遍历外键子表来获得。而这里,是面对另一个重要的区别:如何释放对象...
  • 面向对象数据库的发展

    千次阅读 2006-03-02 22:15:00
    数据库技术在商业领域的巨大成功,导致数据库应用领域迅速扩展。20世纪80年代以来,出现了大量的新一代...面向对象程序设计方法在计算机的各个领域都产生了深远的影响,也给数据库技术带来了机会和希望。人们把面向对
  • 关于对象数据库 DB4O 的一些BUG以及如何应对的方法1、objectmanager 6.0不能正常显示中文而是框框,是字体设置不正确的原因,因为没有源程序,所以无法定位在哪里出了问题。2、objectmanager 6.0需要对应db4o 6.1的...
  • “拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决 【错误状态】 “/XXX”应用程序中的服务器错误。 --------------------------------------------------------------------------------...
  • 面向对象数据库的正确评价与选择

    千次阅读 2004-10-31 14:47:00
    (来源:http://www.ccidnet.com) 一、概述 就象关系数据库一样,市场上有许多面向对象数据库(Object-Oriented Database,OODB)可供选择。然而,OODB在价格、功能、特色和体系上没有什么统一的标准。本文将帮助你...
  • 对象关系数据库

    千次阅读 2014-05-30 11:23:53
    使用面向对象方法学...按照“第三代数据库系统宣言”的文章的思想,一个面向对象数据库系统(OODBS)必须满足两个条件: (1)支持统一核心的面向对象数据模型; (2)支持传统数据库系统所有的数据库特征。 也就是

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 168,630
精华内容 67,452
关键字:

对象数据库