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



我们正在使用mysql 8.0.30我们有两个数据库:PurchaseDB和ShopfloorDB,每个数据库都有自己的一组100个表,表之间有几个外键约束。一个例子:PurchaseDB有一个PurchaseDB表,如下所示:

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的FEDERATED表是唯一允许对远程MySQL实例上的表进行引用的特性。但是联邦表不支持外键。

如果你严格要求使用外键约束,你将不得不在同一个MySQL实例上配置表。

另一种选择是使用客户端代码实现引用完整性。但这不能是原子的,而且容易导致代码错误。

或者最后,不要强制引用完整性,并相信客户端代码不会做错误的事情。遗憾的是,这正是大多数项目所做的。

最新更新