2013-05-09 61 views
0

我創建的對象類型和VARRAY:如何是一個Oracle SQL對象VARRAY元素使用,以實現外鍵

CREATE TYPE termek_adat IS OBJECT(
termek_id number(3), termek_db number(3)); 
/
CREATE type TERMEK_INF is VARRAY(10000) OF termek_adat; 

我創建了一個表:

CREATE TABLE Elad(
elad_id number(3), 
termek_i TERMEK_INF constraint elad_ref_term_fk references termek(termek_id), 
faktura_id number(3), 
datum timestamp, 
constraint e_pk_key primary key(elad_id) 
); 

有一個VARRAY termek_i 。我想使用TERMEK_ADAT對象的termek_id字段作爲此表的外鍵:

CREATE TABLE Termek 
    (termek_id NUMBER(3) CONSTRAINT term_term_id_pk PRIMARY KEY, 
    megnevezes VARCHAR2(50), 
    termek_kod NUMBER(15), 
    termek_ar NUMBER(5), 
    db_uzlet NUMBER(3), 
    db_raktar NUMBER(3), 
    szallito_id NUMBER(3) CONSTRAINT term_term_fk REFERENCES Szallitok(szallito_id)); 

我不知道我怎麼能意識到這一點。 感謝hep。

回答

0

你不能建立這樣的約束。

的解決方法是標準化的架構,並有termek_adat ,這是與您的當前類型,但與外鍵回到其父埃拉德行:

CREATE TABLE termek_adat (
    elad_id number(3) references Elad(elad_id), 
    termek_id number(3) references Termek(termek_id), 
    termek_db number(3), 
    primary key (elad_id, termek_id) 
); 

基本上在SQL和關係世界中,你應該扭轉面向對象的世界裏,家長有孩子的名單正常的父子關係,而是關係中的子引用父。通過試圖在Elad(父母)中存儲VARRAY(孩子),你遇到了你所問的參考完整性問題。

是的,你將不得不加入adat的Elad,但沒關係,和SQL的方式。 --D

PS:注意termek_adat上的複合主鍵,它引用父Elad和termek_id,因爲對於給定的Elad,可能有幾次相同的termek_id可能沒有意義。

相關問題