Database design 面向对象数据库——为什么大多数公司不使用它们

Database design 面向对象数据库——为什么大多数公司不使用它们,database-design,oop,object-oriented-database,Database Design,Oop,Object Oriented Database,我对编程很陌生(刚刚大学毕业) 在过去的4年里,我一直在思考面向对象开发以及这种方法的众多优点 我的问题是 在开发应用程序中使用纯面向对象数据库不是更容易吗 为什么面向对象数据库不像关系数据库那么分散 在我看来,使用OO数据库是有意义的,后者将避免在表上映射复杂对象所需的大量构造。当您已经拥有一个大小为千兆字节的关系数据库,并且已经存储了20年的数据,并且有数百或数千个表时,使用这种方法没有任何好处。这是许多业务应用程序的真实世界。数据库不仅仅用于特定应用程序的对象映射。在您编写的应用程序消失很

我对编程很陌生(刚刚大学毕业)

在过去的4年里,我一直在思考面向对象开发以及这种方法的众多优点

我的问题是

在开发应用程序中使用纯面向对象数据库不是更容易吗

为什么面向对象数据库不像关系数据库那么分散


在我看来,使用OO数据库是有意义的,后者将避免在表上映射复杂对象所需的大量构造。

当您已经拥有一个大小为千兆字节的关系数据库,并且已经存储了20年的数据,并且有数百或数千个表时,使用这种方法没有任何好处。这是许多业务应用程序的真实世界。数据库不仅仅用于特定应用程序的对象映射。在您编写的应用程序消失很久之后,数据库仍然存在。咬紧牙关,学习关系数据库,因为它们在未来100年内不会消失

这没有什么好的理由,特别是ORM(活动记录)使用的兴起和映射的痛苦。面向对象的数据库在许多方面更快更好。不受欢迎的原因是需要。到目前为止,RDBMS一直做得很好,在大型企业中,最大的痛苦被称为“迁移”。与大多数技术一样,用户的需求是主要目标,面向对象通常不是卖点。速度或许可以,但昂贵的硬件和经过验证的RDBMS调优也可以实现性能

此外,在这一领域有技能的人也必须再次接受培训(这需要花费很多钱)。更不用说那些学习邪恶PL/SQL的昂贵顾问

我会说,做一个先行者。正如圣雄甘地所说,做你想看到的改变。
有趣的是,你让我想用谷歌搜索开源OO-DB

另一个问题是语言支持。那些不是面向对象的语言呢?一个好的数据库需要每个人都能访问,无论使用哪种语言。这就是为什么许多特定语言的数据库失败的原因,因为它们的市场只是该语言的用户


还有移民因素。MySQL最大的用户是长期用户。迁移到一个全新的数据库系统,其基本设计与现有的大型数据库系统完全不同,这将是非常昂贵的,而且回报甚微。

十年前,我研究了面向对象的数据库设计(针对个人项目)并发现他们并不擅长轻松或快速地进行某些类型的搜索(比如“查找所有姓氏以“S”开头的人”),尽管在面向对象数据库中当然有很多关系查询是不需要的。而且,当时面向对象数据库还没有真正准备好进行大规模部署(这当然不是我所关心的)我相信较新的版本已经解决了这个问题,但是仍然有很多intertia和良好的ORM使得使用关系数据库相对容易


然而,有一种趋势正在远离关系数据库,请参见。我相信谷歌不使用关系数据库(但也不使用面向对象的,而是一些专有和分布式的东西)。

过去曾在一家面向对象的数据库公司工作()-目前-我认为我对是什么让他们变得伟大以及是什么让他们变得不那么伟大有了相当的了解

太好了:

没有对象-关系不匹配。如果要将内存中的对象x存储到持久性存储,ObjectStore可以通过近乎实时的保证来实现。我们的产品已被许多公司用于满足关系数据库或ORM引擎的苛刻时间要求

没有对象关系不匹配-在对象中开发,在对象中思考,在对象中存储

不太好:

ORM:对象关系管理器几乎使对象数据库变得无关紧要

模式演化:更改一个类以添加一个字段,现在您必须对整个数据库进行变形。多年来,ObjectStore在这方面做得越来越聪明,但这仍然是许多OODBMS的难点

坏:

工具支持——这就是为什么OODBMS在大多数地方都不是新手。今天的每个人都可以使用Crystal Reports、Access或Excel并大量生成报告。有了OODBMS,你必须通过程序员来构建这种逻辑,我们都知道,当你需要考虑预算报告时,这种情况可能会发生得有多快一些在设计时没有想到的xyz参数

工具是OODBMS在市场上失败的原因,而不是技术优势、性能或语言支持(ObjectStore支持C++/Java/.Net,并支持COM以支持任何IDispatch语言,如VB、Perl等)


所以我在这里说了一些轻蔑的话,特别是关于我非常喜欢的产品。但是ObjectStore在非常特定的任务上非常棒,但对于构建Web应用程序来说是一个糟糕的选择。尽管在某一点上,它推动了库存管理后端的发展。

采用面向对象数据库如此缓慢的一个原因是它们并不是许多可扩展的开源替代方案。对于RDBMS,有MySQL(Oracle现在拥有)、PostgreSQL等

另一个问题是,至少对于Java来说,RDBMS访问的标准API、ORM部分的JDBC和JPA都有更大的公司支持,并且更为人所知。面向对象数据库访问的JDO是一个标准,但没有那么流行

在大多数情况下,面向对象数据库比关系型数据库具有更强的API或语言锁定,这也是拥有多种平台和语言投资的大公司继续使用关系型数据库的另一个原因R1 {EAV_RELVAR_NAME*, ... } R2 {EAV_RELVAR_NAME*, ATTRIBUTE_NUMBER*, COLUMN_NAME, DATA_TYPE, ...} R3 {EAV_RELVAR_NAME, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ..., ATTRIBUTE50}
R1 { {'STATE_CODES'} }
R2 { {'STATE_CODES', 1, 'STATE_NAME', 'CHAR(30)'} ,
     {'STATE_CODES', 2, 'STATE_CODE', 'CHAR(2)' } ...}
R3 { {'STATE_CODES', 'ALABAMA', 'AL'} ,
     {'STATE_CODES', 'ALASKA',  'AK'} ...}