加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2018-12-08 14:29:51 所属栏目:编程 来源:孤独烟
导读:弁言 其拭魅这个话题是老生常谈,许多人在事变中确实也不会行使外键。包罗在阿里的JAVA类型中也有下面这一条 【逼迫】不得行使外键与级联,统统外键观念必需在应用层办理。 可是呢,扣问他们缘故起因,大多是这么答复的 每次做DELETE 可能UPDATE都必需思量外键约

数据库中为什么不保举行使外键束缚

弁言

其拭魅这个话题是老生常谈,,许多人在事变中确实也不会行使外键。包罗在阿里的JAVA类型中也有下面这一条

【逼迫】不得行使外键与级联,统统外键观念必需在应用层办理。

可是呢,扣问他们缘故起因,大多是这么答复的

每次做DELETE 可能UPDATE都必需思量外键束缚,会导致开拓的时辰很疾苦,测试数据极为不利便。

率直说,这么说也是对的。可是呢,不足全面,以是开一文来具体声名。

正文

起首我们明晰一点,外键束缚是一种束缚,这个束缚的存在,会担保表间数据的相关“始终完备”。因此,外键束缚的存在,并非全然没有利益。

好比行使外键,可以

  •  担保数据的完备性和同等性
  •  级联操纵利便
  •  将数据完备性判定寄托给了数据库完成,镌汰了措施的代码量

然而,鱼和熊掌不行兼得。外键是可以或许担保数据的完备性,可是会给体系带来许多缺陷。正是由于这些缺陷,才导致我们不保举行使外键,详细如下:

机能题目

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

并发题目

在行使外键的环境下,每次修改数据都必要去其它一个表搜查数据,必要获取特另外锁。如果在高并发大流量事宜场景,行使外键更轻易造成死锁。

扩展性题目

这里首要是分为两点

  •  做平台迁徙利便,好比你从Mysql迁徙到Oracle,像触发器、外键这种对象,都可以操作框架自己的特征来实现,而不消依靠于数据库自己的特征,做迁徙越发利便。
  •  分库分表利便,在程度拆分和分库的环境下,外键是无法见效的。将数据间相关的维护,放入应用措施中,为未来的分库分表省去许多的贫困。

技能题目

行使外键,着实将应用措施应该执行的判定逻辑转移到了数据库上。那么这意味着一点,数据库的机能开销变大了,那么这就对DBA的要求就更高了。许多中小型公司因为资金题目,并没有聘任专业的DBA,因此他们会选择不消外键,低落数据库的耗损。

相反的,假如该束缚逻辑在应用措施中,发明应用处事器机能不足,可以加呆板,做程度扩展。假如是在数据库处事器上,数据库处事器会成为机能瓶颈,做程度扩展较量坚苦。

【编辑保举】

  1. 带你走近TiDB:一款开源NewSQL数据库
  2. MySQL数据库审计插件htp_audit正式开源,热璞科技回馈MySQL社区
  3. pydbgen:一个数据库随机天生器
  4. 监测数据库的康健和举动:有哪些重要指标?
  5. 从Gartner陈诉看中国数据库:差距虽在,“狼性”凸显
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读