首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

独家消息:数据库为什么不推荐使用外键约束?

今日,互联网技术的逐渐强大,方便了我们的衣食住行,我们的的个人信息都存储在数据库,那么数据库都运用到哪些技术呢?今天我就大家分享一下:

首先,很多人在工作中确实也不会使用外键。但是呢,询问他们原因,大多是这么回答:每次做DELETE或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便。坦白说,这么说也是对的。但是呢,不够全面。接下来我就展开说明。

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

保证数据的完整性和一致性;

级联操作方便;

将数据完整性判断托付给了数据库完成,减少了程序的代码量;

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

性能问题

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

并发问题

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

扩展性问题

这主要是分为两点:

做平台迁移方便

分库分表方便

技术问题

使用外键,其实将应用程序应该执行的判断逻辑转移到了数据库上。那么就意味着一点,数据库的性能开销变大了,对D,B,A的要求就更高了。

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

综上所述,是我个人的一些观点,欢迎大家在评论区留下自己的观点!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190104A0U72D00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券