我在网上读过很多文章,但每一篇文章都没有给出一个关于如何存储和表示面向对象数据库的基本例子。例如,每一篇文章都说它们不是表,而是对象,然后提供一个ER图,其中包含指向它们之间的箭头例如,维基百科。与mongoDB网站的解释他们说相关,“没有表,没有行,没有列,没有外键,只有对象。”
我有一个简单的问题,如何使用面向对象的数据库模型存储对象,以及如何存储与OO相关的关键技术,如多态性、继承、.如果它们不是存储在某种表中的话?
发布于 2022-03-09 00:31:00
这里涉及到面向对象数据库的一个关键点。这些数据库大多不是真正的面向对象的数据库:它们存储数据,而不是有行为的真实对象。
一个典型的例子是MongoDB和类似的文档数据库:它们存储一组JSON对象,它们是复杂的动态数据结构,没有访问控制,也没有行为。与传统的奥姆技术相比,它们在面向对象上下文中的主要好处是更容易映射到本机对象模型。出于性能原因,MongoDB在内部以名为布森的二进制格式存储这些数据。因此,数据库的核心是一种存储和索引机制,它可以高效地存储、查找BSON数据的回/或锁块。
在数据上下文中,继承意味着能够为特定对象存储更多或不同的字段。在JSON上下文中,对象是动态的,根据它是子类型还是超类型,对象存储或多或少或不同的数据不是问题。相比之下,对于ORM/RDBMS,您需要在几种实现策略之间进行选择,其中有些策略需要将一个对象的数据跨多个表传播。考虑到缺乏行为,此处不处理多态。
在90年代,对象数据库是一个蓬勃发展的研究领域,人们希望用行为来存储真实的对象,并最终对对象进行版本化。一些实验性的学术系统已经建立,但它们从未达到目前领先的数据库的成熟程度。其中一个关键问题是可移植代码的存储,这使得它们的语言特性变得不像我们今天所知道的那样适合于多语言、多范式的开发(更不用说这些特性在当今网络风险世界中意味着的安全风险)。
https://softwareengineering.stackexchange.com/questions/437233
复制相似问题