2010-09-30 51 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