两个不同数据库中的两个表之间的多对多关系
Many-to-Many Relationship between two tables in two different databases
如题所述,是否可以在属于两个不同数据库的两个表之间创建多对多关系?如果是,我如何使用 PostgreSQL 执行此操作?
只有在 相同 数据库 中 才可能使用外键约束来强制参照完整性的标准方法 - 而不是数据库集群。但是您可以在同一数据库中跨多个 模式 进行操作。
除此之外,您可以用同样的方法创建 表。甚至使用 dblink or FDW 在远程数据库之间动态连接表。但是,RDBMS 无法保证跨数据库的参照完整性。
另一个数据库是在同一台物理机器上还是在同一个数据库集群中并不重要——这只会使连接更快、更安全。
或者您可以 replicate 将数据存储到公共数据库并在其中添加标准约束。
这应该是可能的,但如前所述,您不能对参照完整性抱太大期望。
如果您遵循使用 linking table 的标准设计模式,您可以生成一种 M2M 关系。
DB1.dbo.Users 有 USER_ID 主键
DB2.dbo.Tasks 有 TASK_ID 主键
您可以在 DB1 或 DB2 上创建一个 table,即 UsersToTasks
DB1.dbo.UsersToTasks
USER_ID - KEY
TASK_ID - KEY
这样,USER_ID 和 TASK_ID 的唯一配对用作 table 中的键。唯一的问题是你不能为另一个创建外键 table.
作为伪解决方法,您可以在 DB2.dbo.Task 上编写一个触发器,将 TASK_ID 写入 DB1.dbo.TASK_IDS 和 link 作为 linking table 以上。我不确定,但您也可以创建一个删除触发器来删除 TASK_ID。
http://solaimurugan.blogspot.com/2010/08/cross-database-triggers-in-postgresql.html
如题所述,是否可以在属于两个不同数据库的两个表之间创建多对多关系?如果是,我如何使用 PostgreSQL 执行此操作?
只有在 相同 数据库 中 才可能使用外键约束来强制参照完整性的标准方法 - 而不是数据库集群。但是您可以在同一数据库中跨多个 模式 进行操作。
除此之外,您可以用同样的方法创建 表。甚至使用 dblink or FDW 在远程数据库之间动态连接表。但是,RDBMS 无法保证跨数据库的参照完整性。
另一个数据库是在同一台物理机器上还是在同一个数据库集群中并不重要——这只会使连接更快、更安全。
或者您可以 replicate 将数据存储到公共数据库并在其中添加标准约束。
这应该是可能的,但如前所述,您不能对参照完整性抱太大期望。
如果您遵循使用 linking table 的标准设计模式,您可以生成一种 M2M 关系。
DB1.dbo.Users 有 USER_ID 主键 DB2.dbo.Tasks 有 TASK_ID 主键
您可以在 DB1 或 DB2 上创建一个 table,即 UsersToTasks
DB1.dbo.UsersToTasks
USER_ID - KEY
TASK_ID - KEY
这样,USER_ID 和 TASK_ID 的唯一配对用作 table 中的键。唯一的问题是你不能为另一个创建外键 table.
作为伪解决方法,您可以在 DB2.dbo.Task 上编写一个触发器,将 TASK_ID 写入 DB1.dbo.TASK_IDS 和 link 作为 linking table 以上。我不确定,但您也可以创建一个删除触发器来删除 TASK_ID。
http://solaimurugan.blogspot.com/2010/08/cross-database-triggers-in-postgresql.html