为什么面向对象数据库还没有成功(至今)?

20
这就是问题所在。请给出一个你认为面向对象数据库(OODB)失败的原因或者为什么现今许多系统仍然使用关系型数据库的原因。

指针在数据模型中是不好的...面向对象模型非常类似于旧的网络模型,从理论上证明不仅劣于关系模型,而且在实践中使用起来也很痛苦。失败的数据模型(分层-> XML,网络-> OO)如何不断复活真是奇怪。对我来说,不从过去吸取教训就是愚蠢的,看起来像是浪费宝贵的人类脑细胞。 - Andrew not the Saint
2
我认为这个是“先入为主”。 - Goran
为什么指针在数据模型中不好?你应该更好地解释一下你的意思,因为几乎所有的 O/R 映射工具都在其生成的数据结构中使用指针。 - lubos hasko
指针是一个与物理内存相关的概念,说它们构成了一个逻辑数据模型有点矛盾。 - Andrew not the Saint
在得出如此荒谬的结论之前,你应该先了解一些关于证明的内容。 - Stephan Eggermont
14个回答

25

主要原因是SQL。能够在应用程序之外的其他上下文中使用数据库中的数据非常有用,而且通常情况下,对象数据库中存储的数据格式不容易查询。通过关系型数据库,数据可以成为数据仓库的一部分,或者被系统管理员等进行查询。


SQL可以从几乎任何编程环境(甚至直接从查询分析器)中使用,而对象数据库管理系统总是有一些非标准的、仅用于编程的方法来查询其中的对象。 - Jacob Krall
1
你可以使用SQL查询DB4O。虽然会稍微影响性能,但是它是被支持的。 - Boris Callens
仅因为这个句柄就点赞。Pets.com?但我认为一个主要原因是每个OODB都认为他们已经解决了世界上所有的问题,并相应地收费。公司不想把业务押在一个小的、未经证实的公司上,这就是为什么Oracle存在的原因。 - chris

23

我们能够回答不止一次吗?另一个原因是关系型数据库在数学上有很强的基础:从关系的定义,一直到正规化,该理论是非常牢固的。虽然关系模型确实无法很好地映射到面向对象编程中,但我认为该模型的稳定性和优势大于映射问题。


可以的。还有一个很好的第二个答案。 - Scott Alan Miller
3
集合/关系理论确实是王者。 - Camilo Díaz Repka
任何面向对象的数据库都可以(而且很多都会)提供对其数据的关系访问。 - lubos hasko
嗯。他们可能有一定的基础,但他们选择了错误的抽象化方式。基本的抽象化应该是部分排序(这是英语吗?),而不是一个集合。 - Stephan Eggermont

13

我认为这是因为“对象数据库”正在解决一个(几乎)没有人真正拥有的问题。对于对象图的简单持久化,大多数面向对象环境中内置的序列化已经足够了。如果您想在数据子集上执行复杂操作,则关系数据库和SQL非常适合。

除了一些边缘应用(巨大的对象图无法保存在内存中,但其关系并不适合于关系型数据库使用),实际上并没有任何必要使用这些工具。


5
我认为这是因为“对象数据库”正在解决一个(几乎)没有人真正拥有的问题。我不认为这是事实:看看使用ORM项目来解决阻抗不匹配的数量就知道了。 - Phillip B Oldham
1
这就是我的观点。ORM系统处理面向对象层和数据库表示之间的匹配足够好,以至于“纯粹”的对象数据库并没有被认为增加了很多价值。此外,您可以相对容易地聘请人来管理SQL数据库,但任何OODB的专家却非常稀缺。 - Mark Bessey
我认为对象数据库是在寻找好问题的解决方案,我有点同意Mark Bessey的看法。 - thomasrutter

11

尽管OODB不是主流,但我们仍应该考虑它们所取得的成功。Cache和Zope都被广泛使用(相对而言),在某些标准下被认为是成功的。

也许OODB没有引起显著关注的最大原因是混合对象关系系统的成功,这些系统从OODB中占据了大部分潜在市场份额:PostgreSQL和Informix。

我知道这并没有直接回答问题,但我认为这是方程式的一部分。总的来说,我认为动力和根深蒂固的思维模式支持关系数据库使得人们很难转变。当前,数据库专业几乎完全在关系理论方面进行培训,使得你的数据库专业人员非常有兴趣避免OODB,学术界也几乎只为从业者教授关系型数据库理论。

除非大型公司的DBA、主流教授和课程以及超出开发人员范畴的员工管理OODB受到充分的培训,否则无论从开发方面有多好,我认为它都很难获得大规模的吸引力。


8

你觉得这很奇怪吗?现在有一股推动,将领域驱动设计作为面向对象分析和设计的顶峰,并且有企业模式可供选择,可以利用ORM系统来持久化我们的对象。对我来说,如果你的应用程序设计是面向对象和以领域为中心的,那么使用OODB将极大地有益于您的应用程序。

除了成熟度和采用率等问题之外,从哲学角度来看,对于OO应用程序而言,OODB似乎是有益的。首先,不需要维护映射层;)

但是,如果你没有进行领域驱动设计,将对象用作数据对象并喜欢存储过程,那么你可能无法理解;)


5

关系型数据库管理系统(RDBMs)建立在强大的理论基础上,已经存在市场上很长时间,在许多情况下可以比面向对象数据库(OODBs)更准确地对数据进行建模,并且可以被更多的数据库管理员使用。这是一个关系元组的形式表达的原因。


3
如果我可以强调一下Phil的观点:SQL标准化非常重要。虽然OODB尝试过使用OQL等查询语言,但它们似乎从未遵循真正的标准。此外,查询语言的质量也值得怀疑,这可能是由于缺乏标准化导致的。标准促进竞争,产生高品质的产品。

2
在我目前使用db4o的个人项目中,我有一行代码(C# 3.5): IList<Users> list = Persistence.Database.Query<Users>(u => u.Name == "Admin"); 使用强类型lambda表达式从数据库获取(惰性)对象列表。我认为这比SQL作为标准更好。 - Goran
有多少第三方工具支持那行代码?系统管理员能否在晚上11点使用该行代码?对我来说,标准化可以为开发人员和系统管理员创建工具。 - Michael Easter
db4o支持多种查询语言。作为一名程序员,我强烈支持Linq变体。 - Boris Callens
哪个标准?SQL 92甚至没有被实现,一旦你的数据库中有日期,就会出现问题。 - Stephan Eggermont

2

在技术领域,昂贵的技术决策并非由具备技术知识的人做出。使用关系型数据库的公司雇佣了大量员工,他们感到对面向对象数据库(OODB)存在威胁,因此会避免学习相关知识。


2
那还有对象关系映射器(o/r-mappers)。通过它们,真正的面向对象数据库与之相差更小,同时前述好处仍然有效。

2

一个原因是数据库关注数据,而对象关注结构和算法。一旦您将数据嵌入类中,就会将关系和操作特征化为静态结构。另一方面,数据库则是将数据解构为一堆原子表的实例,可以重新组合成不同的结构(通常使用类),而不会破坏原子的完整性。

数据库有点类似于六面六角柔性多面体。


除了那个不起作用。关系型数据库是所有数据问题的根源:高达30%的关系型数据库中的所有记录都包含错误。 - Stephan Eggermont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接