为什么大多数项目的数据库都取消外键了(外键取消原因)

数据库外键

如果一个字段a在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段a称为表二的外键;

主键表和外键表的理解

(1)以公共关键字(也就是两张表共有的字段)作主键的表为主键表(父表,主表)
(2)以公共关键字(也就是两张表共有的字段)作外键的表为外键表(从表,外表)

外键的作用

主键保证了数据的唯一性,外键保证了数据的完整性。
主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

以上是对数据库外键简单的概括,但是我们会发现,其实真正在互联网企业中工作的时候,往往项目中的数据库很少用到外键(物理外键),大多数用到的都是(逻辑外键)至于为什么主要有以下几点。

  1. 大并发的时候会对性能造成影响

外键就想其他类型的索引一样,性能方面的影响,主要是写入操作(比如,UPDATE/INSERT/DELETE),但是它与单表索引不同的是,它会引用一张或多张父表,这样当对子表进行写入操作(UPDATE/INSERT)的时候,父表就会被加上“共享锁”,这样在对子表高并发进行写入操作的情况下,对父表的写入操作就会由于“共享锁”的存在,而会长时间不能得到更新!当然查询是可以的,但是企业中大多数项目都是有一定的并发量的,所以在选择的时候,大多数还是取消了物理外键的约束。

  1. 项目无法支持热更新(也就是不停机去进行维护)

分布式的项目,绝大多数都需要热更新的,热更新就是不停机去进行维护。不管是互联网产品,还是一些游戏 手游。大多都会采用热更新的方式。如果数据库有外键,可能会造成新更新的代码 无法运行。 因为要匹配现有的外键,可能要重启服务器。那么这样就达不到热更新的目的了。因为外键是强力执行的。注意点和分布式绝对是冲突的。

  1. 为了降低耦合度

删除了外键,并不是我们不要外键,而是物理的外键,物理的这一层关系我们不需要了。但是逻辑上的话,这样的外键还是存在的。这样子适当的降低了表和表之间的耦合度。

  1. 后期很难进行分库分表操作

项目中如果数据库表不多还好说,如果说我们的数据库有上百张表甚至上千张表的时候,有几十个外键甚至几百个外键以及更多关联。这个时候分库分表该怎么做呢,真的是难以进行,难以去实现。所以如果一个互联网项目在前期没有做到很好的控制,无法控制我们的外键关系。当业务上来以后。物理的外键一定会让运维人员欲仙欲死,所以很多的架构师 数据库DBA 都会弃用数据库的外键。

总结

如果你设计的是传统的小型项目的话,物理的外键存不存在都可以 。
如果你设计的是一个互联网项目,或者是一个大型项目的时候,我们是绝对不能用数据库外键的,一定要为以后的架构多多考虑。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值