2010-02-02 13 views
6

यह मेरी धारणा पर आधारित है कि प्रकार का ऑब्जेक्ट लेना:प्रक्षेपण प्रक्षेपण के विपरीत है, या यह अभी भी प्रक्षेपण (या बस मैपिंग) है?

public class Fruit : IBasicFruit, IFruitDetails 
{ 
    // IBasicFruit implementation 
    public string name { get; set; } 
    public string color { get; set; } 

    // IFruitDetails implementation 
    public string scientific_name { get; set; } 
    public bool often_mistaken_for_vegetable { get; set; } 
    public float average_grams { get; set; } 
    public int century_domesticated { get; set; } 
} 

... और इससे टाइप की ऑब्जेक्ट बनाना:

public class BasicFruit : IBasicFruit 
{ 
    public string name { get; set; } 
    public string color { get; set; } 
} 

... "प्रक्षेपण" के रूप में जाना जाता है, या "प्रक्षेपण प्रकार" (वह प्रक्षेपण न केवल अज्ञात प्रकारों पर लागू होता है)।

अब, मान लीजिए कि मैं एक सर्वर से एक क्लासिकलाइज्ड BasicFruit को अपने क्लाइंट एप्लिकेशन में भेजता हूं, जहां उन दो तारों पर कुछ अत्यधिक परिष्कृत कृषि तर्क किया जाता है, और फिर इसे सर्वर पर वापस भेज दिया जाता है, जहां ORM को पता नहीं है BasicFruit प्रकार का, केवल Fruit इकाई प्रकार का। यदि मैं अपने BasicFruit ऑब्जेक्ट (उन गुणों को अनदेखा कर रहा हूं जो BasicFruit में मौजूद नहीं हैं) पर आधारित एक नया Fruit ऑब्जेक्ट बनाते हैं, तो मेरा ओआरएम इसे जारी रख सकता है, क्या यह प्रक्षेपण के विपरीत है, क्योंकि मैं सबसेट से सुपरसेट पर जा रहा हूं, या क्या यह अभी भी प्रक्षेपण माना जाता है, या यह सिर्फ मैपिंग है?

प्रक्षेपण मानचित्रण का एक रूप माना जा सकता है?

उत्तर

1

संबंधपरक बीजगणित प्रक्षेपण एक ऑपरेशन है जो उस संबंध के कॉलम का संबंध और उप-समूह लेता है और एक नया संबंध देता है। नया संबंध इनपुट संबंध के समान है, सिवाय इसके कि केवल निर्दिष्ट कॉलम हैं।

projection : Relation -> Column list -> Relation 

वहाँ क्योंकि एक ही पंक्ति में अनेक पंक्तियां परियोजना इनपुट संबंध से उत्पादन के संबंध में कम पंक्तियां हो सकता है अगर निर्दिष्ट स्तंभों के लिए उनके मूल्यों के समान हैं।

inverse_projection : Relation -> Column list -> Relation 

यहाँ हम एक इनपुट संबंध जिसका स्तंभ नाम उत्पादन के संबंध में स्तंभों की एक सबसेट हैं:

अब उलटा आपरेशन पर विचार करें। अब हमें आउटपुट रिलेशनशिप के कॉलम होने के लिए Column list की आवश्यकता है, जो अब इनपुट संबंध में कॉलम का सुपरसेट है। यह थोड़ा असाधारण है क्योंकि हमें आउटपुट रिलेशनशिप के लिए पंक्तियां बनाना है जहां कुछ कॉलम मान निर्दिष्ट नहीं हैं। एक संबंधपरक बीजगणित परिप्रेक्ष्य से, यह बहुत समझ में नहीं आता है। आखिरकार, इन अनिर्दिष्ट कॉलम के लिए डेटा कहां से आता है? इसके अलावा, प्रक्षेपण ऑपरेशन के विपरीत इनपुट और आउटपुट संबंधों में हमेशा पंक्तियों की संख्या होती है।

एसक्यूएल में हमें केवल कुछ तालिका के कॉलम निर्दिष्ट करके डेटा डालने की अनुमति है। निर्दिष्ट निर्दिष्ट कॉलम उनके डिफ़ॉल्ट मानों पर लेते हैं।

INSERT INTO fruit (name, color) VALUES 
('apple', 'red'), 
('apple', 'green'), 
('orange', 'orange'); 

वापस संबंधपरक बीजगणित इस तरह है के लिए जा रहे संबंध के पार उत्पाद लेने की तरह अधिक ...

NAME, COLOR 
apple, red 
apple, green 
orange, orange 
संबंध के साथ

...

SCIENTIFIC_NAME, OFTEN_MISTAKEN_FOR_A_VEGETABLE, AVERAGE_GRAMS, CENTURY_DOMESTICATED 
"", false, null, null 

की तुलना में एक कर तथाकथित उलटा प्रक्षेपण। फिर, वे वैचारिक रूप से समान हैं, लेकिन आप वास्तव में डिफ़ॉल्ट मानों के साथ एक क्रॉस उत्पाद ले रहे हैं।

+0

महान, स्पष्ट रूप से उत्तर समझाया गया! – Jay

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