"टेबल इनहेरिटेंस" का अर्थ "क्लास इनहेरिटेंस" से कुछ अलग है और वे विभिन्न उद्देश्यों की पूर्ति करते हैं।
Postgres सभी डेटा परिभाषाओं के बारे में है। कभी-कभी वास्तव में जटिल डेटा परिभाषाएं। OOP (सामान्य जावा-रंग की चीजों में) एक परमाणु संरचना में डेटा परिभाषाओं के अधीनस्थ व्यवहार के बारे में है। "वंशानुक्रम" शब्द का उद्देश्य और अर्थ यहाँ काफी भिन्न है।
ओओपी भूमि में मैं परिभाषित कर सकता हूं (यहां वाक्य रचना और शब्दार्थ के साथ बहुत ढीला होना):
import life
class Animal(life.Autonomous):
metabolism = biofunc(alive=True)
def die(self):
self.metabolism = False
class Mammal(Animal):
hair_color = color(foo=bar)
def gray(self, mate):
self.hair_color = age_effect('hair', self.age)
class Human(Mammal):
alcoholic = vice_boolean(baz=balls)
इसके लिए सारणी इस तरह दिख सकती है:
CREATE TABLE animal
(name varchar(20) PRIMARY KEY,
metabolism boolean NOT NULL);
CREATE TABLE mammal
(hair_color varchar(20) REFERENCES hair_color(code) NOT NULL,
PRIMARY KEY (name))
INHERITS (animal);
CREATE TABLE human
(alcoholic boolean NOT NULL,
FOREIGN KEY (hair_color) REFERENCES hair_color(code),
PRIMARY KEY (name))
INHERITS (mammal);
लेकिन व्यवहार कहां हैं? वे कहीं भी फिट नहीं हैं। यह "ऑब्जेक्ट्स" का उद्देश्य नहीं है क्योंकि वे डेटाबेस वर्ल्ड में चर्चा करते हैं, क्योंकि डेटाबेस डेटा से संबंधित हैं, प्रक्रियात्मक कोड से नहीं। आप के लिए गणना करने के लिए आप डेटाबेस में फ़ंक्शन लिख सकते हैं (अक्सर एक बहुत अच्छा विचार है, लेकिन वास्तव में ऐसा कुछ नहीं है जो इस मामले में फिट बैठता है), लेकिन फ़ंक्शन एक ही चीज़ नहीं हैं तरीके - विधियों को ओओपी के रूप में समझा जाता है जो आप बात कर रहे हैं के बारे में जानबूझकर कम लचीले हैं।
एक योजनाबद्ध उपकरण के रूप में विरासत के बारे में बात करने के लिए एक और बात है: पोस्टग्रैजेस 9.2 के रूप में एक बार में सभी विभाजनों / तालिका परिवार के सदस्यों में विदेशी कुंजी बाधा का संदर्भ देने का कोई तरीका नहीं है। आप ऐसा करने के लिए चेक लिख सकते हैं या इसे किसी अन्य तरीके से प्राप्त कर सकते हैं, लेकिन इसकी अंतर्निहित विशेषता नहीं है (यह जटिल अनुक्रमण के साथ मुद्दों पर आता है, वास्तव में, और किसी ने बिट्स को स्वचालित बनाने के लिए आवश्यक नहीं लिखा है)। इस उद्देश्य के लिए टेबल इनहेरिटेंस का उपयोग करने के बजाय, अक्सर ऑब्जेक्ट इनहेरिटेंस के लिए डेटाबेस में एक बेहतर मैच टेबल के लिए योजनाबद्ध विस्तार करना है। कुछ इस तरह:
CREATE TABLE animal
(name varchar(20) PRIMARY KEY,
ilk varchar(20) REFERENCES animal_ilk NOT NULL,
metabolism boolean NOT NULL);
CREATE TABLE mammal
(animal varchar(20) REFERENCES animal PRIMARY KEY,
ilk varchar(20) REFERENCES mammal_ilk NOT NULL,
hair_color varchar(20) REFERENCES hair_color(code) NOT NULL);
CREATE TABLE human
(mammal varchar(20) REFERENCES mammal PRIMARY KEY,
alcoholic boolean NOT NULL);
अब हमारे पास जानवर के उदाहरण के लिए एक विहित संदर्भ है जिसे हम मज़बूती से एक विदेशी कुंजी संदर्भ के रूप में उपयोग कर सकते हैं, और हमारे पास "ilk" कॉलम है जो xxx_ilk परिभाषाओं की एक तालिका का संदर्भ देता है जो विस्तारित डेटा की "अगली" तालिका की ओर इशारा करती है ( या इंगित करता है कि कोई नहीं है अगर ilk सामान्य प्रकार ही है)। इस तरह के स्कीमा के खिलाफ टेबल फ़ंक्शंस, व्यूज़ इत्यादि लिखना इतना आसान है कि अधिकांश ओआरएम फ्रेमवर्क पृष्ठभूमि में इस तरह की चीज़ करते हैं जब आप ऑब्जेक्ट प्रकारों के परिवारों को बनाने के लिए ओओपी-शैली वर्ग विरासत का सहारा लेते हैं।