我有一个带有两个节点的分布式数据库。我在node2中有一个这样的表(仅在此节点中):
CREATE TABLE table2
(
cod_proveedor CHAR(15) REFERENCES proveedor(cod_proveedor),
cod_articulo CHAR(15) REFERENCES articulo(cod_articulo),
);
现在,我在node1和node2中有“articulo”表。
正如我们所见,我正在对nodo2.proveedor和nodo2.articulo进行参考,因为我的表“table2”在此节点“node2”中。
当我创建表格时,我必须参考nodo1.proveedor,但我不知道如何......
你能帮助我吗?
答案 0 :(得分:1)
如果“分布式数据库”意味着您有两个单独的数据库,则无法在引用另一个数据库中的表的一个数据库中创建外键约束。
您可以在数据库2中创建物化视图,将数据库1中的所有proveedor
数据提取到数据库2,然后在数据库2中创建引用实例化视图的外键约束。当然,由于在将新数据写入数据库1上的表时和在数据库2上更新实体化视图之间存在滞后,即使父行存在,也可能存在无法写入子行的窗口数据库1.如果删除了数据库1中的一行,在尝试将该更改复制到数据库2之前,您不会发现是否存在孤立的子行。您需要编写大量代码检测并解决这些错误。
在Oracle中,使用安装在多个物理服务器上的RAC(Real Application Clusters)创建单个数据库通常更有意义。这将允许您跨数据库服务器分配负载,其中每个服务器都可以访问数据库的完整内容,而不是将数据子集分发到不同的节点。