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

PostgreSQL में अन्य विदेशी कुंजियों को संदर्भित करने वाली विदेशी कुंजियाँ

एक विदेशी कुंजी बाधा परवाह नहीं है कि संदर्भित कॉलम किसी अन्य कॉलम को संदर्भित कर रहा है या नहीं। लेकिन संदर्भित कॉलम जरूरी विलक्षण हो। त्रुटि संदेश आपको यही बताता है (काफी स्पष्ट रूप से)।

आप जो खो रहे हैं वह यह है कि एक विदेशी कुंजी बाधा एकाधिक कॉलम पर आधारित हो सकती है . यह काम करना चाहिए:

FOREIGN KEY (num, user_id, assignment_id) REFERENCES submission

प्रतिस्थापित करना:

FOREIGN KEY (num) REFERENCES submission(num),
FOREIGN KEY (user_id) REFERENCES submission(user_id),
FOREIGN KEY (assignment_id) REFERENCES submission(assignment_id)

सिंटैक्स का संक्षिप्त रूप (REFERENCES submission ) संभव है, क्योंकि आप प्राथमिक कुंजी को संदर्भित कर रहे हैं, जो कि डिफ़ॉल्ट है।

साथ ही, आप सरल बना सकते हैं:submission.num बनाएं sinlge-column प्राथमिक कुंजी, अनावश्यक कॉलमों को छोड़ दें user_id और assignment_id correction . से और fk बाधा को केवल (num) . तक कम करें - जैसा कि @Tim's answer में चर्चा की गई है .

जब तक आपके पास बहु-स्तंभ fk बाधा है, NOT NULL consider पर विचार करें प्रत्येक संदर्भित कॉलम पर बाधाएं (जैसा कि @joop द्वारा टिप्पणी की गई है)। अन्यथा, संदर्भित कॉलम में एक या अधिक NULL मान डिफ़ॉल्ट MATCH SIMPLE के साथ fk बाधा से बचने की अनुमति देते हैं व्‍यवहार। यह इरादा हो भी सकता है और नहीं भी, आमतौर पर यह नहीं है .
वैकल्पिक रूप से MATCH FULL . पर विचार करें बहुस्तंभ fk बाधाओं के लिए केवल तभी अनुमति दें जब सभी संदर्भित कॉलम न्यूल हैं। विवरण:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पर्यवेक्षक पदानुक्रम की सूची प्राप्त करने के लिए SQL क्वेरी। कर्मचारी -> पर्यवेक्षक -> पर्यवेक्षक

  2. AWS RDS समस्या को कैसे हल करें:psycopg2.OperationalError:FATAL:उपयोगकर्ता रूट के लिए पासवर्ड प्रमाणीकरण विफल

  3. PostgreSQL एक फ़ंक्शन में मेरी क्वेरी को अलग तरीके से क्यों मानता है?

  4. postgresql डेटाबेस स्वामी डेटाबेस तक नहीं पहुंच सकता - कोई संबंध नहीं मिला।

  5. PostgreSQL - JDBC ड्राइवर स्थापित करना