我知道,我知道,将两个相关的表放在不同的数据库中并不是最好的设计实践。但无论如何,假设我必须绝对这样做。而且我必须将以前位于数据库中的两个与外键相关的表分解为两个数据库,它们位于两个不同的服务器上,但我仍然想保持数据库的完整性。做这个的最好方式是什么?
编辑:我正在使用 MySQL 和 Symfony
我知道,我知道,将两个相关的表放在不同的数据库中并不是最好的设计实践。但无论如何,假设我必须绝对这样做。而且我必须将以前位于数据库中的两个与外键相关的表分解为两个数据库,它们位于两个不同的服务器上,但我仍然想保持数据库的完整性。做这个的最好方式是什么?
编辑:我正在使用 MySQL 和 Symfony
您是否考虑过联合表?这些基本上是指向托管在不同/相同主机上的不同数据库上的表的链接。
您可以在本地创建一个联合表并使用它来强制引用完整性。但是,我不能过分强调这样一个事实,即这种方法充满了未来的陷阱,根本不推荐。
我想不出任何方法可以用标准 MySQL 做到这一点。
您可以为MySQL Proxy编写一个插件,该插件管理不同服务器上父表和子表之间的引用完整性:
拦截INSERT
并UPDATE
针对子表。查询父表中的匹配行。失败INSERT
/UPDATE
如果在父表中找不到匹配项。
拦截DELETE
父表。查询子表中的依赖行。DELETE
如果在子表中找到任何依赖行,则失败。如果约束旨在支持级联行为,请这样做而不是失败。
拦截UPDATE
父表。如果主键值作为更新的一部分发生变化,则查询在子表中找到的相关行。UPDATE
如果在子表中找到任何依赖行,则失败。如果约束旨在支持级联行为,请这样做而不是失败。
请注意,您必须在 MySQL 代理插件中保留有关引用完整性约束的信息(或为记录关系的插件编写自定义配置文件)。您不能使用常规FOREIGN KEY
语法来跨 MySQL 实例声明此类约束。