作用:保持数据的一致性、完整性

为何说外键有性能问题:

1.数据库需要维护外键的内部管理;

2.外键等于把数据的一致性事务实现,全部交给数据库服务器完成

3.有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,(扫描变化了的记录是否合格等)而不得不消耗资源

4.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况

数据库外键的使用以及优缺点

摘录网上讨论共同观点:主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作,
矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。

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

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

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

数据库外键的使用原则相关推荐

  1. [转载]数据库外键的使用

    [转载]数据库外键的使用 外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有客户号,客户名称 ...

  2. mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作

    1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...

  3. 数据库 外键 优缺点_不同数据格式的优缺点:键值与元组

    数据库 外键 优缺点 by Hieu Nguyen (Jack) 由Hieu Nguyen(Jack) 不同数据格式的优缺点:键值与元组 (The pros and cons of different ...

  4. 查看外键名称查看数据库外键名字

    我们要进行删除外键时,需要知道外键的名字,那么如何查看数据库外键呢?有2种方式查看: 1.过查看表的方式查看外键名字: 2.通过mysql自带的系统表查看外键. 更多精彩请访问本文源地址: https ...

  5. wamp mysql外键设置_数据库外键是什么意思

    数据库外键是什么意思? 外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列.通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接.这个列就成为第二个表的外键. 当创建或更 ...

  6. 数据库中主键和外键的设计原则

    來源:http://www.cnblogs.com/deng02/archive/2009/02/26/1398462.html 主键和外键是把多个表组织为一个有效的关系数据库的粘合剂.主键和外键的设 ...

  7. 数据库外键的作用,以及和主键的区别

    http://blog.csdn.net/tiantian1980/article/details/1603126 外键是数据库一级的一个完整性约束,就是数据库基础理论书中所说的"参照完整性 ...

  8. 深刻理解数据库外键含义

    上课的时候老师讲的很清楚,但是毕竟没有实际操作数据库,思考和实践真的完全是不同层次的. 我的读者表里面全是学生这一类,外键约束使得学生这一类别在类别表中无法删除,就是因为读者表中的学生这一类在约束,试 ...

  9. java 数据库外键查询_oracle中查询所有外键引用到某张表的记录

    其实查找这篇文章  我主要用的sql 是这句  select * from user_cons_columns t where t.constraint_name like 'FK_CTS_CONT_ ...

最新文章

  1. 「iOS 面试之道」勘误(二)
  2. “毒蘑菇”治重度抑郁,获美国“突破疗法”
  3. Dell在CRM的创新及该模式的推广
  4. 校宝在线携手神策数据 数据赋能产品服务体验双升级
  5. JSP 基础之 JSTL c:forEach用法
  6. 计算机数控系统的软件结构模式,第四章 计算机数控系统(CNC系统)
  7. mysql 导入unl文件_Informix和Oracel数据库导入UNL数据
  8. 红橙Darren视频笔记 条件查询 删除 更新,数据库结合http做缓存机制(数据库操作)下
  9. 数据库期末复习知识点:(仅供参考)
  10. thinkphp 访问根目录文件
  11. 最详细的讲解过滤器,拦截器,AOP的区别
  12. 怎么调用html调色板,JS实现的系统调色板完整实例
  13. matlab列联表的独立性检验,(8.4列联表独立性分析案例.ppt
  14. 【论文阅读】水下机器人控制视觉伺服部分
  15. STM32U5,意法半导体新打造的超低功耗MCU旗舰版
  16. 计算机中系统更新是指,Mac电脑操作系统更新了什么功能
  17. c语言返回结构体,(C/C++) 用函数返回一个结构体
  18. 挑战一个盒子实现小米logo
  19. Cisco设备的启动以及交换机的介绍
  20. 《中国主要城市道路网密度监测报告》正式发布

热门文章

  1. Android View体系(三)属性动画
  2. OpenGL 各类库的解析 gl/glu/glut/freeglut/glfw/glew
  3. 进程间通信 - 动态链接库实现
  4. Android开源框架——内存泄漏检测工具 LeakCanary
  5. ubuntu12.04LTS下eclipse indigo版配置opencv2.4.9
  6. VS2010配置opencv2.4.9
  7. Arduino/Microduino与OneNet平台及web服务器端的交互
  8. c语言switch设计计算器,求助。。关于用switch编写简易计算器
  9. 智能骨传导眼镜vue_穿戴设备迎新机遇,智能音频眼镜或将是下一个风口
  10. winsever 2008 r2 管理员账号没有权限_钉钉管理员攻略—主管理员①