最近工做中用到powerdesigner ,前期须要经过powerdesigner生成表结构,后来因为负责人员不在,不少表结构的添加没有同步到powerdesigner,一个个核对表结构着实麻烦,因而想到到反向生成模型,但数据库没有外键关系致使生成的模型也没有外键。对项目中不用外键感到好奇因而问了相关人员缘由,并简单了解了外键的特色和使用场景。为了进一步了解,在网上找了相关文章如下为转载的原文连接:
http://www.cnblogs.com/pengxl/archive/2010/06/11/1756346.htmlhtml
今天听了一个企业技术总监的宣讲,结果据说在他开发系统的过程当中,都没有用到外键,这让我很惊讶,赶忙上网搜索了一些资料看了看,终于明白了不用外键的缘由。mysql
这是一篇关因而否使用外键的讨论,讲的颇有道理:
对于主/外键/索引来讲,在一些开发团队中被认为是处理数据库关系的利器,也被某些开发团队认为是处理某些具体业务的魔鬼,您的观点呢?在实际应用中您会采起哪一种方式? 你们共同观点:
主键和索引是不可少的,不只能够优化数据检索速度,开发人员还省不其它的工做, 矛盾焦点:
数据库设计是否须要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。 正方观点:
1,
由数据库自身保证数据一致性,完整性,更可靠,由于程序很难100%保证数据的完整性,而用外键即便在数据库服务器当机或者出现其余问题的时候,也可以最大限度的保证数据的一致性和完整性。eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增长了B应用,A和B两个应用也许是不一样的开发团队来作的。他们如何协调保证数据的完整性,并且一年之后若是又增长了C应用呢? 2,
有主外键的数据库设计能够增长ER图的可读性,这点在数据库设计时很是重要。 3,
外键在必定程度上说明的业务逻辑,会使设计周到具体全面。sql
反方观点:
1,
能够用触发器或应用程序保证数据的完整性 2,
过度强调或者说使用主键/外键会平添开发难度,致使表过多等问题 3,
不用外键时数据管理简单,操做方便,性能高(导入导出等操做,在insert, update, delete 数据的时候更快)eg:在海量的数据库中想都不要去想外键,试想,一个程序天天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,通常还不止一个字段有外键,这样扫描的数量是成级数的增加!个人一个程序入库在3个小时作完,若是加上外键,须要28个小时! 结论:
1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全本身控制),不用外键;小系统随便,最好用外键。2,用外键要适当,不能过度追求3,不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,而后个个应用经过这个层来访问数据库。数据库