读书人

今日看了个开源的web应用近100个表

发布时间: 2012-09-14 23:00:49 作者: rapoo

今天看了个开源的web应用,近100个表,用power designer逆向后看表间关系,结果出来了,吓了一跳。。。
100个表之间竟然一个关系都没有,就是没有外键?

相应的,别的应用的表间联系却比蜘蛛网还蜘蛛网,


我想问下,这样2种表的设计都各有啥利弊?

存在即表明其合理,如果不涉及保密的话,能透露下现在怎么处理的吗?

相信各位做普通应用的很少遇到500个表和1000+视图的吧,至少我没有遇到过(参加过的最大项目表数目才300个不到)

细细道来,就当是给我们上堂公益课,不胜感激!


最多用过100多张表的表示鸭梨很大! 敬听经验!!!! 67 楼 jhaij 2011-05-01 fsplove520 写道fnet 写道别说网站,金X的企业应用也没有外键。
这个兄弟说的是金蝶吧。嘿嘿
应该是金山 68 楼 robert 2011-05-06 如果不需要 RDBMS 来保证数据一致性,何必用关系型数据库?
外键仅仅在你的数据没有 normalize 时候,才会产生所谓很高额外代价。这也意味着你不需要 join 查询,否则外键是自然使用的。请随便找本关系型数据库的书,看看 RDBMS 的数学原理。维护数据库性能,则需要高水平的 Dba 来优化,而不是让程序员来乱妥协。
至于目前的 NOSQL 潮流,主要要解决的是数据库的 scale out 问题,而不是简单的性能更好。何况几乎所有高性能 NOSQL 分布式数据库都是靠牺牲了 Acid 来获得分布能力,即对数据的一致性要求不高。看看 cap 三角规则就知道这两种技术是不同的取向。RDBMS 取正确性,牺牲可用性。在基本程序设计上,两者思路也几乎相反:RDBMS 数据应是 normalize 的,而 NOSQL 经常是 denormalize 冗余和无关系的。
69 楼 dixian 2011-05-08 我在项目中的使用:
核心业务逻辑:必须使用外键保证数据的一致性和完整性;
非核心业务:比如引用到数据字典、地区等,只是标明此处有关联关系,但不使用外键。
比如系统日志需要记录who,what等,这些只需要标识有关联关系即可,不需要建立外键关联。 70 楼 supttkl 2011-05-13 很正常!非常正常! 71 楼 supttkl 2011-05-13 一张表开几百个字段也不错啊,我见过很多系统,越是大型的,越是一个表的字段越多! 72 楼 bobocici 2011-05-18 外键不光是保证数据完整性的,更重要的功能是帮助优化器做出正确的选择。

以oracle中经典的scott模式举例,
假如以下场景,当你做两个表的join查询时,又没有在where条件中指定dept的条件,而且select列中也没有出现dept的列,别说这种情况不会出现,应用中层层定义的视图导致这种情况出现的非常频繁,如果没有emp指向dept的外键,那么优化器只能按照要求老老实实去做两个表的连接,因为它不知道两个表是父子表的关系,有外键的话这种开销其实是不必要的。

还有人说在海量数据库中不存在外键关系,这种说法是相当不负责任的,外键在数据仓库中的作用更大。没有外键,星状转换(star transformation)就不可能产生,没有外键,位图连接索引(bitmap join index)就不可能建立...这些东西在海量数据查询中的基础。说到性能损失,其实索引的性能损失更大,那在海量数据库中要不就不要索引了?

其实对于程序自己保证数据的完整性的这种说法我也很怀疑,姑且不论完整性是否能得到正确的保证,你能确定你自己实现完整性的逻辑能优于数据库自身的实现么?

读书人网 >开源软件

热点推荐