引用另一个模式的外键
Posted
技术标签:
【中文标题】引用另一个模式的外键【英文标题】:Referencing the foreign key of another schema 【发布时间】:2015-03-19 21:05:50 【问题描述】:对于我的项目,我使用的是 oracle 数据库,我必须使用 2 个不同的数据库模式。请考虑以下情况 -
我有一个架构A
,其中我有一个表table_a
,主键apk
我还有另一个架构B
,其中我有一个表table_b
,主键bpk
如果这两个表都在同一个数据库中,那么我可以轻松地建立主键-外键关系。
但是我可以在这两列之间创建一个主键 - 外键关系(或类似的东西) - A.table_a.apk
和 B.table_b.pbk
。
提前致谢。
【问题讨论】:
如果您使用 Oracle 意义上的“数据库”,不,您不能创建引用远程数据库中的表的外键。如果您在同一个数据库中确实有两个不同的架构(A
和 B
),那么您可以创建一个外键。
数据库不应该像那样相互通信。如果您希望它们进行通信,为什么会有两个不同的数据库?
@Justine Cave,我使用的是单个数据库。这里没有远程数据库,我有两个不同的模式。我将编辑问题。谢谢
【参考方案1】:
要创建引用不同架构中对象的外键,您只需限定对象名称
ALTER TABLE B.table_b
ADD CONSTRAINT fk_b_a FOREIGN KEY (apk) REFERENCES a.table_a( apk )
这也要求用户B
对A.table_a
有足够的权限。用户需要拥有REFERENCES
权限,并且可能还需要拥有该表的SELECT
权限。
【讨论】:
非常感谢。我会试试这个。 在 A.table_a 上有哪些足够的权限?响应:“将 A.table_a 上的引用授予 B”; 如果架构不是提前知道的,但是是“动态的”,例如它位于table_b
的列上?
@EgeErsoz - 我不确定我是否跟随。如果您在定义子表时不知道哪个模式具有它需要引用的父表,那么您将无法创建约束(并且您的数据模型非常有问题)。这就是你要问的吗?还是你在问别的?
在公共架构下,我有table_a
,其中包含两列:invoice_id
和schema_name
。我想告诉 Postgres invoice_id
指的是 schema_name.invoices
,其中 schema_name
是该行中的列值。这有意义吗?以上是关于引用另一个模式的外键的主要内容,如果未能解决你的问题,请参考以下文章