使用对两个表的引用创建表

时间:2014-01-17 18:57:06

标签: sql oracle plsql

我有一个带有两个节点的分布式数据库。我在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,但我不知道如何......

你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

如果“分布式数据库”意味着您有两个单独的数据库,则无法在引用另一个数据库中的表的一个数据库中创建外键约束。

您可以在数据库2中创建物化视图,将数据库1中的所有proveedor数据提取到数据库2,然后在数据库2中创建引用实例化视图的外键约束。当然,由于在将新数据写入数据库1上的表时和在数据库2上更新实体化视图之间存在滞后,即使父行存在,也可能存在无法写入子行的窗口数据库1.如果删除了数据库1中的一行,在尝试将该更改复制到数据库2之前,您不会发现是否存在孤立的子行。您需要编写大量代码检测并解决这些错误。

在Oracle中,使用安装在多个物理服务器上的RAC(Real Application Clusters)创建单个数据库通常更有意义。这将允许您跨数据库服务器分配负载,其中每个服务器都可以访问数据库的完整内容,而不是将数据子集分发到不同的节点。