English 中文(简体)
如何跨不同的数据库维护外键约束?
原标题:
  • 时间:2009-03-23 11:46:32
  •  标签:

我知道,我知道,把两个相关的表放在不同的数据库中并不是最好的设计实践。但是无论出于什么原因,假设我绝对必须这样做。我必须将先前位于一个数据库中的两个外键相关表分成两个数据库,这两个数据库位于两个不同的服务器上,但我仍然希望维护数据库的完整性。如何最好地做到这一点?

编辑:我正在使用MySQL和Symfony。

最佳回答

我想不出用标准的MySQL有任何方法可以做到这一点。

您可以为 MySQL 代理编写一个插件,以在不同服务器上的父表和子表之间管理引用完整性:

  • 拦截对子表的INSERTUPDATE操作。在父表中查询匹配行。如果在父表中找不到匹配项,则INSERT/UPDATE操作失败。

  • 截获对父表的DELETE操作。在子表中查询相关行。如果在子表中找到任何相关行,则DELETE操作失败。如果这个约束旨在支持级联行为,请执行级联行为而不是失败。

  • 在父表拦截UPDATE操作。如果主键值在更新时发生变化,请查询子表中发现的相关行。如果在子表中找到任何相关行,则失败更新。如果约束旨在支持级联行为,请执行该操作而不是失败。

请注意,您必须在MySQL代理插件中保留有关引用完整性约束的信息(或为插件编写自定义配置文件以记录关系)。您不能使用传统的FOREIGN KEY语法在MySQL实例之间声明此类约束。

问题回答

你考虑过使用联合表吗?这些基本上是指向不同数据库上的表的链接,可以在不同/相同主机上托管。

您可以在本地创建联合表,并使用它来强制实行引用完整性。但是,我无法过分强调这种方法充满了未来的陷阱,并且并不推荐。





相关问题
热门标签