我们正在使用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实例上配置表。
另一种选择是使用客户端代码实现引用完整性。但这不能是原子的,而且容易导致代码错误。
或者最后,不要强制引用完整性,并相信客户端代码不会做错误的事情。遗憾的是,这正是大多数项目所做的。