阿里Java规范
【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
说明:以学生和成绩的关系为例,学生表中的 student_id是主键,那么成绩表中的 student_id则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。
外键
外键:表的外键是另一表的主键,外键是可以有重复的,可以是空值,用于保持数据的一致性。
利:
保证数据的完整性和一致性级联操作方便将数据完整性判断托付给了数据库完成,减少了程序的代码量。
弊:
性能下降: 每次对数据进行DELETE或UPDATE操作都必须考虑外键约束 数据库都会判断当前操作是否违反数据完整性,性能下降。死锁:使用外键,外键关联的数据查询要去另一张表,获取额外的锁,容易造成死锁。扩展性问题:触发器 外键 这种依赖于数据库本身的特性 可扩展性较差。 分库分表方便,在水平拆分和分库的情况下,外键是无法生效的。
参考
/rjzheng/p/9907304.html
/u010695055/article/details/53169472
/u010094934/article/details/90137110