建表时是否需要外键约束
阿里的Java编程规范有这么一条
“【强制】不得使用外键与级联,一切外键概念必须在应用层解决。”
外键约束的优点
- 保证表间保证数据的完整性和一致性,是事务的一致性实现
- 级联操作方便
- 将数据完整性判断托付给了数据库完成,减少了程序的代码量
- DBA与开发分工明确,且减少代码量
为何阿里编程规范不许使用外键约束呢?
外键是能够保证数据的完整性和一致性,但实际上会给系统带来更多的问题,反正我个人也是认为不用外键约束会比较好。
- 性能瓶颈,外键被数据库维护,当涉及外键字段的增,删,更新操作之后,需要触发先关查询去检查,性能开销
- 并发死锁,update/delete时,外键对数据一致性的控制,其他表内部加锁。进行行锁操作,在并发大流量事务场景,很容易造成死锁
- 扩展性差,随着数据量的增加 ,分库分表时,外键无法生效,所以将数据关系维护在程序中,方便迁移。
评论区