据说有的项目为了高并发,数据表禁止使用外键,这种情况有吗?

据说有的项目为了高并发,数据表禁止使用外键,这种情况有吗?

如题,如果有,具体是什么场景,没有外键,相关实体数据的一致性是如何保障的?


回答:

有,而且非常常见。

就不谈分库分表这种“极端”情况了 ———— 分库分表肯定是没有了的。即便是不分库分表,为了便于日后扩展,也往往不用了。

注意这里并不是真的就不用外键了,而是禁止的“物理外键”,即依赖数据库本身提供的外键特性实现的。但从业务逻辑上讲其实还是有外键的。

一致性靠业务层实现,而非交给数据库。

比如常见的一种场景是“主表数据删除了、关联数据表里相应的记录也要删除”,靠物理外键很好解决,设置个级联删除咯;靠业务层实现就是自己分别到各个表里执行删除操作了。同样的,外键约束、级联更新等操作也是如此。

P.S. 很多场景下有“最终一致性”就足够了,不要求一定要有“强一致性”。


回答:

大部分项目并没有高并发场景,个人觉得普通项目还是尽量使用外键,可以避免库表里出现各种脏数据,以及可以方便地进行级联更新、删除操作


回答:

大多数的业务都是不需要严密的一致性的,这个时候外键就弊大于利,会给数据迁移之类的带来巨大的麻烦


回答:

外键导致维护困难、迁移困难、性能降低。
我们一直是要求禁止join查询的,外键视图什么的想都不要想。
让数据库回归本职,只做存储查询,其他的通过程序解决。

以上是 据说有的项目为了高并发,数据表禁止使用外键,这种情况有吗? 的全部内容, 来源链接: utcz.com/p/938576.html

回到顶部