目录
一、外键使用场景
今天测试员测出来许多bug,是由于未解决外键关系照常的我问题.
A表的id是B表的外键,业务上B表通过外键关联A表获取A表的name
A表删除后,B表无法获取到name
通过加逻辑外键来解决了这个问题
二、为什么不使用物理外键
1.参考阿里手册
2.物理外键的优点
- 保证数据的完整性和一致性
- 级联操作方便
- 将数据完整性判断托付给了数据库完成,减少了程序的代码量
如果通过物理外键解决我的bug比逻辑外键更简单
3.物理外键的缺点
- 性能问题: 比如每次像A表中插入数据都会去B表查询是否有对应数据,如果不止一个外键呢?如果批量插入或更新呢?
- 并发问题: 在使用外键的情况下,每次修改数据都需要去另外一个表检查数据,需要获取额外的锁。若是在高并发大流量事务场景,使用外键更容易造成死锁。
- 扩展性问题: 比如表结构重构,mysql迁移到oracle,分表分库,是不是会顿时感到头痛
三、总结
在并发不高,操作不频繁的数据是可以使用外键的,比如省市县的级联关系,这个几乎不会有什么特别多的变动.
但是仍然不推荐