不能包含也不能引用外键的表有什么用?

use*_*974 1 mysql database mariadb

MariaDB 关于分区的文档将其局限性之一列出为:

  • 分区表不能包含外键或被外键引用。

在 DBMS 的上下文中,具有此类限制的表有什么用途?我认为我从未见过没有通过外键关联表的数据库设计,所以我想知道我是否正确理解了 MariaDB 的限制(情况似乎与 MySQL 类似)。

Har*_*efe 6

限制的原因是,在内部每个分区都是一个自己的 InnoDB 表,因此外键查找需要分布在所有这些分区上,而不是单个 1:1 查找。

InnoDB引擎甚至不知道这些不是结构相同的独立表,而是它们在SQL级别上形成了分区表。同时,外键检查仍然在引擎内实现,因此它们还不适用于分区表。

您可能仍想使用分区表并为此牺牲服务器端引用完整性检查的原因很简单:性能权衡。

在 MariaDB 方面,我们有一个外键支持的功能请求,目前它的目标是即将推出的 10.5 版本系列:

https://jira.mariadb.org/browse/MDEV-12483

但还不能 100% 确定它会在 10.5 时及时发生。

在MySQL方面有:

https://dev.mysql.com/worklog/task/?id=148

但据我所知,从 2009 年开始就没有任何明显的进展。

PS:我参与过的项目中,FK 仅在开发和测试期间到位,但在实际生产数据库上并未到位,假设可能的 FK 违规已经出现并在开发/测试期间得到修复……再次强调这一点这样做是出于性能原因,因为 FK 检查需要时间......