Oracle

Oracle - 非唯一的外鍵 - 物化視圖是答案嗎?

  • March 7, 2018

我們有下表來儲存不同語言的文本:

CREATE TABLE TXT 
(
 TXTID VARCHAR2(10 BYTE) NOT NULL 
, LANGUAGE VARCHAR2(2 BYTE) DEFAULT 'DE' NOT NULL 
, STEXT VARCHAR2(10 BYTE) 
, LTEXT VARCHAR2(4000 BYTE) 
, LABELTEXT VARCHAR2(20 BYTE) 
, CONSTRAINT TXT_PK PRIMARY KEY 
 (
   TXTID 
 , LANGUAGE 
 )
) 

因此,您可以使用一個 txtid 擁有多種語言。現在我想將 TXTID 作為另一個表的外鍵。首先,我創建了一個視圖

select distinct txtid from txtid

這當然不起作用,因為您不能真正使用視圖上的約束。所以我聽說了物化視圖:

CREATE MATERIALIZED VIEW mv_txtid_txt 
REFRESH ON DEMAND
AS SELECT distinct txtid from txt

alter table mv_txtid_txt
add CONSTRAINT TXT_PK PRIMARY KEY (TXTID)
ENABLE

到目前為止一切都很好,並不完美,但我認為它會起作用……將外鍵添加到表中:

ALTER TABLE DATADICT
ADD CONSTRAINT DATADICT_FK2 FOREIGN KEY(TXTID)
REFERENCES mv_txtid_txt(TXTID)
ENABLE

但我得到: ORA-02270: no matching unique key or primary key for this column-list

如何獲取不唯一的 TXT.TXTID 作為外鍵?我真的必須在表上使用觸發器來手動檢查外鍵嗎?

親切的問候,

如果 標識的概念TXT_ID可以被獨立於文本語言的其他實體引用,那麼它應該是由單獨的表表示的單獨實體,正如 RDFozz 在評論中提到的那樣。文本翻譯將成為它的孩子,就像DATADICT.

引用自:https://dba.stackexchange.com/questions/199604