2010-09-30 32 views
10

我试图引用一个视图中,带有外键,但我得到这个错误观点:外键引用在甲骨文

“错误:ORA-02270:没有匹配的唯一或主键此列 - 列表“

但是,我在这个视图上创建了一个主键,并在TOAD的Constraints选项卡中对其进行了验证。

这是我试图创建表:

CREATE TABLE QUESTION 
( 
    QUESTION_ID    INTEGER not null, 
    CREATED_USER_ID   INTEGER not null,  
    CONSTRAINT PK_QUESTION PRIMARY KEY (QUESTION_ID), 
    CONSTRAINT FK_USER 
     FOREIGN KEY (CREATED_USER_ID) 
     REFERENCES SOME_VIEW(VIEW_ID) 
); 

SOME_VIEW是基于指向雇员表另一个模式的另一个图的图。

+1

我收集你想/需要这个为了有一个单一的外键可能来自多个表,因为一列可以有多个外键约束针对单个列...但列中的值将不得不存在于所有与外部约束相关的表中。我希望这是转换数据库的一种手段,而且只是暂时的。 – 2010-09-30 17:44:06

+0

换句话说,SOME_VIEW,OTHER_VIEW和BASE_TABLE都必须具有相同的值才能使该外键约束正常工作? – echoblaze 2010-09-30 17:48:33

+1

相关,尽管旧(2006年):http://thinkoracle.blogspot.com/2006/11/view-constraints.html – 2010-09-30 17:48:54

回答

11

无论创建外键到视图的可能性,它实际上不是最好的实现。

数据库视图旨在让用户可以舒适地查询他需要的一些数据,但同时作为安全屏障来隐藏所有数据库结构,包括表,表中的数据约束,以及也是表交叉引用。

因此,对我来说,一个好的做法是参考现有的表格,尽管它在其他方案中居住。

+0

+1:我的想法,以及我之前喜欢的文章。 – 2010-09-30 18:15:06

+0

好吧,谢谢你的所有反馈。我们决定在应用程序级别而不是数据库级别进行连接 – echoblaze 2010-09-30 18:35:36

+0

在维DWH建模中有一些称为角色扮演视图的角色扮演视图。无论如何,在这种情况下,这种外键约束似乎是一种很好的做法。 – 2013-10-03 11:32:33

-2

针对某个视图的外键可能是导致问题的原因。

+1

是否有可能对视图有外键? – echoblaze 2010-09-30 17:48:49

+0

请参阅http://bytes.com/topic/oracle/answers/64610-create-primary-key-view – igelkott 2010-09-30 18:28:37