论坛首页 综合技术论坛

今天看了个开源的web应用,近100个表,用power designer逆向后看表间关系,结果出来了,吓了一跳。。。

浏览 40822 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (6)
作者 正文
   发表时间:2011-04-15  
需要权衡,不一定就不能用或一定要用。如果对性能影响不大,而可靠性要求又高的话,还是加上外键更好些。

代码控制也没有问题,但是写代码的时候就确实要有整体意识
0 请登录后投票
   发表时间:2011-04-16  
表列与列之间数据关联,但不建FK
0 请登录后投票
   发表时间:2011-04-16  
海量数据存储有搞头啊~DB2与Oracle的xmltype不知道有没有搞头,相当于no-sql了是不是?
0 请登录后投票
   发表时间:2011-04-16  
在高性能大数据量的系统中,用外键是自讨苦吃。
0 请登录后投票
   发表时间:2011-04-16  
kimmking 写道
xsnxj 写道
表间有联系可以防止出错和乱引用(开发人员),表间无联系可以随意修改和执行具体没有定义哪种的好坏,一般是系统设计员制作的会带上表间联系,相反是临时应用就会出现无表间联系的情况,具体看需求

表有fk的关联,也就有了约束,
优点,数据的一致性,
缺点,插入删除、备份迁移的问题,性能,等等

数据的一致性一般都是要保证的,不用库的关系的话,需要程序里自己去保证。
这个跟 identity字段有点类似,数据库支持identity/increment或者sequence,
再或者不用数据库的,自己写个identity的机制。


具体根据需求来分析

同意该说法
0 请登录后投票
   发表时间:2011-04-17  
pengmj 写道
在高性能大数据量的系统中,用外键是自讨苦吃。


性能再高也不过高在一小部分,还有不用外键数据怎么检查。完全靠程序员的自我意识?

用外键有时候确实是比较烦,但是这个对高性能有什么影响???
0 请登录后投票
   发表时间:2011-04-18  
不用键啊不用键~~~
0 请登录后投票
   发表时间:2011-04-18   最后修改:2011-04-18
aa87963014 写道
pengmj 写道
在高性能大数据量的系统中,用外键是自讨苦吃。


性能再高也不过高在一小部分,还有不用外键数据怎么检查。完全靠程序员的自我意识?

用外键有时候确实是比较烦,但是这个对高性能有什么影响???


数据怎么检查,靠文档好不?

数据对不对,测试team得给力,相对于业务逻辑的错误数据,违反关联约束的情形也算不得什么了。

过多的关联约束很可能大幅降低开发的效率。以我所在项目为例,开发数据库靠一个maven-carbon5 的project来维护,包括建表、插入初始数据、虚拟运行时数据、建立索引等等都由包含在carbon5 project内的一系列SQL文件里。每天早上的例行公事就是svn更新carbon5 project,然后运行重建开发数据库。一般来说需要增加一个什么表,即使是一个关系节点,也可以简单地将相应DDL和虚拟数据append到项目的SQL文件序列尾端。一旦因此更新闹出了什么问题,只需删除末尾的那个SQL文件即可回滚。如果表之间都采用外键约束,那么作为关系节点的新表就需要嵌入到某个较早的SQL文件中,并且那个较早文件的其它部分(如插入语句的顺序)也很可能需要修改以满足外键约束,这种事多起来,大家都死定了,虽然有svn的比较功能,追溯起来也会很麻烦的,吃饱了撑着么。

至于外键对性能的影响,前面有人说的很清楚了,约束是什么,就是随时检查你插入的数据对不对。怎么检查,如果是唯一键约束,那每插入一条记录,整个表在这个column上的值都会被扫一遍,以确认新加入的数据并不违反这一约束,难道这种扫描不耗费数据库的性能资源?

btw,我的项目的所有表,除了主键没有任何其他约束。
0 请登录后投票
   发表时间:2011-04-18  
以前分析过索引到底性能冲击是什么部分

数据量大,大到什么程度

不受保护的数据是很危险的雷,尤其是表间关系复杂的情况,做做报表就算了,如果你的关键业务依赖于此,还是自求多福
0 请登录后投票
   发表时间:2011-04-19  
F**K小测验,唉,刚开始也用外键,后来,慢慢的就全删了.
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics