【阿里JAVA规范】 :不得使用外键与级联,一切外键概念必须在应用层解决
阿里巴巴为什么这么规定?
1.每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便,也就是说插入一条主记录的时候,这个时候主记录对应的外键,也必须删除或者更新,再比如一个测试员在做压力测试入库1000W数据,那么同时对应的外键记录表也要入库1000W,也就需要造2000W数据,增加工作量
2.性能问题:对于包含主键表的记录,需要入库2张表
3.并发问题:外键约束会启用行级锁 主表写入时会进入阻塞,比如订单明细表和订单总额表存在外键,当增加订单明细表的时候,但是订单总额表写 *** 作没有完成就会导致明细表发生阻塞,线程一直积压导致mysql崩溃。
4.级联删除问题:多层级联删除会让数据变得不可控 ;触发器也严格被禁用
5.数据耦合:数据库层面数据关系产生耦合 数据迁移维护困难
6.如果mysql的数据达到100亿以上,此时需要数据迁移,比如迁移到hbase,由于hbase没有主外键的关系,程序中并没有主外键关系的检查,就不能保证迁移过程中保证数据一致性
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)