ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据表设计为什么不用外键

2022-06-14 23:32:26  阅读:157  来源: 互联网

标签:数据完整性 不用 外键 约束 数据表 死锁 一致性


   目前所负责公司的大部分系统里,数据表的逻辑结构设计都不使用外键约束,纳闷了,书上说外键约束不是很好的保护了数据完整性吗?

其实不以为然,下面看看为什么数据表逻辑设计不使用外键。

   先看看某互联网大厂,在编程手册里写 “不得使用外键与级联,一切外键概念必须在应用层(代码)解决”

  

 

 为什么会有这个规定?目前本人所在公司也有这规定(DBA会审核检视所有移交的DB脚本)。外键约束的存在,保障了数据完整性,一致性的同时,但是也带来性能和使用上的问题。

什么是外键? 数据表B表的主键是数据表A表的候选键,例如如下数据表

 

由图中两个关系表可见,外键card_id表示了两个关系实体的相关联系。外键约束的好处显然易见,例如对A表操作一个不存在的实体,那么就会报错,

同时删除A表一个实体,会同步删除对应B表的实体,这样保持了数据的完整性和一致性,把数据完整性和一致性交由数据库来控制和判断,减少了程序员的代码

开发量。

外键约束带来好处的同时,也有不少的缺点。例如以上的场景有高并发的时候,会出现严重的性能问题。因为每次操作数据的时候,数据库都要去判断关联表中

是否存在相应的数据,即使数据在逻辑上必然存在的。另外外键约束可能会导致死锁的问题。这里描述一下死锁发生的条件,“互斥”,“占用且等待”,“不可强占”,“循环等待”,四个条件缺一不可。还有如遇到系统扩展,需要分库分表的时候,会带来非常多的额外困难。

 

 

 

一切外键的概念在应用层(代码)解决

标签:数据完整性,不用,外键,约束,数据表,死锁,一致性
来源: https://www.cnblogs.com/yinzone/p/16372804.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有