数据库外键使用优缺点

转载 2013年12月03日 14:41:17

摘录网上讨论共同观点:
主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作,

矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。

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

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

结论:
1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。
2,用外键要适当,不能过分追求
3,不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,然后个个应用通过这个层来访问数据库。

 

原文地址:http://www.cnblogs.com/tearer/archive/2010/07/25/1784896.html

数据库设计中一个矛盾:数据库外键,用还是不用

最近在做一个派单系统数据库设计,在设计中有些疑惑的地方中午在网上发起一个话题讨论. 我把这个讨论流程.发过来 大家可以可以看看. 也可以发表一下自己的意见. 对于主/外键/索引来说,在...
  • permike
  • permike
  • 2015年07月24日 11:54
  • 2701

数据库设计中一个矛盾:数据库外键,用还是不用

最近在做一个派单系统数据库设计,在设计中有些疑惑的地方中午在网上发起一个话题讨论. 我把这个讨论流程.发过来 大家可以可以看看. 也可以发表一下自己的意见. 对于主/外键/索引来说,在...
  • permike
  • permike
  • 2015年07月24日 11:54
  • 2701

数据库外键的使用和原则

外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有客户号,客户名称 b表中存有每个...
  • ycl295644
  • ycl295644
  • 2015年11月19日 10:47
  • 10328

数据库到底用不用外键

最近工作中用到powerdesigner ,前期需要通过powerdesigner生成表结构,后来由于负责人员不在,很多表结构的添加没有同步到powerdesigner,一个个核对表结构着实麻烦,于是...
  • u010414666
  • u010414666
  • 2015年09月24日 13:52
  • 4017

数据库到底用不用外键

来自CSDN的文章,原文地址:http://blog.csdn.net/neusoft_lkz/article/details/4366668; 对其中精华部分做一下摘录,关键内容如下: 对于...
  • dlzhyh
  • dlzhyh
  • 2015年12月28日 00:36
  • 2991

数据库是否应该应用外键的一点思考

最近看了和尚师傅的数据库设计。数据库表都是孤立的,不存在外键关系。虽然放弃了EF引以为傲的懒加载和导航属性等特性,实际编码量也会增大。但是带来的优点是灵活性非常高。表和表之间没有任何约束。当然这点也可...
  • echoshinian100
  • echoshinian100
  • 2015年07月21日 10:58
  • 497

关于数据库主键和外键(终于弄懂啦)

一、什么是主键、外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其...
  • bingqingsuimeng
  • bingqingsuimeng
  • 2016年06月06日 15:01
  • 65632

N个数据库外键实例

因为外键在数据库中相对主键比较难理解,主键就是唯一标识一条记录,很好理解;下面来看N个外键实例; 1 学生所属系 student(s#,sname,d#),即学生这个关系有三个属性:学号,姓名,所...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年07月26日 12:07
  • 861

关于数据库主键和外键(终于弄懂啦)

一、什么是主键、外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  ...
  • harbor1981
  • harbor1981
  • 2016年12月04日 00:09
  • 68873

浅谈数据库主键和外键及索引

1、主键: 若某一个属性组(注意是组)能唯一标识一条记录,该属性组就是一个主键。主键不能重复,且只能有一个,也不允许为空。定义主键主要是为了维护关系数据库的完整性。 2、外键: 外键用于与另一张表...
  • zhouziyu2011
  • zhouziyu2011
  • 2017年04月08日 22:36
  • 2206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库外键使用优缺点
举报原因:
原因补充:

(最多只允许输入30个字)