外键的使用

在数据库设计中,不使用外键约束成为一种趋势。外键虽然能确保数据完整性,但其在修改、删除和添加数据时可能导致不便,特别是在高并发场景下可能引发死锁。此外,外键会使数据库负担加重,影响性能。因此,开发者倾向于在应用层通过代码逻辑处理多表关联,以提高灵活性和系统性能。
摘要由CSDN通过智能技术生成

【前言】最近做项目的时候,一直有一个疑惑为什么现在做项目建表的时候,大家都不使用外键,而是在应用层使用代码逻辑解决多表之间的关联关系。

【复习】主键、外键

定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
1.主键是能确定一条记录的唯一标识。比如,一条记录包括身份证号,姓名,家庭住址等。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的某字段,是B表的主键,那他就可以是A表的外键。

补充:

  • 谁用外键约束自己谁就是从表。
  • 添加数据时,先给主表添加,然后再给从表添加。
  • 删除数据时,先删除从表的,然后再删除主表数据。
  • 修改从表数据时,外键值必须在主表数据中存在。

【解答】为什么不建议使用外键

上图是阿里的开发手册中关于外键使用的规定。

个人理解:

开发过程中,无论是修改还是添加删除的时候,外键的存在会给我们带来一些不方便的地方,测试数据的过程中也会很麻烦。但是外键的优点也不容忽视,它可以保证数据的完整性。将数据完整性判断托付给了数据库完成,可以减少程序的代码量。但是相比它的优点,它带来的弊端也是使我们放弃使用外键的主要因素:

  1. 修改、删除、添加数据的过程中需要考虑一些问题,不方便测试。
  2. 若是在高并发大流量事务场景,使用外键更容易造成死锁。
  3. 使用外键等于将应用程序应该执行的判断逻辑转移到了数据库上。数据库的性能开销变大了,增加了数据库的消耗。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值