跨多个 MySQL 数据库实例的外键

问题描述 投票:0回答:2

我们使用MySQL 8.0.30。 我们有两个数据库,PurchaseDB 和 ShopfloorDB,每个数据库都有自己的一组数百个表,表之间有多个外键约束。

举一个例子: PurchasingDB有一个表purchasing,如下:

 table purchases (
  mat  varchar(64)
);

ShopfloorDB有一个表bom,如下:

table bom (
  mat_one varchar(64)
  CONSTRAINT FK_bom_mat FOREIGN KEY (mat_one) REFERENCES PurchaseDB.purchases(mat)
);

上面的方法运行良好,因为两个数据库都位于同一个 DBEngine 上。但是,由于性能原因,我们需要将 ShopfloorDB 移动到不同的 VM 实例。这意味着它们不再位于同一地点。

有没有办法在此配置中定义这些约束?

通过代码管理这些约束并不具有成本效益。

mysql foreign-keys
2个回答
0
投票

不可以,外键只能引用同一实例上的表。

MySQL 的 FEDERATED 表 是唯一允许引用远程 MySQL 实例上的表的功能。但联合表不支持外键。

如果您严格要求使用外键约束,则必须将表放在同一个 MySQL 实例上。

另一种方法是使用客户端代码实现引用完整性。但这不可能是原子的,而且很容易出现代码错误。

最后,不要强制执行引用完整性,并相信客户端代码根本不会做错误的事情。可悲的是,这就是大多数项目所做的。


0
投票

补充一下,我曾在几家具有高TPS的大型/独角兽公司工作过,亚马逊,creditkarma,udemy,oracle。所有这些都不是在数据库级别强制执行完整性以启用 hscale,而是在应用程序级别处理它。

© www.soinside.com 2019 - 2024. All rights reserved.