到底用不用数据库级别外键?

简介: 阿里巴巴Java规范数据库级别外键应用层级别外键约束最佳实践

阿里巴巴 Java 规范


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


数据库级别外键


  大家学习数据库的时候都学习过外键,使用外键有很多优点,最主要的优点就是:


  • 保证数据的完整性和一致性。


  • 将数据完整性判断交给数据库完成,减少程序的代码量,减少程序员工作量。


     使用外键可以减少程序员工作量,真是个好东西,但是现实却总是事与愿违。外键确实可以保证数据的完整性和一致性,但却伴随着一系列系统缺陷。权衡后,我们选择一般不使用数据库级别外键,除非你的 leader 要求使用。


缺陷


  • 使用数据库时需要考虑外键约束,增加麻烦。


  • 数据库工作量增加,影响数据库性能。


  • 每次插入数据需要查询对应所有外键表中是否有数据,开销较大。可改为由程序员控制、优化查询,优化数据库,减少数据库的消耗。


  • 每次查询对应外键表时进行锁定,增加高并发系统死锁风险。


  • 在进行数据库迁移和备份的时候依赖特定数据库,改为程序控制可以增加可移植性。


应用层级别外键约束


 外键逻辑: 一张表去引用其他的表的数据。

 应用层实现: 程序员使用程序去控制查询对应外键表,代替数据库外键。


最佳实践


  • 数据库就是单纯的表,只用来存取数据。
  • 需要使用外键约束,使用程序去替代数据库外键,在应用层实现外键。

————————————————

版权声明:本文为CSDN博主「Acx7」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Acx77/article/details/120995806

相关文章
|
8月前
|
SQL 存储 Web App开发
PolarDB-X 分布式数据库中的外键
外键是关系型数据库中非常便利的一种功能,它通过一个或多个列为两张表建立连接,从而允许跨表交叉引用相关数据。外键通过约束来保持数据的一致性,通过级联来同步数据在多表间的更新和删除。在关系数据库系统中,大多数表都遵循外键的概念。
|
11天前
|
存储 关系型数据库 MySQL
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
14 0
|
6月前
|
关系型数据库 MySQL 数据库
Mysql数据库 8.SQL语言 外键约束
Mysql数据库 8.SQL语言 外键约束
57 0
|
9月前
|
关系型数据库 数据库 数据库管理
关系型数据库中的主键和外键
关系型数据库中的主键和外键
|
SQL 存储 关系型数据库
数据库三大范式、ER图与实体类、外键约束与级联操作你了解多少?(下)
数据库三大范式、ER图与实体类、外键约束与级联操作你了解多少?
311 0
|
SQL Oracle Java
数据库三大范式、ER图与实体类、外键约束与级联操作你了解多少?(上)
数据库三大范式、ER图与实体类、外键约束与级联操作你了解多少?
462 0
|
SQL 关系型数据库 MySQL
删除数据库中的所有外键(MySql)?
我不想手动删除所有的目录,有办法删除数据库中的所有外键约束吗? 可以使用此SQL生成ALTERTABLE: SELECT concat(‘alter table ‘,table_schema,’.’,table_name,’ DROP FOREIGN KEY ‘,constraint_name,’;’) FROM information_schema.table_constraints WHERE constraint_type=’FOREIGN KEY’ AND table_schema=’!!YOUR_SCHEMA_HERE!!’; 它将输出这样的SQL:
64 0
|
关系型数据库 MySQL Linux
linux清空mysql数据库所有表包括带外键的表
linux清空mysql数据库所有表包括带外键的表
|
SQL 数据库
编写SQL为数据库某一字段添加外键约束
编写SQL为数据库某一字段添加外键约束
90 0
编写SQL为数据库某一字段添加外键约束
|
XML 数据库 数据格式
数据库报错!外键问题。
数据库报错!外键问题。
76 0

热门文章

最新文章