建表时是否需要外键约束

小熊博客
2021-07-13 / 0 评论 / 328 阅读
温馨提示:
本文最后更新于2021-07-13,若内容或图片失效,请留言反馈。

建表时是否需要外键约束

阿里的Java编程规范有这么一条

“【强制】不得使用外键与级联,一切外键概念必须在应用层解决。”

外键约束的优点

  • 保证表间保证数据的完整性和一致性,是事务的一致性实现
  • 级联操作方便
  • 将数据完整性判断托付给了数据库完成,减少了程序的代码量
  • DBA与开发分工明确,且减少代码量

为何阿里编程规范不许使用外键约束呢?

外键是能够保证数据的完整性和一致性,但实际上会给系统带来更多的问题,反正我个人也是认为不用外键约束会比较好。

  • 性能瓶颈,外键被数据库维护,当涉及外键字段的增,删,更新操作之后,需要触发先关查询去检查,性能开销
  • 并发死锁,update/delete时,外键对数据一致性的控制,其他表内部加锁。进行行锁操作,在并发大流量事务场景,很容易造成死锁
  • 扩展性差,随着数据量的增加 ,分库分表时,外键无法生效,所以将数据关系维护在程序中,方便迁移。