none
外键是否采用 RRS feed

  • 问题

  • 在之前的工作中,我建立的数据表结构,都会考虑创建外键的。

    但是,基本上每次数据库设计,拿出存在外键的表结构设计思想的时候,都有几乎超过一半的人反对,之前我都坚持采取自己的设计方案。

    现在进入了新公司,看他们的数据表设计都不存在外键,我开始怀疑我之前的设计思路了。

    网上也有类似的争议:

    正方观点:
    1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。
    eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢?
    2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。
    3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面

    反方观点:
    1,可以用触发器或应用程序保证数据的完整性
    2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题
    3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert,   update,   delete   数据的时候更快)
    eg: 在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不止一个 字段有外键,这样扫描的数量是成级数的增长!我的一个程序入库在3个小时做完,如果加上外键,需要28个小时! 

    聚集在MSDN的大神们,数据库设计,到底需不需要使用外键呢。是严格的创建外键,还是分情况而定,还是彻底摒弃外键!


    2013年11月6日 2:01

答案

  • 肯定是根据实际情况的

    公有制点比较明确,选择起来也不是很犯难

    对于外方观点提到的触发器,其实和外键一样,所以,如果用触发器来取代外键,我个人觉得还不如直接用外键呢,外键至少看起来关系更明确

    2013年11月6日 3:14

全部回复

  • You may don't like it but the truth is: it depends.

    2013年11月6日 2:52
  • 肯定是根据实际情况的

    公有制点比较明确,选择起来也不是很犯难

    对于外方观点提到的触发器,其实和外键一样,所以,如果用触发器来取代外键,我个人觉得还不如直接用外键呢,外键至少看起来关系更明确

    2013年11月6日 3:14
  • 各施各法,有人吃桃子一定削皮,有人吃桃子不削皮

    如果是规则是死的(数据维护或特殊处理时注意一下即可),通常是加上外键


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2013年11月6日 4:26
  • 我们公司的系统就没有建立外键,我们的项目经理也是非常资深的

    估计原因跟你贴出的观点是一样的

    2013年11月6日 7:27