数据库和OO
都说数据库对OO有阻碍作用,关系型数据库不是也能体现出对象之间的关系吗?外键代表单向,中间再放个关联表,不就代表双向关联了吗、对象之间不也就这几种关系吗?继承除外啊。
都说数据库对OO有阻碍作用,关系型数据库不是也能体现出对象之间的关系吗?外键代表单向,中间再放个关联表,不就代表双向关联了吗、对象之间不也就这几种关系吗?继承除外啊。
1, 粒度问题(对象有聚合,组合,子对象,而关系只有行和列两种粒度)
2, 子类型问题(关系模型没有继承策略)
3, 同一性问题(对象的比较有地址比较和值比较,而数据库呢?同一个行可以对应多个恒等对象,equls问题。
4, 关联相关问题(对象关联有一对一,一对多,多对多,但是数据库只用通过外键表达的一对一和一对多,而且没有方向)
5, 数据导航问题(关系数据我们可以通过定制sql来导航,而对象导航是渐进的,可怕的n+1问题就在这里),数据库的导航外键如果再查询里不指定就不起作用,对象则不同。
可见my bloghttp://oojdon.iteye.com/blog/901578
[该贴被oojdon于2011-04-20 15:54修改过]
我再从功用方面谈谈:
关键是边界问题,对象关系有多种不同边界可供选择,如领域边界,聚合边界,实体对象边界。
就象洋葱皮一样,一层层,非常丰富可供选择,而数据库要么是1,如外键,要么是0,要么没有。
其次,有边界有封装,可以防止两个数据表数据操作不一致。
表达“关系”的工具越丰富越好,比如现在SNS社交网络微博表达人之间关系,还处于数据表关系阶段,要么是被关注,要么不关注,人自己关系还有家人关系 隐秘关系 朋友关系 生意关系,公众粉丝关系,这些丰富关系都需要在微博或SNS中可方便表达出来。
为人服务的工具越丰富,人的可选择范围越多,才真正促进人类发展,人类文明不应该受限于一两种工具。
[该贴被banq于2011-04-20 17:10修改过]
哦 懂了 感谢两位的回答
上午我这面的网不好 没回复上。
OO中难以表达的关系,用关系数据库都可以表达出来。
以上是软件工程角度分析,其实还可以再深入探寻原因。
数据库只关注数据,而这些数据最终代表的实际意义很模糊,谁都能引用、加工、修改。而客观世界中的问题不光是数据上的问题,可能还有更重要的行为没有体现。数据库模型是不涉及体现行为的。这成了数据库模型的天生短板,程序员将行为代码单独分离编写。所以,数据库模型中的内容搭载的是“直通车”,任何代码可以直接“抵达”(引用、加工、处理)。所以,可以这么说,正是数据库模型可以具有太多的含义,以至于谁都可以引用、加工、处理。这就造成这种太多“含义”,变成毫无意义,也同时造成数据库模型的不统一、善变性。
关系数据库来源于关系代数,关系代数来源于一阶逻辑,一阶逻辑来源于弗雷格的《概念文字》,逻辑来源于古希腊的伟大传统。
OO来源于一个计算机科学家贫乏的哲学思考,OO和现实世界是不兼容的。
可悲的是软件业走了这么长时间的弯路。
又是一句我爸是李刚。
若果你想否定OO,那么先证明边界是不存在的。若果边界不存在,那么一切语言描述客观都是错误的,那样的话,软件能够存在么?一旦定义了某样东西,该东西的边界自然生成。为什么人类能辨识,也只因边界存在而已,如人类定义车,那么看见车后,绝不会想那是乌龟,为什么能够区别车和乌龟?只因边界而已。没有边界就如混沌,李刚还是李刚么?呵呵,其实你说的每一句话,你想的每一个思想,已经存在边界了(各种定义),只是你不承认罢了。