Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एसक्यूएल त्रुटि 'पैरेंट कुंजी नहीं मिली' गलत तरीके से प्रयुक्त विदेशी कुंजी के लिए?

दुर्भाग्य से (आपके डीडीएल कोड के लिए) मुझे @William Robertson से सहमत होना होगा - आपको अपना मॉडल बदलने की जरूरत है, और इस प्रकार, आपको अपने DDL कोड को पूरी तरह से फिर से तैयार करने की आवश्यकता है। इसके होने के कारण इस प्रकार हैं:

आपके मूल डीडीएल कोड से एक रिवर्स-इंजीनियर मॉडल को देखते हुए, हम देख सकते हैं कि REQUISITION में 3 (क्षमा करें, 4) पैरेंट टेबल हैं। यही कारण है कि विदेशी कुंजी उल्लंघनों के कारण इसके सम्मिलन हमेशा विफल होते हैं। आपका मॉडल:

डीडीएल कोड के रूप में समस्या को दर्शाने वाला एक सरल उदाहरण कुछ इस तरह दिख सकता है:

create table parent1 ( id number primary key ) ; -- analogy: supplies_pharmaceutical
create table parent2 ( id number primary key ) ; -- analogy: supplies_nonsurgical
create table parent3 ( id number primary key ) ; -- analogy: supplies_surgical

create table child ( -- analogy: requisitions
  id number primary key
, parentid number 
);

alter table child add constraint fkey_parent1
foreign key ( parentid ) references parent1 ( id ) ;

alter table child add constraint fkey_parent2
foreign key ( parentid ) references parent2 ( id ) ;

alter table child add constraint fkey_parent3
foreign key ( parentid ) references parent3 ( id ) ;

begin
  insert into parent1 ( id ) values ( 1 ) ;
  insert into parent2 ( id ) values ( 2 ) ;
  insert into parent3 ( id ) values ( 3 ) ;
end ;
/

इसलिए, हमारे पैरेंट टेबल के साथ, बस एक त्वरित जांच करें:

select 'parent1 (id) -> ' || id from parent1
union all
select 'parent2 (id) -> ' ||  id from parent2
union all
select 'parent3 (id) -> ' ||  id from parent3
;

-- result
'PARENT1(ID)->'||ID  
parent1 (id) -> 1    
parent2 (id) -> 2    
parent3 (id) -> 3 

सब अच्छा। अब हम अपनी चाइल्ड टेबल में कुछ पंक्तियाँ डालना चाहते हैं।

insert into child ( id, parentid ) values ( 100, 1 ) ;
-- ORA-02291: integrity constraint (...FKEY_PARENT3) violated - parent key not found

insert into child ( id, parentid ) values ( 101, 2 ) ;
-- ORA-02291: integrity constraint (...FKEY_PARENT3) violated - parent key not found

insert into child ( id, parentid ) values ( 102, 3 ) ;
-- ORA-02291: integrity constraint (...FKEY_PARENT2) violated - parent key not found

आप देखते हैं कि सही पैरेंट टेबल न केवल "स्वचालित रूप से चुनी जाती है"।

विलियम के मॉडल OTOH में, "आपूर्ति" के संबंध में REQUISITION में केवल एक अभिभावक (तालिका) है। जिससे पंक्तियों को सम्मिलित करना बहुत आसान हो जाए ... नीचे देखें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मूल Oracle कार्यों की सूची कैसे प्राप्त करें जैसे (NVL, ABS आदि)

  2. कॉलम डेटाटाइप को क्लॉब से xmltype में बदलने के लिए

  3. Varchar2 और char . के बीच प्रमुख अंतर क्या है?

  4. स्वचालित Oracle स्कीमा माइग्रेशन टूल

  5. एसक्यूएल में टुपल्स के समूहों की तुलना कैसे करें