外键的使用

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

【复习】主键、外键

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

补充:

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

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

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

个人理解:

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

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

猜你喜欢

转载自blog.csdn.net/The_Best_Hacker/article/details/113978229