为什么面向对象的数据库没有像关系数据库那样被广泛使用?[关闭]


18

我遇到过许多关系数据库管理系统(RDBMS)。但是最近我使用了休眠模式,这使我开始怀疑为什么面向对象的数据库没有那么流行。

如果像Java或C#这样的面向对象语言如此流行,那么为什么面向对象的数据库管理系统(OODBMS)也不那么流行呢?


1
“ NoSQL”方法现在非常流行。RDBMS有限且有限,幸运的是,它们现在正在迅速失去优势。
SK-logic

您如何称呼oodb?hibernate只是一个通过oo接口与rdbms通信的框架。
西蒙·贝格

2
2009年有人在SO上问过类似的问题,请参见stackoverflow.com/questions/1350044/…恕我直言,鉴于给出的每个答案,今天仍然有效。
Doc Brown

@Simon by oodb,我的意思是面向对象的数据库

1
@Simon:Versant是一个oodb(我在两个不同的公司的生产中都看到过)。
Giorgio

Answers:


11

原因有很多。

  1. 许多开发人员仅在关系数据建模方面经验丰富。要使用OO数据库,他们将需要学习完全不同的方法来建模和考虑数据。这确实非常困难或非常耗时。
  2. 关系数据库有很多时间可以成熟。甚至免费的关系数据库也具有高级的优化和索引技术。而且,关系数据易于存储和编制索引。关于OO数据库不能说相同的话。
  3. 当关系模型和面向对象模型开始出现时。Relational在数学上是“正确的”,并且具有保存和查询数据的标准,因此具有很大的优势。OO没有任何东西。
  4. [推测]许多大公司投入了大量资源来制作他们的关系数据库。相反,支持OO DB将适得其反。因此,他们中的许多人转而投资于将OO原理集成到关系模型中,从而使大多数当前的DB称为对象关系。IMO这些模型比纯关系或纯OO更糟糕。[/ speculation]
  5. [注意]最后要注意的是,许多开发人员并不真正了解OO建模数据的方式。这通常会导致欠佳的贫血​​模型。如此众多依赖廉价且缺乏经验的开发人员的开发公司宁愿选择简单的,关系型的模型,该模型在所有CS学院中都讲授,而不是选择艰难而未经验证的OO方法。

5
除了最后一点,我同意你的所有观点。我认为,与对象数据库相比,开发人员更容易弄乱关系数据库。复合键和断开的关系很常见,但在我看来至少很难弄乱一个类层次结构。
Tjaart

@Tjaart弄乱了类层次结构似乎是大多数面向对象开发人员的规范。
弯曲

10

当数据库第一次出现时,OOP仍然不是编程的方式。另一方面,关系数据库获得了很大的吸引力。IBM在80年代引入的SQL很快就成为所有数据库的通用语言

当OOP流行时,有一些尝试,但是有一些问题。首先,真正的OODBMS真的很难实现。对于关系数据库,表和相关索引是相当简单的结构(例如B树)。另一个原因是关系模型背后有很多理论,它直接来自数学集合论。有正确设计关系数据库的已知方法(请考虑规范化等)。最后但并非最不重要的一点是,人们已经习惯了很多SQL。

在大多数情况下,现代NoSQL解决方案实际上并不是向OODBMS迈进的一步。他们中的许多人仍然是有关系的,只是没有关系JOINs。实际上,它们中很少有对象存储,但并不是真正的OODBMS,因为它们不了解对象之间的关系。

OODBMS缺乏强大推动力的另一个原因是,存在“穷人的OODBMS”解决方案-ORM。由于它们以众所周知的,稳定的和经过测试的数据库引擎为后盾,因此获得了极大的欢迎,但是它们提供了到对象的映射。当然,这些不是真正的OODB。


“但是,对于OODBMS的推动如此之弱的另一个原因是,存在“穷人的OODBMS”解决方案-ORM。”:非常好!+1。
Giorgio

这不是真的。MUMPS于1966年设计,直到1974年,IBM才启动了第一个研究项目以开发System R,这是世界上第一个RDBMS。Oracle仅在1979年InterSystems M亮相的同一年发布了世界上第一个商业级RDBM。问题是那之后发生了什么。答案可能是ODBMS没有针对报告进行优化,而大多数LOB应用程序用例在读取方面存在严重的读写失衡。
阿列克谢·齐马列夫

-2

OODBMS擅长存储复杂数据。但是,大多数时候,即使使用OO语言,所需的数据也相对简单。因此,传统的RDBMS更适合。


2
数据几乎从来都不是简单的,我想您无法解释为什么OODB并不流行,因为ORM毕竟做得很好。
Tjaart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.