यहां एक साधारण तालिका है जहां रिकॉर्ड एक ही तालिका में मूल रिकॉर्ड को संदर्भित कर सकते हैं:
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
parent_id INT NULL,
num INT NOT NULL,
txt TEXT NULL,
FOREIGN KEY (parent_id) REFERENCES foo(id)
);
अतिरिक्त आवश्यकता के साथ कि अन्य क्षेत्र मूल्यों में से एक ( num
माता-पिता और बच्चे के रिकॉर्ड के बीच समान होना चाहिए), मैंने सोचा कि एक समग्र विदेशी कुंजी को चाल करना चाहिए। मैंने आखिरी लाइन बदल दी
FOREIGN KEY (parent_id, num) REFERENCES foo(id, num)
और मिला ERROR: संदर्भित तालिका "फू" के लिए कोई अद्वितीय बाधा मिलान कुंजी नहीं दी गई है ।
मैं आसानी से इस बाधा को जोड़ सकता हूं, लेकिन मुझे समझ नहीं आता कि यह क्यों आवश्यक है, जब एक संदर्भित कॉलम ( id
) पहले से ही अद्वितीय होने की गारंटी है? जिस तरह से मैं इसे देखता हूं, नया अवरोध बेमानी होगा।
NULL != NULL
। वैसे भी :) :)