博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库到底用不用外键
阅读量:5760 次
发布时间:2019-06-18

本文共 1189 字,大约阅读时间需要 3 分钟。

最近工作中用到powerdesigner ,前期需要通过powerdesigner生成表结构,后来由于负责人员不在,很多表结构的添加没有同步到powerdesigner,一个个核对表结构着实麻烦,于是想到到反向生成模型,但没有外键关系导致生成的模型也没有外键。对项目中不用外键感到好奇于是问了相关人员原因,并简单了解了外键的特点和使用场景。为了进一步了解,在网上找了相关文章以下为转载的原文链接: 

今天听了一个企业技术总监的宣讲,结果听说在他开发系统的过程中,都没有用到外键,这让我很惊讶,赶紧上网搜索了一些资料看了看,终于明白了不用外键的原因。

这是一篇关于是否使用外键的讨论,讲的很有道理: 

对于主/外键/索引来说,在一些开发团队中被认为是处理数据库关系的利器,也被某些开发团队认为是处理某些具体业务的魔鬼,您的观点呢?在实际应用中您会采取哪种方式? 
大家共同观点:主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作, 
矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。 
正方观点: 
1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢? 
2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。 
3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面。

反方观点: 

1,可以用触发器或应用程序保证数据的完整性 
2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题 
3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert, update, delete 数据的时候更快)eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不止一个字段有外键,这样扫描的数量是成级数的增长!我的一个程序入库在3个小时做完,如果加上外键,需要28个小时! 
结论:1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。2,用外键要适当,不能过分追求3,不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,然后个个应用通过这个层来访问数据库。

转载于:https://www.cnblogs.com/yangwujun/p/7132497.html

你可能感兴趣的文章
阿里云成为Hyperledger超级账本全球会员,发力区块链生态建设
查看>>
“照骗”是如何炼成的?
查看>>
Rainbond v5.1.2 发布,微服务架构应用便捷管理和交付
查看>>
Git 2.21.0 发布,分布式版本控制系统
查看>>
【对讲机的那点事】当对讲机不工作时如何处理?
查看>>
Python Linux系统管理与自动化运维
查看>>
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 26 章 高可用、负载均衡和复制
查看>>
puppet 颁发证书
查看>>
Java面试必问面试题,你掌握了吗?
查看>>
CSS3带小图标垂直下拉菜单
查看>>
软件成本度量时为何要估算软件规模?如何估算?
查看>>
百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图
查看>>
Android 设备+APP+号码信息
查看>>
Java Web之SpringMVC 上传文件
查看>>
WPF之路——实现自定义虚拟容器(实现VirtualizingPanel)
查看>>
Spark 创建RDD、DataFrame各种情况的默认分区数
查看>>
民意调查Django实现(四)
查看>>
C# 自定义FileUpload控件
查看>>
Discuz!X3.1标签伪静态修改和伪静态规则
查看>>
ADO.net学习
查看>>