两个不同数据库中两个表之间的多对多关系

时间:2015-02-19 03:28:27

标签: database postgresql database-design

如标题中所述,是否可以在属于两个不同数据库的两个表之间创建多对多关系?如果是,我如何使用PostgreSQL执行该操作?

2 个答案:

答案 0 :(得分:1)

使用外键约束来强制引用完整性的标准方法只能在相同的数据库中 - 而不是db cluster。但是,您可以在同一数据库中的多个模式中进行操作。

除此之外,您可以以相同的方式创建表。甚至使用dblinkFDW在远程数据库之间动态连接表。但是,RDBMS不能保证数据库之间的参照完整性 无论其他数据库是在同一台物理机器上,还是在同一个数据库集群中,这都无关紧要 - 这只会使连接更快,更安全。

或者您可以replicate将数据发送到公共数据库并在那里添加标准约束。

答案 1 :(得分:0)

应该是可能的,但正如已经说过的那样,你对参照完整性的方式不能指望太多。

如果您遵循使用链接表的标准设计模式,您可以生成一种M2M关系。

DB1.dbo.Users具有USER_ID主键 DB2.dbo.Tasks具有TASK_ID主键

您可以在DB1或DB2上创建一个表UsersToTasks

DB1.dbo.UsersToTasks
USER_ID - KEY
TASK_ID - KEY

这样,USER_ID和TASK_ID的唯一配对被用作该表中的键。唯一不能是你不能为另一个表创建一个外键。

作为伪解决方法,您可以在DB2.dbo.Task上编写一个触发器,该触发器将TASK_ID写入DB1.dbo.TASK_IDS并将其作为外键链接到上面的链接表中。我不确定,但你也可能创建一个删除触发器,它也会删除TASK_ID。

http://solaimurugan.blogspot.com/2010/08/cross-database-triggers-in-postgresql.html