निश्चित रूप से आप इसे उदाहरण के लिए यह लागू करने के लिए कर सकते हैं कि केवल एक उप तालिका किसी दी गई पंक्ति को संदर्भित कर सकती है:
CREATE TABLE Super_Table (
super_id SERIAL PRIMARY KEY,
sub_type CHAR(1) NOT NULL,
UNIQUE KEY (super_id, sub_type)
);
CREATE TABLE Sub_Table_A (
super_id PRIMARY KEY,
sub_type CHAR(1) NOT NULL,
CHECK (sub_type = 'A'),
FOREIGN KEY (super_id, sub_type) REFERENCES Super_Table (super_id, sub_type)
);
CREATE TABLE Sub_Table_B (
super_id PRIMARY KEY,
sub_type CHAR(1) NOT NULL,
CHECK (sub_type = 'B'),
FOREIGN KEY (super_id, sub_type) REFERENCES Super_Table (super_id, sub_type)
);
अब सुपर_टेबल में एक पंक्ति को दोनों उप तालिकाओं में एक पंक्ति द्वारा संदर्भित नहीं किया जा सकता है। Super_Table की पंक्ति में या तो 'A' या 'B' होना चाहिए और इसलिए केवल एक उप तालिका विदेशी कुंजी संदर्भ को संतुष्ट कर सकती है।
अपनी टिप्पणी दें:
मेरी समझ यह है कि INHERITS का वर्तमान PostgreSQL कार्यान्वयन अनुक्रमणिका, अद्वितीय स्थिरांक और विदेशी कुंजी बाधाओं से संबंधित कई विसंगतियों की अनुमति देता है। इस सुविधा का उपयोग करना मुश्किल और त्रुटि-प्रवण है।
मूल रूप से, क्योंकि अनुक्रमणिका केवल एक ही तालिका में मौजूद होती है, यदि आपकी मूल तालिका में एक अद्वितीय बाधा है तो यह माता-पिता और उसके सभी बच्चों पर उस विशिष्टता को कैसे लागू कर सकती है? बच्चे अपनी तालिकाओं में मान सम्मिलित कर सकते हैं जो पहले से ही माता-पिता में मौजूद हैं, या माता-पिता एक मान सम्मिलित कर सकते हैं जो पहले से ही बच्चों में से एक में मौजूद है।
इसी तरह विदेशी कुंजियाँ मूल तालिका और/या उसके बच्चों को संदर्भित नहीं कर सकती हैं क्योंकि यह अस्पष्ट है कि माता-पिता/बच्चों में एक ही प्राथमिक कुंजी या अद्वितीय मान के साथ कई पंक्तियाँ मौजूद हो सकती हैं तो कौन सी पंक्ति का संदर्भ दिया जाता है।
ये PostgreSQL में INHERITS की ज्ञात और अनसुलझी सीमाएँ हैं। ऊपर दिखाया गया डिज़ाइन प्राथमिक कुंजी के लिए समस्या का समाधान करता है, लेकिन द्वितीयक अद्वितीय कुंजियों के लिए नहीं।
http://archives.postgresql.org/pgsql-hackers/2010 -05/msg00285.php