主要原因是SQL。能够在应用程序之外的其他上下文中使用数据库中的数据非常有用,而且通常情况下,对象数据库中存储的数据格式不容易查询。通过关系型数据库,数据可以成为数据仓库的一部分,或者被系统管理员等进行查询。
我们能够回答不止一次吗?另一个原因是关系型数据库在数学上有很强的基础:从关系的定义,一直到正规化,该理论是非常牢固的。虽然关系模型确实无法很好地映射到面向对象编程中,但我认为该模型的稳定性和优势大于映射问题。
我认为这是因为“对象数据库”正在解决一个(几乎)没有人真正拥有的问题。对于对象图的简单持久化,大多数面向对象环境中内置的序列化已经足够了。如果您想在数据子集上执行复杂操作,则关系数据库和SQL非常适合。
除了一些边缘应用(巨大的对象图无法保存在内存中,但其关系并不适合于关系型数据库使用),实际上并没有任何必要使用这些工具。
尽管OODB不是主流,但我们仍应该考虑它们所取得的成功。Cache和Zope都被广泛使用(相对而言),在某些标准下被认为是成功的。
也许OODB没有引起显著关注的最大原因是混合对象关系系统的成功,这些系统从OODB中占据了大部分潜在市场份额:PostgreSQL和Informix。
我知道这并没有直接回答问题,但我认为这是方程式的一部分。总的来说,我认为动力和根深蒂固的思维模式支持关系数据库使得人们很难转变。当前,数据库专业几乎完全在关系理论方面进行培训,使得你的数据库专业人员非常有兴趣避免OODB,学术界也几乎只为从业者教授关系型数据库理论。
除非大型公司的DBA、主流教授和课程以及超出开发人员范畴的员工管理OODB受到充分的培训,否则无论从开发方面有多好,我认为它都很难获得大规模的吸引力。
你觉得这很奇怪吗?现在有一股推动,将领域驱动设计作为面向对象分析和设计的顶峰,并且有企业模式可供选择,可以利用ORM系统来持久化我们的对象。对我来说,如果你的应用程序设计是面向对象和以领域为中心的,那么使用OODB将极大地有益于您的应用程序。
除了成熟度和采用率等问题之外,从哲学角度来看,对于OO应用程序而言,OODB似乎是有益的。首先,不需要维护映射层;)
但是,如果你没有进行领域驱动设计,将对象用作数据对象并喜欢存储过程,那么你可能无法理解;)
关系型数据库管理系统(RDBMs)建立在强大的理论基础上,已经存在市场上很长时间,在许多情况下可以比面向对象数据库(OODBs)更准确地对数据进行建模,并且可以被更多的数据库管理员使用。这是一个关系元组的形式表达的原因。
在技术领域,昂贵的技术决策并非由具备技术知识的人做出。使用关系型数据库的公司雇佣了大量员工,他们感到对面向对象数据库(OODB)存在威胁,因此会避免学习相关知识。
一个原因是数据库关注数据,而对象关注结构和算法。一旦您将数据嵌入类中,就会将关系和操作特征化为静态结构。另一方面,数据库则是将数据解构为一堆原子表的实例,可以重新组合成不同的结构(通常使用类),而不会破坏原子的完整性。
数据库有点类似于六面六角柔性多面体。