[英]How to realize that an Oracle SQL OBJECT VARRAY elements using as foreign key
我創建了一個對象類型和一個變量:
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) );
我不知道我怎么能意識到這一點。 謝謝你的幫助。
您無法建立這樣的約束。
解決方案是規范化您的架構,並擁有一個termek_adat 表 ,該表與您當前的類型相同,但使用外鍵返回其父Elad行:
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和關系世界中,您應該顛倒面向對象世界的常規父子關系,在該關系中,父級具有其子級列表,而在Relational中,子級引用父級。 通過嘗試將VARRAY(子級)存儲在Elad(父級)中,您遇到了您所要求的參照完整性問題。
是的,您必須加入才能獲取給定Elad的adat ,但這沒關系,而且是SQL方式。 --DD
PS:請注意termek_adat上的復合主鍵,該主鍵同時引用了父Elad和termek_id,因為對於給定的Elad,多次擁有相同的termek_id可能沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.