精华内容
下载资源
问答
  • 对象型数据库
    千次阅读
    2021-03-16 17:54:50

    RDBMS:

    RDBMS 代表关系数据库管理系统。它是一个基于关系模型的数据库管理系统,也就是数据和关系被一些互相关联的表组成的集合锁替代。它是一个能让用户自己创建、更新数据库,并且实现对数据库管理和交互的数据库管理系统。RDBMS 基于 SQL,大部分的现代数据库系统比如 MS SQL Server、IBM DB2、Oracle、 MySQL 和 Microsoft Access 都是关系型数据库。

    OODBMS:

    OODBMS 代表面向对象数据库管理系统。它是一个将数据以对象形式存储的数据库系统,应用于面向对象编程。OOODB 实现了面向对象的一些观点比如 对象类、对象标识、多态、封装和继承。一个面向对象数据库与关系型数据库的却别是可以存储复杂的数据。Versant Object Database、 Objectivity/DB、ObjectStore、 Caché 和 ZODB 都是 OODBMS。

    标准RDBMSOODBMS
    缩写含义关系数据库管理系统面型对象数据库管理系统
    数据存储方式数据存储在实体里面,以包含特定信息的表格的形式存在数据存储在对象中
    数据复杂性处理比较简单的数据比 RDBMS 处理更大且更复杂的数据
    分组拥有公共定义的实体集合的不同实体类型用类描述拥有公共的关系、行为和相似的属性的一组对象
    数据处理RDBMS 只存储数据存储数据以及方法
    主要目标数据独立于应用程序数据封装
    主键主键可以明显的标识表中的对象对象标识符 (object identifier, OID) 对于任何一个对象和实体都是明确且持久的
    更多相关内容
  • 关系数据库对象数据库

    千次阅读 2019-08-12 16:01:38
    关系数据库(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由...
    • 关系数据库

      关系数据库(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。

      标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。

      关系模型由关系数据结构关系操作集合关系完整性约束三部分组成。

      [外链图片转存失败(img-tT691rkr-1565596874945)(D:\Wangdb\Typora\Typora图片\关系数据库.png)]

    • 对象数据库

      关系数据库(Relational database)对应,对象数据库是一种以对象形式表示信息的数据库。对象数据库的数据库管理系统被称为ODBMSOODBMS

      两个主要原因让用户使用对象数据库技术。

      • 首先,关系数据库在管理复杂数据时显得笨重。
      • 其次,被应用软件操作的数据一般是用面向对象的编程语言如C++, Java, DelphiC#写成,而那些用来转化数据表示关系数据库元组的代码很冗繁,执行时也有不少耗时。这种应用程序和数据库表示信息的模式之间的不匹配有时也被称为impedance mismatch

    • Reference

    1. 维基百科:关系数据库
    2. 维基百科:对象数据库
    展开全文
  • 面向对象数据库简介

    千次阅读 2020-03-03 21:18:18
    简单来讲,面向对象数据库 = 面向对象编程语言 + 关系型数据库特性。在这个公式里面,面向对象编程语言的三个特性为继承、多态、封装;而关系型数据库特性的三个特性:实体完整性、并发、查询处理,因此可用下图[1]...

    面向对象数据的定义

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

    展开全文
  • 对象型数据库 DB4Objects 8.0 含原码、API、白皮书及Java中文版开发指南
  • 对象型数据库 DB4Objects 8.0 含原码、API、白皮书及Java中文版开发指南
  • 针对面向对象技术和关系数据库的特点,将...该技术同时拥有关系型数据库的强大功能和可靠性以及对象的灵活性和模型化功能。文中还提出了对象关系数据库的设计方法和对象映射成关系数据库的方式,其方式简便,实用性强。
  • ZODB是一个可拓展和冗余的数据库,专注于存储可拓展的对象。 使用ZODB的好处: 使对象持久化对代码几乎没有影响,代码和数据库之间几乎没有接缝。 没有部分隐藏数据库数据库映射程序。 象之间的关系处理得非常...

    一. 概述

    ZODB是一个可拓展和冗余的数据库,专注于存储可拓展的对象。

    使用ZODB的好处:

    • 使对象持久化对代码几乎没有影响,代码和数据库之间几乎没有接缝。
    • 没有部分隐藏数据库的数据库映射程序。
    • 象之间的关系处理得非常自然,支持没有连接的复杂对象图。
    • 数据本地保存,不需要安装软件和搭建环境。

    官方文档:http://www.zodb.org/en/latest/

    安装:pip install ZODB

    二. 基本使用

    1. 存储数据

    # -*-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()
    
    
    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()
    
    

    2. 获取数据

    # -*-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()
    
    
    db = MyZODB('./Data.fs')
    dbroot = db.dbroot
    for key in dbroot.keys():
        print(key + ':', dbroot[key])
    db.close()
    
    
    

    3. 更改数据

    # -*-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()
    
    
    db = MyZODB('./Data.fs')
    dbroot = db.dbroot
    # dbroot['a_string'] = 'Gift啊'
    # transaction.commit()
    # db.close()
    
    # 更改字典数据时
    a_dict = dbroot['a_dictionary']
    a_dict[1920] = '1234567'
    # 设置数据库的根属性,通知他需要重新存储其下的属性
    dbroot._p_changed = 1
    transaction.commit()
    db.close()
    
    

    4. 删除数据

    # -*-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()
    
    
    db = MyZODB('./Data.fs')
    dbroot = db.dbroot
    del dbroot['a_number']
    transaction.commit()
    db.close()
    
    

    三. 综合案例:模拟银行存取款系统

    # -*-coding: UTF-8 -*-
    import ZODB
    import ZODB.FileStorage as ZFS
    import transaction
    
    
    import persistent
    
    
    class OutOfFunds(Exception):
        pass
    
    
    class Account(persistent.Persistent):
        def __init__(self, name, start_balance=0):
            self.name = name
            self.balance = start_balance
    
        def __str__(self):
            return f"Account: {self.name}, balance: {self.balance}"
    
        def __repr__(self):
            return f"Account: {self.name}, balance: {self.balance}"
    
        def deposit(self, amount):
            """save amount into balance"""
            self.balance += amount
    
        def withdraw(self, amount):
            """withdraw from balance"""
            if amount > self.balance:
                raise OutOfFunds
            self.balance -= amount
            return self.balance
    
    
    class ZODBUtils:
        conn = None
        filestorage = None
    
        def openConnection(self,file_name):
            self.filestorage = ZFS.FileStorage(file_name)
            db = ZODB.DB(self.filestorage)
            self.conn = db.open()
            return self.conn
    
        def closeConnection(self):
            self.conn.close()
            self.filestorage.close()
    
    
    def init_balance():
        zodbutils = ZODBUtils()
        conn = zodbutils.openConnection('zodb_filestorage.db')
        root = conn.root()
    
        noah = Account('noah', 1000)
        print(noah)
        root['noah'] = noah
    
        jermy = Account('jermy', 2000)
        print(jermy)
        root['jermy'] = jermy
    
        transaction.commit()
        zodbutils.closeConnection()
    
    
    def app():
        zodbutils = ZODBUtils()
        conn = zodbutils.openConnection('zodb_filestorage.db')
        root = conn.root()
        noah = root['noah']
        print("Before Deposit Or Withdraw")
        print("=" * 30)
        print(noah)
        jermy = root['jermy']
        print(jermy)
        print('-' * 30)
    
        transaction.begin()
        noah.deposit(300)
        jermy.withdraw(300)
        transaction.commit()
    
        print("After Deposit Or Withdraw")
        print("=" * 30)
        print(noah)
        print(jermy)
        print("-" * 30)
        zodbutils.closeConnection()
    
    
    if __name__ == '__main__':
        init_balance()
        app()
    
    
    展开全文
  • 浅论大型数据对象在Oracle数据库中的存储方法.pdf
  • 基于ORACLE对象数据库加密研究.pdf
  • 首先用一个通俗易懂的比喻来形容它们的区别:关系型数据库就类似于Excel,非关系型数据库类似于word,用哪一个,取决你想要编辑和处理什么数据。 关系型数据库:将数据存储在表中的数据库,以二维表为数据结构。表...
  • 大数据-算法-基于对象关系空间数据库理论的GIS实现.pdf
  • Oracle 9i面向对象关系数据库的程序设计.pdf
  • 关系型数据库与面向对象的冲突

    千次阅读 2014-03-01 00:43:33
    面向对象是从软件工程基本原则(如耦合、聚合和封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别,而Java是完全面向对象的语言,这个冲突就表现的越发明显。 对目前的...
  • 基于Oracle9i中面向对象关系数据库程序设计.pdf
  • Oracle对象关系数据库系统故障产生原因及其解决方案.pdf
  • 当前数据库分为 关系型数据库 和 非关系型数据库 。 一、关系型数据库 关系型数据库: 指采用了关系模型来组织数据的数据库。 结构: 关系模型指的就是二维表格模型,关系型数据库最典型的数据结构就是表,是由二维...
  • 文章从面向对象的角度,在分析了现有的场景图结构的基础上,结合面向对象数据库技术,探讨了面向应用的场景数据库的设计以及访问机制,最后在数据库系统的基础上,构建了一个可重用的面向对象场景数据库组件系统,并...
  • 基于Java-JDBC访问Oracle9i对象关系数据库的一种实现方法.pdf
  • 关系型数据库的发展历史

    千次阅读 2019-03-12 23:15:03
    数据库发展史 信息系统产生了海量的数据,有数据必须要有数据的存放位置, 无库时代 :没有专门的...非关系型数据库:为适应水平扩展性和处理超大量的数据环境,近几年发展非常迅速的发展,衍生类型非常多。 本...
  • 关系型数据库&非关系型数据库概述

    千次阅读 多人点赞 2021-04-23 18:04:03
    数据库的英文单词: DataBase 简称 : DB。用于存储和管理数据的仓库,本质上是一个文件系统,还是以文件的方式存在服务器的电脑上的。
  • 关系型数据库与非关系型数据库

    万次阅读 多人点赞 2018-04-18 15:45:07
    当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。非关系型数据库有 NoSql、Cloudant。非关系型数据库的优势: 1. 性能NoSQL是基于键值对的,可以想象成表中的主键和值的...
  • HarmonyOS数据库之关系型数据库

    千次阅读 2021-07-15 11:43:40
    数据库的操作及管理基础概述关系型数据库创建前的配置关系型数据库创建数据库新增数据查询数据更新数据删除数据 已经鸽了很久了,今天也准备了点新东西来进行发布,在搞Android的时候我们都知道有SQlite数据库以及...
  • 对象关系空间数据库为内核的GIS平台_GEOS_第四代GIS数据库技术.rar
  • 面向对象数据库-对象型关系数据库-oracle
  • 关系型数据库与非关系型数据库Nosql区别汇总

    万次阅读 多人点赞 2018-08-24 11:14:06
    目录 关系型数据库与非关系型数据库详细比较 关系型数据库与非关系型数据库优缺点对比 关于Nosql ...2.非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的...
  • 关系型数据库和非关系型数据库的区别

    千次阅读 多人点赞 2019-08-14 18:19:00
    关系型数据库 关系型数据库: 关系模型中的常用概念 优点 不足 非关系型数据库 非关系型数据库: 非关系型数据库结构 优点 不足 分类 CAP 理论 关系型与非关系型数据库的比较 最近的数据库排名 关系...
  • 传统的关系型数据库采用表格的储存方式, 数据以行和列的方式进行存储,要读取和查询都十分方便。 而非关系型数据不适合这样的表格存储方式,通常以数据集的方式,大量的数据集中存储在一起,类似于键值对、图结构...
  • 当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。 非关系型数据库有 NoSql、Cloudant。   ==========================优缺点分析如下================================...
  • 2.非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定  比如 有一个学生的数据:  姓名:张三,性别:男,学号:12345,班级:二年级一班  还有一个班级的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 481,296
精华内容 192,518
关键字:

对象型数据库