Oracle
Oracle - 非唯一的外鍵 - 物化視圖是答案嗎?
我們有下表來儲存不同語言的文本:
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
.