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

j8yoct9x  于 2023-10-15  发布在  Mysql
关注(0)|答案(2)|浏览(111)

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

table purchases (
  mat  varchar(64)
);

在ShopfloorDB中:

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

上面的工作很好,因为数据库在同一个DBEngine上共存。但是,由于性能原因,我们需要将ShopfloorDB移动到不同的VM示例。这意味着它们不再是同一地点。
我们如何在这个配置中定义这些约束?
通过代码来管理这些约束是不划算的。

ryhaxcpt

ryhaxcpt1#

不能,外键只能引用同一示例上的表。
MySQL的FEDERATED tables是唯一允许引用远程MySQL示例上的表的特性。但是联邦表不支持外键。
如果您有严格的使用外键约束的要求,则必须在同一个MySQL示例上共定位表。
另一种方法是使用客户端代码实现引用完整性。但这不可能是原子的,而且容易受到代码错误的影响。
最后,不要强制引用完整性,相信客户端代码不会做错事。不幸的是,大多数项目都是这样做的。

atmip9wb

atmip9wb2#

为了补充这一点,我曾在几家拥有高TPS的大型/独角兽公司工作过,亚马逊,CreditKarma,udemy,甲骨文。它们都没有在数据库级别强制执行完整性以启用hscale,而是在应用程序级别处理它。

相关问题