数据库中为什么不推荐使用外键约束

域名2025-11-05 09:31:27628

 引言

其实这个话题是数据束老生常谈,很多人在工作中确实也不会使用外键。库中包括在阿里的不推JAVA规范中也有下面这一条

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

但是用外呢,询问他们原因,数据束大多是库中这么回答的

每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的不推时候很痛苦,测试数据极为不方便。

坦白说,荐使键约这么说也是用外对的。但是数据束呢,不够全面,库中所以开一文来详细说明。不推

正文

首先我们明确一点,荐使键约外键约束是用外一种约束,这个约束的存在,会保证表间数据的关系“始终完整”。因此,外键约束的存在,并非全然没有优点。

比如使用外键,源码下载可以

保证数据的完整性和一致性  级联操作方便  将数据完整性判断托付给了数据库完成,减少了程序的代码量

然而,鱼和熊掌不可兼得。外键是能够保证数据的完整性,但是会给系统带来很多缺陷。正是因为这些缺陷,才导致我们不推荐使用外键,具体如下:

性能问题

假设一张表名为user_tb。那么这张表里有两个外键字段,指向两张表。那么,每次往user_tb表里插入数据,就必须往两个外键对应的表里查询是否有对应数据。如果交由程序控制,这种查询过程就可以控制在我们手里,可以省略一些不必要的查询过程。但是如果由数据库控制,则是必须要去这两张表里判断。

并发问题

在使用外键的情况下,每次修改数据都需要去另外一个表检查数据,需要获取额外的锁。服务器托管若是在高并发大流量事务场景,使用外键更容易造成死锁。

扩展性问题

这里主要是分为两点

 做平台迁移方便,比如你从Mysql迁移到Oracle,像触发器、外键这种东西,都可以利用框架本身的特性来实现,而不用依赖于数据库本身的特性,做迁移更加方便。  分库分表方便,在水平拆分和分库的情况下,外键是无法生效的。将数据间关系的维护,放入应用程序中,为将来的分库分表省去很多的麻烦。

技术问题

使用外键,其实将应用程序应该执行的判断逻辑转移到了数据库上。那么这意味着一点,数据库的性能开销变大了,那么这就对DBA的要求就更高了。服务器租用很多中小型公司由于资金问题,并没有聘用专业的DBA,因此他们会选择不用外键,降低数据库的消耗。

相反的,如果该约束逻辑在应用程序中,发现应用服务器性能不够,可以加机器,做水平扩展。如果是在数据库服务器上,数据库服务器会成为性能瓶颈,做水平扩展比较困难。

本文地址:http://www.bzve.cn/news/352f62499023.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

荒野行动电脑手柄设置教程(一步步教你如何设置电脑手柄来玩荒野行动)

俄语系邪恶黑客团伙操纵十余种高度专业化的社交媒体诈骗

数据库DynamoDB的迁移全过程详解

每个企业都需要有自己专属的网络安全框架

Linux系统中,软件安装通常大致可以归结为两种安装方式:以源代码或者预编译包安装方法1、Deb包的安装方式: Ubuntu系统中,软件通常以deb格式的包文件发布,它是一种预编译软件包。deb包中除了包含已编译的软件,通常还包括软件的拷贝路径、对其它软件包的依赖关系纪录、比较通用的配置文件以及软件的描述、版本、作者、类别、占用空间等信息。 具体相关命令: dpkg -i xxx.deb    | --install xxx.deb 安装deb软件包以上基本包罗了你在使用Ubuntu系统过程中涉及到关于软件安装的方法,关于软件安装使用基本都可以搞定吧

基于数据复杂度的数据库选型

筑牢数字安全防线 Fortinet防火墙到SASE的安全网络变革

互联数据将引发身份验证领域中的信任革命

友情链接

滇ICP备2023006006号-39