如何维护不同数据库的外键约束?

时间:2009-03-23 11:46:33

标签: mysql database-design symfony1

我知道,我知道,将两个相关表放在不同的数据库上并不是最好的设计实践。但是无论如何,假设我绝对做到了。我必须将以前位于数据库中的两个与外键相关的表拆分为两个数据库,位于两个不同的服务器上,但我仍然希望维护数据库完整性。这样做的最佳方式是什么?

编辑:我使用的是MySQL和Symfony

2 个答案:

答案 0 :(得分:3)

您考虑过Federated tables了吗?这些基本上是 links 到托管在不同/相同主机上的不同数据库上的表。

您可以在本地创建联合表,并使用它来强制引用完整性。但是,我不能过分强调这种方法充满了未来的陷阱,而且根本没有建议。

答案 1 :(得分:3)

我想不出用标准MySQL做任何事情。

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

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

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

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

请注意,您必须在MySQL Proxy插件中保留有关参照完整性约束的信息(或者为您的插件编写一个记录关系的自定义配置文件)。您无法使用传统的FOREIGN KEY语法在MySQL实例中声明此类约束。