译文:对象/关系阻抗已经被解决了吗?

Has the Objects/Relational Impedance Mismatch been Solved?
这是JavaLobby上的一篇文章,现将大意翻译如下:
http://www.javalobby.org/java/forums/t54475.html

At last with JDO and EJB, with Hibernate and TopLink, with Kodo and OJB, there is no longer any need to write SQL, or even use a relational database. So where's the catch?
终于我们使用JDO和EJB,或者Hibernate和TopLink,或者Kodo和OJB等,再也不需要写任何SQL语句,甚至无需使用关系数据库了,那么这些都是目的吗?

关系数据库最初胜出是因为相对基于文件的分层数据库系统,并不是关系数据库有更好的性能或效率等,而是他的关系模型。而SQL语句是自己成功的牺牲品。

什么是面向编程的潜在缺点呢?我们喜欢将每件事分类,将它们放入合资,然后创造抽象概念来表达它们,而无需关注细节,我们可以很有效地使用这种构造方法:我们能分类这个地球上任何组织、国家 家庭等,然后可以明白它们的相似点like,如飞机类似bus,也是交通工具等。

但是我们不知道,这种方式也有不能表达的情况。模型系统并不适合在所有系统,每套方法论有自己的应用范围。面向对象编程是基于人类丰富自由的行为,也就是说OO是基于人类认识世界的角度出发的,但是有时客观事物并不是以人的认识意志存在的。

实际上,关系模型是一种正规的数学模型符号。数学上的抽象是有用的,它们能够帮助我们帮助我们以普通意义上方式解决问题难点。关系数据库在解决数据问题时是有效的。
Relational databases are a formal mathematical representation that is useful when solving data problems
SQL是一种代表或操控关系代数学的标准,这个亮点使得面向对象编程和关系数据库的阻抗存在变得现实(注:这里没有提到面向数据库编程,关系数据库应该回到它的特长关系数据处理层面上。)This highlights the true impedance mismatch between object oriented programming and relational databases

译者注:看来这两种矛盾是两种思维方式的冲突,不是技术本质冲突。

作者最后认为:通过消灭SQL,也许失去了一种操作关系数据的方法,也许将来你需要操作它们时,无从下手了。

译者注:本文主要观点是在当前面向对象分析方法全面胜利,占据编程主流时提出的一个客观提醒,虽然O/R mapping工具帮助我们更加纯洁了编程的对象化,解决一些两者阻抗问题,这样我们使用OO分析编程更加顺手方便,但是并不是说,关系数据库完全退出了,它还在数据持久方面有其价值,在处理关系数据有其特殊价值。

世界上没有十全十美的东西!有缺陷,才有进步!