Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何跨不同的数据库维护外键约束?_Mysql_Database Design_Symfony1 - Fatal编程技术网

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

Mysql 如何跨不同的数据库维护外键约束?,mysql,database-design,symfony1,Mysql,Database Design,Symfony1,我知道,我知道,把两个相关的表放在不同的数据库上并不是最好的设计实践。但无论如何,假设我必须绝对这么做。我必须将以前位于数据库中的两个与外键相关的表拆分为两个数据库,,它们位于两个不同的服务器上,但我仍然希望保持数据库的完整性。最好的方法是什么 编辑:我正在使用MySQL和Symfony你考虑过吗?这些基本上是指向托管在不同/相同主机上的不同数据库上的表的链接 您可以在本地创建一个联邦表,并使用它来强制引用完整性。然而,我不能过分强调这样一个事实,即这种方法充满了未来的陷阱,根本不推荐使用。我想

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

编辑:我正在使用MySQL和Symfony你考虑过吗?这些基本上是指向托管在不同/相同主机上的不同数据库上的表的链接


您可以在本地创建一个联邦表,并使用它来强制引用完整性。然而,我不能过分强调这样一个事实,即这种方法充满了未来的陷阱,根本不推荐使用。

我想不出任何方法可以用标准MySQL实现这一点

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

  • 针对子表截取
    INSERT
    UPDATE
    。父表中匹配行的查询。如果在父表中未找到匹配项,则插入失败

  • 对父表截取
    删除
    。查询子表中的依赖行。如果在子表中找到任何依赖行,则删除失败。如果约束旨在支持级联行为,请执行该操作,而不是失败

  • 根据父表截取
    更新
    。如果主键值在更新过程中发生更改,则查询在子表中找到的依赖行。如果在子表中找到任何依赖行,则更新失败。如果约束旨在支持级联行为,请执行该操作,而不是失败


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

我认为您需要告诉我们您使用的是什么数据库,答案是什么(除了不使用)可能会非常依赖于您的堆栈。这些表是在两个不同的mysql实例中,还是在同一个mysql实例中的两个不同目录中?嗯,实际上这些表位于不同的数据库中,而这两个数据库位于不同的服务器上。联邦表完全不支持外键。在四月份的MySQL会议上,有一个关于MySQL 6.1中分布式表将来支持FK的可能性的演讲!