2017-04-03 19 views
0

我在两个不同的数据库中有2个不同的表。 可以说, 在DB1中,我有表格“A”,列中有“C1”作为主键,“C2”,“C3”。 在DB2中,我有表格“B”,列为“X1”,“X2”,“X3”。复合主键其中1个键来自不同数据库,具有不同的数据库

现在,我想在表B中创建一个复合主键,使得字段为(“C1”,“X1”)为Composite_PK1,“X2”,“X3”。

任何人都可以解释如何使用其他表的主键作为另一个表中复合主键的元素之一?

+1

数据库是通过同一个守护进程进行服务还是在不同的计算机上一起?解密:这是在同一台机器上吗? – Mjh

+0

在表B中,您没有表A的列。您只能将它们用作外键约束的参考。 – quantummind

+0

@quantummind但我想利用表A的一列,并与表B – curiouscoder

回答

1

表的主键必须由表中的一列或多列构成,所以你的问题没有意义。

如果你有这个数据库中的表称为DB_ONE

A 
    C1  PK 
    C2 
    C3 

这个数据库中的表称为DB_TWO

B 
    C1 FK to column C1 in Table DB_ONE.A 
    X1 
    X2 

您可以定义表B的主键(C1, X1)如果你想。但列C1必须在表B。任何表中的特定列都可以作为外键(FK)和全部或部分主键(PK)。

如果你的表是在不同的数据库模式在同一个Oracle实例你可以尝试创建一个外键时使用的模式修饰的表名(DB_ONE.A)。像这样的DDL可能会为你解决问题。

 ALTER TABLE DB_TWO.B 
        ADD CONSTRAINT fk_my_favorite_name 
        FOREIGN KEY (C1) 
         REFERENCES DB_ONE.A (C1); 

如果它们在不同的Oracle实例上,试图建立一个外键是不太好的。

+0

谢谢,但我怎样才能使C1作为表B中的外键,它位于不同的数据库中? – curiouscoder

+0

请参阅我的编辑。 –

+0

此代码无法显示错误:“[异常,错误代码903,SQLState 42000] ORA-00903:无效的表名” – curiouscoder

相关问题