数据库外键的使用原则
作用:保持数据的一致性、完整性
为何说外键有性能问题:
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,不用外键而用程序控制数据一致性和完整性时,应该写一个中间层来保证,然后每个应用通过这个层来访问数据库。
数据库外键的使用原则相关推荐
- [转载]数据库外键的使用
[转载]数据库外键的使用 外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有客户号,客户名称 ...
- mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作
1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...
- 数据库 外键 优缺点_不同数据格式的优缺点:键值与元组
数据库 外键 优缺点 by Hieu Nguyen (Jack) 由Hieu Nguyen(Jack) 不同数据格式的优缺点:键值与元组 (The pros and cons of different ...
- 查看外键名称查看数据库外键名字
我们要进行删除外键时,需要知道外键的名字,那么如何查看数据库外键呢?有2种方式查看: 1.过查看表的方式查看外键名字: 2.通过mysql自带的系统表查看外键. 更多精彩请访问本文源地址: https ...
- wamp mysql外键设置_数据库外键是什么意思
数据库外键是什么意思? 外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列.通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接.这个列就成为第二个表的外键. 当创建或更 ...
- 数据库中主键和外键的设计原则
來源:http://www.cnblogs.com/deng02/archive/2009/02/26/1398462.html 主键和外键是把多个表组织为一个有效的关系数据库的粘合剂.主键和外键的设 ...
- 数据库外键的作用,以及和主键的区别
http://blog.csdn.net/tiantian1980/article/details/1603126 外键是数据库一级的一个完整性约束,就是数据库基础理论书中所说的"参照完整性 ...
- 深刻理解数据库外键含义
上课的时候老师讲的很清楚,但是毕竟没有实际操作数据库,思考和实践真的完全是不同层次的. 我的读者表里面全是学生这一类,外键约束使得学生这一类别在类别表中无法删除,就是因为读者表中的学生这一类在约束,试 ...
- java 数据库外键查询_oracle中查询所有外键引用到某张表的记录
其实查找这篇文章 我主要用的sql 是这句 select * from user_cons_columns t where t.constraint_name like 'FK_CTS_CONT_ ...
最新文章
- 「iOS 面试之道」勘误(二)
- “毒蘑菇”治重度抑郁,获美国“突破疗法”
- Dell在CRM的创新及该模式的推广
- 校宝在线携手神策数据 数据赋能产品服务体验双升级
- JSP 基础之 JSTL c:forEach用法
- 计算机数控系统的软件结构模式,第四章 计算机数控系统(CNC系统)
- mysql 导入unl文件_Informix和Oracel数据库导入UNL数据
- 红橙Darren视频笔记 条件查询 删除 更新,数据库结合http做缓存机制(数据库操作)下
- 数据库期末复习知识点:(仅供参考)
- thinkphp 访问根目录文件
- 最详细的讲解过滤器,拦截器,AOP的区别
- 怎么调用html调色板,JS实现的系统调色板完整实例
- matlab列联表的独立性检验,(8.4列联表独立性分析案例.ppt
- 【论文阅读】水下机器人控制视觉伺服部分
- STM32U5,意法半导体新打造的超低功耗MCU旗舰版
- 计算机中系统更新是指,Mac电脑操作系统更新了什么功能
- c语言返回结构体,(C/C++) 用函数返回一个结构体
- 挑战一个盒子实现小米logo
- Cisco设备的启动以及交换机的介绍
- 《中国主要城市道路网密度监测报告》正式发布
热门文章
- Android View体系(三)属性动画
- OpenGL 各类库的解析 gl/glu/glut/freeglut/glfw/glew
- 进程间通信 - 动态链接库实现
- Android开源框架——内存泄漏检测工具 LeakCanary
- ubuntu12.04LTS下eclipse indigo版配置opencv2.4.9
- VS2010配置opencv2.4.9
- Arduino/Microduino与OneNet平台及web服务器端的交互
- c语言switch设计计算器,求助。。关于用switch编写简易计算器
- 智能骨传导眼镜vue_穿戴设备迎新机遇,智能音频眼镜或将是下一个风口
- winsever 2008 r2 管理员账号没有权限_钉钉管理员攻略—主管理员①