2011-07-06 15 views
11

मेरे पास ऑरैकल में 1 तालिका में एक समग्र प्राथमिक कुंजी है। मैं अपनी दूसरी तालिका में एक टेबल एंट्री के लिए एक विदेशी कुंजी बनाना चाहता हूं जो पहली तालिका में समग्र प्राथमिक कुंजी का संदर्भ देता है। मुझे त्रुटि ORA-02256 मिल रही है। इस पर कोई विचार कैसे मैं इसे दर्ज कर सकता हूं?ओरेकल समग्र प्राथमिक कुंजी/विदेशी कुंजी प्रश्न

CREATE TABLE groupspersonx ( 
    personid number, 
    groupid number, 
    CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid) 
); 

CREATE TABLE restrictedgroups ( 
    groupid number, 
    name varchar2(50), 
    dateadded date, 
    since date, 
    notes varchar2(1024), 
    CONSTRAINT pk_groupid PRIMARY KEY(groupid), 
    CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(personid, groupid) 
); 
+0

बनाने तालिका groupspersonx ( \t व्यक्तित्व \t \t संख्या, \t groupid \t \t संख्या, \t CONSTRAINT pk_persongroupid प्राथमिक कुंजी (व्यक्तित्व, समूहबद्ध) ); बनाने तालिका restrictedgroups ( \t ग्रुप \t \t \t संख्या, \t नाम \t \t \t varchar2 (50), \t dateadded \t \t तारीख, \t के बाद से \t \t \t तारीख, \t नोटों \t \t \t varchar2 (1024) , \t CONSTRAINT pk_groupid प्राथमिक कुंजी (समूहबद्ध), CONSTRAINT fk_persongroup विदेशी कुंजी (समूहबद्ध) संदर्भ समूह समूह (व्यक्तित्व, समूहबद्ध) ); – Christopher

उत्तर

18

त्रुटि इसलिए है क्योंकि विदेशी कुंजी एक कॉलम है, लेकिन आप माता-पिता के रूप में दो कॉलम आपूर्ति करने की कोशिश कर रहे हैं।

CREATE TABLE restrictedgroups ( 
    groupid number, 
    name varchar2(50), 
    dateadded date, 
    since date, 
    notes varchar2(1024), 
    CONSTRAINT pk_groupid PRIMARY KEY(groupid) 
); 

CREATE TABLE groupspersonx ( 
    personid number, 
    groupid number, 
    CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid), 
    CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES restrictedgroups(groupid) 
); 

मैं एक विदेशी कुंजी बाधा जोड़ना होगा: उपयोग -

तुम भी रिश्ते पीछे की ओर है, समग्र कुंजी करने के लिए टाई क्योंकि restrictedgroups एक personid स्तंभ नहीं है की कोई जरूरत नहीं है ... जो भी तालिका personid से आ रही है।

+0

अब मैं देखता हूं, बहुत धन्यवाद! – Christopher

0

आप का उपयोग नहीं कर सकते हैं:

CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(personid, groupid) 

बदलें वह भी:

CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(groupid) 

यही काम करना चाहिए।

1

जब भी आप एक कॉलम पर एक समग्र प्राथमिक कुंजी या अद्वितीय बाधा बनाना चाहते हैं, तो आप किसी अन्य तालिका में संदर्भ नहीं दे सकते।

पूर्व के लिए।

sql>create table t1(a number,b number,c number ,primary key(a,b,c)); 

table created. 

sql>create table g1(a number constraint con_fg references t1(a)); 

ERROR at line 1: 
ORA-02270: no matching unique or primary key for this column-list 

यहां टी 1 मूल तालिका है और जी 1 बाल तालिका है। बच्चे तालिका में एक कॉलम में डुप्लिकेट मान हो सकते हैं। तो ऑरैकल कॉलम की उस तालिका को अनुमति नहीं देगा।

भी

SQL>select constraint_name,constraint_type from user_constraints where table_name='T1'; 

CONSTRAINT_NAME    C 
------------------------------ - 
SYS_C005822     P 

देखें तो, यहां भी सभी तीन स्तंभों के लिए केवल बाधा यानी क, ख, t1 तालिका में सी।

कारण है कि आप समग्र प्राथमिक कुंजी या मिश्रित अद्वितीय बाधा पर एक विदेशी नहीं बना सकते है कि

4
CREATE TABLE groupspersonx( 
    personid number, groupid number, 
CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid)); 

CREATE TABLE restrictedgroups ( 
    pid number, 
    groupid number, 
    name varchar2(50), 
    dateadded date, 
    since date, 
    notes varchar2(1024), 
    CONSTRAINT pk_groupid PRIMARY KEY(groupid), 
    CONSTRAINT fk_persongroup FOREIGN KEY(pid,groupid) REFERENCES groupspersonx(personid, groupid)); 

* संदर्भ स्तंभों की संख्या है विदेशी कुंजी कॉलम के साथ बराबर होती है

संबंधित मुद्दे