簡體   English   中英

如何實現將Oracle SQL OBJECT VARRAY元素用作外鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM