ऑब्जेक्ट-रिलेशनल मैपिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(12 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Distinguish|Object-role modeling}}
{{Distinguish|ऑब्जेक्ट-रोल मॉडलिंग}}


{{short description|Programming technique}}
{{short description|Programming technique}}
कंप्यूटर विज्ञान में ऑब्जेक्ट-रिलेशनल मैपिंग (ओआरएम, ओ/आरएम, और ओ/आर मैपिंग टूल) रिलेशनल डेटाबेस और [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] भाषा के ढेर के बीच डेटा को परिवर्तित करने के लिए [[कंप्यूटर प्रोग्रामिंग]] विधि है। यह वस्तुतः वास्तविक [[वस्तु डेटाबेस]] बनाता है जिसका उपयोग प्रोग्रामिंग भाषा के भीतर से किया जा सकता है।
कंप्यूटर विज्ञान में ऑब्जेक्ट-रिलेशनल प्रतिचित्रण (ओआरएम, ओ/आरएम, और ओ/आर प्रतिचित्रण उपकरण) रिलेशनल डेटाबेस और [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग|ऑब्जेक्ट अभिविन्यस्त प्रोग्रामिंग]] भाषा के ढेर के बीच डेटा को परिवर्तित करने के लिए [[कंप्यूटर प्रोग्रामिंग]] विधि है। यह वस्तुतः वास्तविक [[वस्तु डेटाबेस]] बनाता है जिसका उपयोग प्रोग्रामिंग भाषा के अन्दर से किया जा सकता है।


[[वस्तु के उन्मुख]] प्रोग्रामिंग में, [[डेटा प्रबंधन]] कार्य ऑब्जेक्ट ([[कंप्यूटर विज्ञान]]) पर कार्य करते हैं जो [[अदिश (कम्प्यूटिंग)]] मानों को ऑब्जेक्ट में जोड़ते हैं। उदाहरण के लिए, पता पुस्तिका प्रविष्टि पर विचार करें जो शून्य या अधिक फ़ोन संख्याओं और शून्य या अधिक पतों के साथ व्यक्ति का प्रतिनिधित्व करती है। यह वस्तु-उन्मुख कार्यान्वयन में व्यक्ति [[वस्तु (कंप्यूटर विज्ञान)]] द्वारा विशेषता (कंप्यूटिंग) के साथ तैयार किया जा सकता है। प्रत्येक डेटा आइटम को रखने के लिए विशेषता/फ़ील्ड जिसमें प्रविष्टि शामिल है: व्यक्ति का नाम, फ़ोन संख्याओं की सूची, और पतों की सूची। फ़ोन संख्याओं की सूची में फ़ोननंबर ऑब्जेक्ट आदि शामिल होंगे। ऐसी प्रत्येक पता-पुस्तिका प्रविष्टि को प्रोग्रामिंग भाषा द्वारा एकल वस्तु के रूप में माना जाता है (उदाहरण के लिए, ऑब्जेक्ट के लिए सूचक वाले एकल चर द्वारा इसे संदर्भित किया जा सकता है)। विभिन्न विधियों (कंप्यूटर प्रोग्रामिंग) को ऑब्जेक्ट से जोड़ा जा सकता है, जैसे पसंदीदा फोन नंबर वापस करने के विधियों, घर का पता, और इसी तरह।
[[वस्तु के उन्मुख]] प्रोग्रामिंग में, [[डेटा प्रबंधन]] कार्य ऑब्जेक्ट ([[कंप्यूटर विज्ञान]]) पर कार्य करते हैं जो [[अदिश (कम्प्यूटिंग)]] मानों को ऑब्जेक्ट में जोड़ते हैं। उदाहरण के लिए, पता पुस्तिका प्रविष्टि पर विचार करें जो शून्य या अधिक फ़ोन संख्याओं और शून्य या अधिक पतों के साथ व्यक्ति का प्रतिनिधित्व करती है। यह वस्तु-उन्मुख कार्यान्वयन में व्यक्ति [[वस्तु (कंप्यूटर विज्ञान)]] द्वारा विशेषता (कंप्यूटिंग) के साथ तैयार किया जा सकता है। प्रत्येक डेटा आइटम को रखने के लिए विशेषता/क्षेत्र जिसमें: व्यक्ति का नाम, फ़ोन संख्याओं की सूची, और पतों की सूची प्रविष्टि सम्मिलित है। फ़ोन संख्याओं की सूची में फ़ोन संख्या ऑब्जेक्ट आदि सम्मिलित होंगे। ऐसी प्रत्येक पता-पुस्तिका प्रविष्टि को प्रोग्रामिंग भाषा द्वारा एकल वस्तु के रूप में माना जाता है (उदाहरण के लिए, ऑब्जेक्ट के लिए सूचक वाले एकल चर द्वारा इसे संदर्भित किया जा सकता है)। विभिन्न विधियों (कंप्यूटर प्रोग्रामिंग) को ऑब्जेक्ट से जोड़ा जा सकता है, जैसे पसंदीदा फोन संख्या वापस करने के विधियों, घर का पता, और इसी प्रकार।


इसके विपरीत, संबंधपरक डेटाबेस, जैसे [[SQL|एसक्यूएल]], समूह स्केलर्स को टुपल्स में, जो तब [[तालिका (डेटाबेस)]] में गणना किए जाते हैं। टुपल्स और ऑब्जेक्ट्स में कुछ सामान्य समानता है, जिसमें वे दोनों नामित क्षेत्रों में मूल्यों को इकट्ठा करने के विधियों हैं, जैसे कि पूरे संग्रह को मिश्रित इकाई के रूप में हेरफेर किया जा सकता है। उनमें कई अंतर हैं, हालांकि, विशेष रूप से: जीवनचक्र प्रबंधन (पंक्ति प्रविष्टि और विलोपन, बनाम कचरा संग्रहण_(कंप्यूटर_विज्ञान) या संदर्भ गणना), अन्य संस्थाओं के संदर्भ (ऑब्जेक्ट संदर्भ, बनाम विदेशी कुंजी संदर्भ), और वंशानुक्रम (रिलेशनल में गैर-मौजूद) डेटाबेस)। साथ ही, वस्तुओं को ढेर पर प्रबंधित किया जाता है और ही प्रक्रिया के पूर्ण नियंत्रण में हैं, जबकि डेटाबेस टुपल्स साझा किए जाते हैं और इसमें लॉकिंग, विलय और पुनः प्रयास शामिल होना चाहिए। ऑब्जेक्ट-रिलेशनल मैपिंग इन सभी अंतरों को ध्यान में रखते हुए, ऑब्जेक्ट्स और बैक पर मैपिंग टुपल्स के लिए स्वचालित समर्थन प्रदान करता है।<ref name=hibernate-orm-overview>
इसके विपरीत, संबंधपरक डेटाबेस, जैसे [[SQL|एसक्यूएल]], समूह अदिश को टुपल्स में, जो तब [[तालिका (डेटाबेस)]] में गणना किए जाते हैं। टुपल्स और ऑब्जेक्ट्स में कुछ सामान्य समानता है, जिसमें वे दोनों नामित क्षेत्रों में मानों को एकत्र करने के विधियों हैं, जैसे कि पूरे संग्रह को मिश्रित इकाई के रूप में हेरफेर किया जा सकता है। उनमें कई अंतर हैं, चूंकि, विशेष रूप से: जीवनचक्र प्रबंधन (पंक्ति प्रविष्टि और विलोपन, बनाम कचरा संग्रहण_(कंप्यूटर_विज्ञान) या संदर्भ गणना), अन्य संस्थाओं के संदर्भ (ऑब्जेक्ट संदर्भ, बनाम विदेशी कुंजी संदर्भ), और वंशानुक्रम (रिलेशनल में गैर-मौजूद) डेटाबेस)। साथ ही, वस्तुओं को ढेर पर प्रबंधित किया जाता है और ही प्रक्रिया के पूर्ण नियंत्रण में हैं, जबकि डेटाबेस टुपल्स साझा किए जाते हैं और इसमें लॉकिंग, विलय और पुनः प्रयास सम्मिलित होना चाहिए। ऑब्जेक्ट-रिलेशनल प्रतिचित्रण इन सभी अंतरों को ध्यान में रखते हुए, ऑब्जेक्ट्स और बैक पर प्रतिचित्रण टुपल्स के लिए स्वचालित समर्थन प्रदान करता है।<ref name=hibernate-orm-overview>
{{cite web
{{cite web
|title= What is Object/Relational Mapping?
|title= What is Object/Relational Mapping?
Line 16: Line 16:
</ref>
</ref>


समस्या के दिल में वस्तुओं के तार्किक प्रतिनिधित्व को परमाणु रूप में अनुवाद करना शामिल है जो वस्तुओं के गुणों और उनके संबंधों को संरक्षित करते हुए डेटाबेस में संग्रहीत करने में सक्षम है ताकि जरूरत पड़ने पर उन्हें वस्तुओं के रूप में पुनः लोड किया जा सके। यदि यह भंडारण और पुनर्प्राप्ति कार्यक्षमता लागू की जाती है, तो वस्तुओं को [[दृढ़ता (कंप्यूटर विज्ञान)]] कहा जाता है।<ref name="hibernate-orm-overview" />
समस्या के दिल में वस्तुओं के तार्किक प्रतिनिधित्व को परमाणु रूप में अनुवाद करना सम्मिलित है जो वस्तुओं के गुणों और उनके संबंधों को संरक्षित करते हुए डेटाबेस में संग्रहीत करने में सक्षम है जिससे जरूरत पड़ने पर उन्हें वस्तुओं के रूप में पुनः लोड किया जा सके। यदि यह भंडारण और पुनर्प्राप्ति कार्यक्षमता प्रायुक्त की जाती है, तो वस्तुओं को [[दृढ़ता (कंप्यूटर विज्ञान)]] कहा जाता है।<ref name="hibernate-orm-overview" />






== अवलोकन ==
== अवलोकन ==
भंडारण चालकों के कार्यान्वयन-विशिष्ट विवरण आम तौर पर उपयोग में आने वाली प्रोग्रामिंग भाषा में एपीआई में लपेटे जाते हैं, भंडारण माध्यम के साथ बातचीत करने के विधियों को उजागर करते हैं जो सरल और आसपास के कोड के प्रतिमानों के अनुरूप होता है।
भंडारण चालकों के कार्यान्वयन-विशिष्ट विवरण सामान्यतः उपयोग में आने वाली प्रोग्रामिंग भाषा में एपीआई में लपेटे जाते हैं, भंडारण माध्यम के साथ बातचीत करने के विधियों को उजागर करते हैं जो सरल और आसपास के कोड के प्रतिमानों के अनुरूप होता है।


निम्नलिखित सरल उदाहरण है, जिसे C Sharp (प्रोग्रामिंग भाषा) | C# कोड में लिखा गया है, डेटाबेस इंजन का उपयोग करके SQL में लिखी गई क्वेरी को निष्पादित करने के लिए।<syntaxhighlight lang="d">
निम्नलिखित सरल उदाहरण है, जिसे C Sharp (प्रोग्रामिंग भाषा) कोड में लिखा गया है, डेटाबेस इंजन का उपयोग करके एसक्यूएल में लिखी गई क्वेरी को निष्पादित करने के लिए।<syntaxhighlight lang="d">
var sql = "SELECT id, first_name, last_name, phone, birth_date, sex, age FROM persons WHERE id = 10";
var sql = "SELECT id, first_name, last_name, phone, birth_date, sex, age FROM persons WHERE id = 10";
var result = context.Persons.FromSqlRaw(sql).ToList();
var result = context.Persons.FromSqlRaw(sql).ToList();
Line 29: Line 29:
</syntaxhighlight>
</syntaxhighlight>


इसके विपरीत, निम्नलिखित ओआरएम-जॉब एपीआई का उपयोग करता है जो कोड लिखना संभव बनाता है जो स्वाभाविक रूप से भाषा की विशेषताओं का उपयोग करता है।
इसके विपरीत, निम्नलिखित ओआरएम-जॉब एपीआई का उपयोग करता है जो कोड लिखना संभव बनाता है जो स्वाभाविक रूप से भाषा की विशेषताओं का उपयोग करता है।<syntaxhighlight lang="d">
var person = repository.GetPerson(10);
var firstName = person.GetFirstName();
</syntaxhighlight>
उपरोक्त स्थिति भण्डारण निक्षेपस्थल और उस ऑब्जेक्ट के विधियों का प्रतिनिधित्व करने वाली वस्तु का उपयोग करता है। अन्य संरचना कोड को स्थिर विधियों के रूप में प्रदान कर सकते हैं, जैसा कि नीचे दिए गए उदाहरण में है, और फिर भी अन्य विधियां ऑब्जेक्ट-अभिविन्यस्त प्रणाली को प्रायुक्त नहीं कर सकती हैं। अधिकांश आसपास की भाषा के डिजाइन सिद्धांतों में ओआरएम के सर्वोत्तम फिट के लिए प्रतिमान का चयन किया जाता है।<syntaxhighlight lang="d">
var person = Person.Get(10);
</syntaxhighlight>
सामान्यतः, फ्रेमवर्क स्टोरेज बेस के उपसमुच्चय को एक्सेस करने और संशोधित करने के लिए कुछ फ़िल्टरिंग और क्वेरीिंग कार्यक्षमता को उजागर करेगा। नीचे दिया गया कोड डेटाबेस में उन लोगों के लिए पूछताछ करता है जिनकी आईडी वैल्यू '10' है।<syntaxhighlight lang="d">
var person = Person.Get(Person.Properties.Id == 10);
</syntaxhighlight>


<वाक्यविन्यास प्रकाश लैंग = csharp>
==पारंपरिक डेटा एक्सेस विधिों के साथ तुलना==
var व्यक्ति = रिपॉजिटरी। गेटपर्सन (10);
वस्तु-उन्मुख भाषा और संबंधपरक डेटाबेस के बीच आदान-प्रदान की पारंपरिक विधिों की तुलना में, ओआरएम अधिकांश लिखे जाने वाले कोड की मात्रा को कम कर देता है।<ref>Douglas Barry, Torsten Stanienda, "Solving the Java Object Storage Problem," Computer, vol. 31, no. 11, pp. 33-40, Nov. 1998, [http://www2.computer.org/portal/web/csdl/doi/10.1109/2.730734 http://www2.computer.org/portal/web/csdl/doi/10.1109/2.730734 ], Excerpt at http://www.service-architecture.com/object-relational-mapping/articles/transparent_persistence_vs_jdbc_call-level_interface.html. Lines of code using O/R are only a fraction of those needed for a call-level interface (1:4). ''For this exercise, 496 lines of code were needed using the ODMG Java Binding compared to 1,923 lines of code using JDBC.''</ref>
var firstName = person.GetFirstName ();
</वाक्यविन्यास हाइलाइट>


उपरोक्त मामला स्टोरेज रिपॉजिटरी और उस ऑब्जेक्ट के विधियों का प्रतिनिधित्व करने वाली वस्तु का उपयोग करता है। अन्य ढांचे कोड को स्थिर विधियों के रूप में प्रदान कर सकते हैं, जैसा कि नीचे दिए गए उदाहरण में है, और फिर भी अन्य विधियां ऑब्जेक्ट-ओरिएंटेड सिस्टम को लागू नहीं कर सकती हैं। अक्सर आसपास की भाषा के डिजाइन सिद्धांतों में ओआरएम के सर्वोत्तम फिट के लिए प्रतिमान का चयन किया जाता है।
ओआरएम उपकरण के नुकसान सामान्यतः कार्यान्वयन कोड में वास्तविक में क्या हो रहा है, इसे अस्पष्ट करने वाले [[डेटाबेस अमूर्त परत]] के उच्च स्तर से उत्पन्न होते हैं। इसके अतिरिक्त, ओआरएम सॉफ़्टवेयर पर भारी निर्भरता को खराब डिज़ाइन किए गए डेटाबेस के उत्पादन में प्रमुख कारक के रूप में उद्धृत किया गया है।<ref>Josh Berkus, "Wrecking Your Database", Computer, Aug. 2009, https://www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/</ref>


<वाक्यविन्यास प्रकाश लैंग = csharp>
var व्यक्ति = व्यक्ति। प्राप्त करें (10);
</वाक्यविन्यास हाइलाइट>


आमतौर पर, फ्रेमवर्क स्टोरेज बेस के सबसेट को एक्सेस करने और संशोधित करने के लिए कुछ फ़िल्टरिंग और क्वेरीिंग कार्यक्षमता को उजागर करेगा। नीचे दिया गया कोड डेटाबेस में उन लोगों के लिए पूछताछ करता है जिनकी आईडी वैल्यू '10' है।


<वाक्यविन्यास प्रकाश लैंग = csharp>
== वस्तु-उन्मुख डेटाबेस ==
var व्यक्ति = व्यक्ति। प्राप्त करें (व्यक्ति। गुण। आईडी == 10);
ऑब्जेक्ट-अभिविन्यस्त डेटाबेस मैनेजमेंट प्रणाली (ओओडीबीएमएस) या [[दस्तावेज़-उन्मुख डेटाबेस]] जैसे मूल एक्सएम्एल डेटाबेस का उपयोग करना है जो डेटा मॉडलिंग में अधिक लचीलापन प्रदान करते हैं। ओओडीबीएमएस विशेष रूप से वस्तु-उन्मुख मानों के साथ काम करने के लिए डिज़ाइन किए गए डेटाबेस हैं। ओओडीबीएमएस का उपयोग करने से डेटा को उसके एसक्यूएल रूप से और उसके एसक्यूएल रूप में परिवर्तित करने की आवश्यकता समाप्त हो जाती है, क्योंकि डेटा को उसके मूल वस्तु प्रतिनिधित्व में संग्रहीत किया जाता है और [[जंक्शन तालिका]]/संचालन की आवश्यकता के अतिरिक्त संबंधों को सीधे दर्शाया जाता है। दस्तावेज़-उन्मुख डेटाबेस के लिए ओआरएम के समतुल्य को ऑब्जेक्ट-दस्तावेज़ मैपर (ओडीएम) कहा जाता है।
</वाक्यविन्यास हाइलाइट>
 
==पारंपरिक डेटा एक्सेस विधिों के साथ तुलना==
वस्तु-उन्मुख भाषा और संबंधपरक डेटाबेस के बीच आदान-प्रदान की पारंपरिक विधिों की तुलना में, ORM अक्सर लिखे जाने वाले कोड की मात्रा को कम कर देता है।<ref>Douglas Barry, Torsten Stanienda, "Solving the Java Object Storage Problem," Computer, vol. 31, no. 11, pp. 33-40, Nov. 1998, [http://www2.computer.org/portal/web/csdl/doi/10.1109/2.730734 http://www2.computer.org/portal/web/csdl/doi/10.1109/2.730734 ], Excerpt at http://www.service-architecture.com/object-relational-mapping/articles/transparent_persistence_vs_jdbc_call-level_interface.html. Lines of code using O/R are only a fraction of those needed for a call-level interface (1:4). ''For this exercise, 496 lines of code were needed using the ODMG Java Binding compared to 1,923 lines of code using JDBC.''</ref>
ओआरएम उपकरण के नुकसान आम तौर पर कार्यान्वयन कोड में वास्तव में क्या हो रहा है, इसे अस्पष्ट करने वाले [[डेटाबेस अमूर्त परत]] के उच्च स्तर से उत्पन्न होते हैं। इसके अलावा, ORM सॉफ़्टवेयर पर भारी निर्भरता को खराब डिज़ाइन किए गए डेटाबेस के उत्पादन में प्रमुख कारक के रूप में उद्धृत किया गया है।<ref>Josh Berkus, "Wrecking Your Database", Computer, Aug. 2009, https://www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/</ref>


दस्तावेज़-उन्मुख डेटाबेस भी उपयोगकर्ता को वस्तुओं को तालिका पंक्तियों में श्रेड करने से रोकते हैं। इनमें से कई प्रणालियाँ डेटासमुच्चय को पुनः प्राप्त करने के लिए [[XQuery|एक्सक्वैरी]] क्वेरी भाषा का भी समर्थन करती हैं।


== वस्तु-उन्मुख डेटाबेस ==
वस्तु-उन्मुख डेटाबेस का उपयोग जटिल, आला अनुप्रयोगों में किया जाता है। ओओडीबीएमएस का उपयोग करने के खिलाफ तर्कों में से यह है कि यह विज्ञापन-प्रसार, एप्लिकेशन-स्वतंत्र प्रश्नों को निष्पादित करने में सक्षम नहीं हो सकता है।{{Citation needed|date=September 2013}} इस कारण से, कई प्रोग्रामर ऑब्जेक्ट-एसक्यूएल प्रतिचित्रण प्रणाली के साथ खुद को घर पर अधिक पाते हैं, चाहे अधिकांश ऑब्जेक्ट-अभिविन्यस्त डेटाबेस एसक्यूएल प्रश्नों को सीमित सीमा तक संसाधित करने में सक्षम हों। अन्य ओओडीबीएमएस प्रसिद्ध क्वेरी प्रारूप को संरक्षित करते हुए, तदर्थ प्रश्नों की आवश्यकता को संबोधित करने के साधन के रूप में, एसक्यूएल डेटाबेस को प्रतिकृति प्रदान करते हैं।{{Citation needed|date=September 2018}}
अन्य दृष्टिकोण ऑब्जेक्ट डेटाबेस | ऑब्जेक्ट-ओरिएंटेड डेटाबेस मैनेजमेंट सिस्टम (OODBMS) या [[दस्तावेज़-उन्मुख डेटाबेस]] जैसे मूल XML डेटाबेस का उपयोग करना है जो डेटा मॉडलिंग में अधिक लचीलापन प्रदान करते हैं। OODBMS विशेष रूप से वस्तु-उन्मुख मूल्यों के साथ काम करने के लिए डिज़ाइन किए गए डेटाबेस हैं। OODBMS का उपयोग करने से डेटा को उसके SQL रूप से और उसके SQL रूप में परिवर्तित करने की आवश्यकता समाप्त हो जाती है, क्योंकि डेटा को उसके मूल वस्तु प्रतिनिधित्व में संग्रहीत किया जाता है और [[जंक्शन तालिका]]/संचालन की आवश्यकता के बजाय संबंधों को सीधे दर्शाया जाता है। दस्तावेज़-उन्मुख डेटाबेस के लिए ORM के समतुल्य को ऑब्जेक्ट-दस्तावेज़ मैपर (ODM) कहा जाता है।


दस्तावेज़-उन्मुख डेटाबेस भी उपयोगकर्ता को वस्तुओं को तालिका पंक्तियों में श्रेड करने से रोकते हैं। इनमें से कई प्रणालियाँ डेटासेट को पुनः प्राप्त करने के लिए [[XQuery]] क्वेरी भाषा का भी समर्थन करती हैं।


वस्तु-उन्मुख डेटाबेस का उपयोग जटिल, आला अनुप्रयोगों में किया जाता है। ओओडीबीएमएस का उपयोग करने के खिलाफ तर्कों में से यह है कि यह विज्ञापन-प्रसार, एप्लिकेशन-स्वतंत्र प्रश्नों को निष्पादित करने में सक्षम नहीं हो सकता है।{{Citation needed|date=September 2013}} इस कारण से, कई प्रोग्रामर ऑब्जेक्ट-एसक्यूएल मैपिंग सिस्टम के साथ खुद को घर पर अधिक पाते हैं, भले ही अधिकांश ऑब्जेक्ट-ओरिएंटेड डेटाबेस एसक्यूएल प्रश्नों को सीमित सीमा तक संसाधित करने में सक्षम हों। अन्य OODBMS प्रसिद्ध क्वेरी पैटर्न को संरक्षित करते हुए, तदर्थ प्रश्नों की आवश्यकता को संबोधित करने के साधन के रूप में, SQL डेटाबेस को प्रतिकृति प्रदान करते हैं।{{Citation needed|date=September 2018}}
== चुनौतियां ==
ऑब्जेक्ट प्रणाली को रिलेशनल डेटाबेस से कैसे मिलान किया जाए, इस पर विचार करते समय कई प्रकार की कठिनाइयाँ आती हैं। इन कठिनाइयों को वस्तु-संबंधपरक प्रतिबाधा बेमेल के रूप में संदर्भित किया जाता है।<ref>[https://www.semanticscholar.org/paper/Object-Relational-Mapping-Revisited-A-Quantitative-Lorenz-Rudolph/708ac5e798b7e45b949d42e2f872549a3612e1e2 Object–Relational Mapping Revisited - A Quantitative Study on the Impact of Database Technology on O/R Mapping Strategies. M Lorenz, JP Rudolph, G Hesse, M Uflacker, H Plattner. Hawaii International Conference on System Sciences (HICSS), 4877-4886] (DOI:10.24251/hicss.2017.592)</ref>


ओआरएम को प्रायुक्त करने का विकल्प हर प्रमुख डेटाबेस के साथ प्रदान की जाने वाली मूल प्रक्रियात्मक भाषाओं का उपयोग है। इन्हें एसक्यूएल कथनों का उपयोग करके ग्राहक से कॉल किया जा सकता है। [[डेटा एक्सेस ऑब्जेक्ट]] (डीएओ) डिज़ाइन प्रारूप का उपयोग इन कथनों को अमूर्त करने के लिए किया जाता है और शेष एप्लिकेशन के लिए हल्का ऑब्जेक्ट-अभिविन्यस्त अंतराफलक प्रदान करता है।<ref>{{cite web |last=Feuerstein |first=Steven |title=Oracle PL/SQL Programming |url=http://docstore.mik.ua/orelly/oracle/prog2/ch18_05.htm |access-date=23 August 2011 |author2=Bill Pribyl  |location=18.5 Modifying Persistent Objects |date=September 1997}}</ref>


== चुनौतियां ==
ऑब्जेक्ट सिस्टम को रिलेशनल डेटाबेस से कैसे मिलान किया जाए, इस पर विचार करते समय कई तरह की कठिनाइयाँ आती हैं। इन कठिनाइयों को वस्तु-संबंधपरक प्रतिबाधा बेमेल के रूप में संदर्भित किया जाता है।<ref>[https://www.semanticscholar.org/paper/Object-Relational-Mapping-Revisited-A-Quantitative-Lorenz-Rudolph/708ac5e798b7e45b949d42e2f872549a3612e1e2 Object–Relational Mapping Revisited - A Quantitative Study on the Impact of Database Technology on O/R Mapping Strategies. M Lorenz, JP Rudolph, G Hesse, M Uflacker, H Plattner. Hawaii International Conference on System Sciences (HICSS), 4877-4886] (DOI:10.24251/hicss.2017.592)</ref>
ओआरएम को लागू करने का विकल्प हर प्रमुख डेटाबेस के साथ प्रदान की जाने वाली मूल प्रक्रियात्मक भाषाओं का उपयोग है। इन्हें SQL कथनों का उपयोग करके क्लाइंट से कॉल किया जा सकता है। [[डेटा एक्सेस ऑब्जेक्ट]] (DAO) डिज़ाइन पैटर्न का उपयोग इन कथनों को अमूर्त करने के लिए किया जाता है और शेष एप्लिकेशन के लिए हल्का ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस प्रदान करता है।<ref>{{cite web |last=Feuerstein |first=Steven |title=Oracle PL/SQL Programming |url=http://docstore.mik.ua/orelly/oracle/prog2/ch18_05.htm |access-date=23 August 2011 |author2=Bill Pribyl  |location=18.5 Modifying Persistent Objects |date=September 1997}}</ref>




== यह भी देखें ==
== यह भी देखें ==
*ऑब्जेक्ट-रिलेशनल मैपिंग सॉफ्टवेयर की सूची
*ऑब्जेक्ट-रिलेशनल प्रतिचित्रण सॉफ्टवेयर की सूची
*ऑब्जेक्ट-रिलेशनल मैपिंग सॉफ्टवेयर की तुलना
*ऑब्जेक्ट-रिलेशनल प्रतिचित्रण सॉफ्टवेयर की तुलना
*[[AutoFetch]] - स्वचालित क्वेरी ट्यूनिंग
*[[AutoFetch]] - स्वचालित क्वेरी ट्यूनिंग
*[[कॉमन ऑब्जेक्ट रिक्वेस्ट ब्रोकर आर्किटेक्चर]] (कॉरबा)
*[[कॉमन ऑब्जेक्ट रिक्वेस्ट ब्रोकर आर्किटेक्चर]] (कॉरबा)
Line 80: Line 76:
* सेवा डेटा ऑब्जेक्ट
* सेवा डेटा ऑब्जेक्ट
*[[इकाई की रूपरेखा]]
*[[इकाई की रूपरेखा]]
* [[सक्रिय रिकॉर्ड पैटर्न]]
* [[सक्रिय रिकॉर्ड पैटर्न|सक्रिय रिकॉर्ड प्रारूप]]
* [[डेटा मैपर पैटर्न]]
* [[डेटा मैपर पैटर्न|डेटा मैपर प्रारूप]]
* [[सिंगल टेबल इनहेरिटेंस]]
* [[सिंगल टेबल इनहेरिटेंस]]


Line 89: Line 85:


==बाहरी संबंध==
==बाहरी संबंध==
*[http://www.artima.com/intv/abstract3.html About ORM] by [[Anders Hejlsberg]]
*[http://www.artima.com/intv/abstract3.html About ओआरएम] by [[Anders Hejlsberg]]
*[http://www.agiledata.org/essays/mappingObjects.html Mapping Objects to Relational Databases: O/R Mapping In Detail] by [[Scott W. Ambler]]
*[http://www.agiledata.org/essays/mappingObjects.html Mapping Objects to Relational Databases: O/R Mapping In Detail] by [[Scott W. Ambler]]


{{Database}}
[[Category:All articles with unsourced statements|Object-Relational Mapping]]
 
[[Category:Articles with hatnote templates targeting a nonexistent page]]
{{DEFAULTSORT:Object-Relational Mapping}}[[Category: ऑब्जेक्ट-रिलेशनल मैपिंग | ऑब्जेक्ट-रिलेशनल मैपिंग ]] [[Category: डेटा मैपिंग]] [[Category: सी शार्प कोड उदाहरण के साथ लेख]]  
[[Category:Articles with invalid date parameter in template|Object-Relational Mapping]]
 
[[Category:Articles with unsourced statements from September 2013|Object-Relational Mapping]]
 
[[Category:Articles with unsourced statements from September 2018|Object-Relational Mapping]]
 
[[Category:CS1 maint]]
[[Category: Machine Translated Page]]
[[Category:Collapse templates|Object-Relational Mapping]]
[[Category:Created On 16/02/2023]]
[[Category:Created On 16/02/2023|Object-Relational Mapping]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page|Object-Relational Mapping]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Object-Relational Mapping]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]

Latest revision as of 10:27, 12 March 2023

कंप्यूटर विज्ञान में ऑब्जेक्ट-रिलेशनल प्रतिचित्रण (ओआरएम, ओ/आरएम, और ओ/आर प्रतिचित्रण उपकरण) रिलेशनल डेटाबेस और ऑब्जेक्ट अभिविन्यस्त प्रोग्रामिंग भाषा के ढेर के बीच डेटा को परिवर्तित करने के लिए कंप्यूटर प्रोग्रामिंग विधि है। यह वस्तुतः वास्तविक वस्तु डेटाबेस बनाता है जिसका उपयोग प्रोग्रामिंग भाषा के अन्दर से किया जा सकता है।

वस्तु के उन्मुख प्रोग्रामिंग में, डेटा प्रबंधन कार्य ऑब्जेक्ट (कंप्यूटर विज्ञान) पर कार्य करते हैं जो अदिश (कम्प्यूटिंग) मानों को ऑब्जेक्ट में जोड़ते हैं। उदाहरण के लिए, पता पुस्तिका प्रविष्टि पर विचार करें जो शून्य या अधिक फ़ोन संख्याओं और शून्य या अधिक पतों के साथ व्यक्ति का प्रतिनिधित्व करती है। यह वस्तु-उन्मुख कार्यान्वयन में व्यक्ति वस्तु (कंप्यूटर विज्ञान) द्वारा विशेषता (कंप्यूटिंग) के साथ तैयार किया जा सकता है। प्रत्येक डेटा आइटम को रखने के लिए विशेषता/क्षेत्र जिसमें: व्यक्ति का नाम, फ़ोन संख्याओं की सूची, और पतों की सूची प्रविष्टि सम्मिलित है। फ़ोन संख्याओं की सूची में फ़ोन संख्या ऑब्जेक्ट आदि सम्मिलित होंगे। ऐसी प्रत्येक पता-पुस्तिका प्रविष्टि को प्रोग्रामिंग भाषा द्वारा एकल वस्तु के रूप में माना जाता है (उदाहरण के लिए, ऑब्जेक्ट के लिए सूचक वाले एकल चर द्वारा इसे संदर्भित किया जा सकता है)। विभिन्न विधियों (कंप्यूटर प्रोग्रामिंग) को ऑब्जेक्ट से जोड़ा जा सकता है, जैसे पसंदीदा फोन संख्या वापस करने के विधियों, घर का पता, और इसी प्रकार।

इसके विपरीत, संबंधपरक डेटाबेस, जैसे एसक्यूएल, समूह अदिश को टुपल्स में, जो तब तालिका (डेटाबेस) में गणना किए जाते हैं। टुपल्स और ऑब्जेक्ट्स में कुछ सामान्य समानता है, जिसमें वे दोनों नामित क्षेत्रों में मानों को एकत्र करने के विधियों हैं, जैसे कि पूरे संग्रह को मिश्रित इकाई के रूप में हेरफेर किया जा सकता है। उनमें कई अंतर हैं, चूंकि, विशेष रूप से: जीवनचक्र प्रबंधन (पंक्ति प्रविष्टि और विलोपन, बनाम कचरा संग्रहण_(कंप्यूटर_विज्ञान) या संदर्भ गणना), अन्य संस्थाओं के संदर्भ (ऑब्जेक्ट संदर्भ, बनाम विदेशी कुंजी संदर्भ), और वंशानुक्रम (रिलेशनल में गैर-मौजूद) डेटाबेस)। साथ ही, वस्तुओं को ढेर पर प्रबंधित किया जाता है और ही प्रक्रिया के पूर्ण नियंत्रण में हैं, जबकि डेटाबेस टुपल्स साझा किए जाते हैं और इसमें लॉकिंग, विलय और पुनः प्रयास सम्मिलित होना चाहिए। ऑब्जेक्ट-रिलेशनल प्रतिचित्रण इन सभी अंतरों को ध्यान में रखते हुए, ऑब्जेक्ट्स और बैक पर प्रतिचित्रण टुपल्स के लिए स्वचालित समर्थन प्रदान करता है।[1]

समस्या के दिल में वस्तुओं के तार्किक प्रतिनिधित्व को परमाणु रूप में अनुवाद करना सम्मिलित है जो वस्तुओं के गुणों और उनके संबंधों को संरक्षित करते हुए डेटाबेस में संग्रहीत करने में सक्षम है जिससे जरूरत पड़ने पर उन्हें वस्तुओं के रूप में पुनः लोड किया जा सके। यदि यह भंडारण और पुनर्प्राप्ति कार्यक्षमता प्रायुक्त की जाती है, तो वस्तुओं को दृढ़ता (कंप्यूटर विज्ञान) कहा जाता है।[1]


अवलोकन

भंडारण चालकों के कार्यान्वयन-विशिष्ट विवरण सामान्यतः उपयोग में आने वाली प्रोग्रामिंग भाषा में एपीआई में लपेटे जाते हैं, भंडारण माध्यम के साथ बातचीत करने के विधियों को उजागर करते हैं जो सरल और आसपास के कोड के प्रतिमानों के अनुरूप होता है।

निम्नलिखित सरल उदाहरण है, जिसे C Sharp (प्रोग्रामिंग भाषा) कोड में लिखा गया है, डेटाबेस इंजन का उपयोग करके एसक्यूएल में लिखी गई क्वेरी को निष्पादित करने के लिए।

var sql = "SELECT id, first_name, last_name, phone, birth_date, sex, age FROM persons WHERE id = 10";
var result = context.Persons.FromSqlRaw(sql).ToList();
var name = result[0]["first_name"];

इसके विपरीत, निम्नलिखित ओआरएम-जॉब एपीआई का उपयोग करता है जो कोड लिखना संभव बनाता है जो स्वाभाविक रूप से भाषा की विशेषताओं का उपयोग करता है।

var person = repository.GetPerson(10);
var firstName = person.GetFirstName();

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

var person = Person.Get(10);

सामान्यतः, फ्रेमवर्क स्टोरेज बेस के उपसमुच्चय को एक्सेस करने और संशोधित करने के लिए कुछ फ़िल्टरिंग और क्वेरीिंग कार्यक्षमता को उजागर करेगा। नीचे दिया गया कोड डेटाबेस में उन लोगों के लिए पूछताछ करता है जिनकी आईडी वैल्यू '10' है।

var person = Person.Get(Person.Properties.Id == 10);

पारंपरिक डेटा एक्सेस विधिों के साथ तुलना

वस्तु-उन्मुख भाषा और संबंधपरक डेटाबेस के बीच आदान-प्रदान की पारंपरिक विधिों की तुलना में, ओआरएम अधिकांश लिखे जाने वाले कोड की मात्रा को कम कर देता है।[2]

ओआरएम उपकरण के नुकसान सामान्यतः कार्यान्वयन कोड में वास्तविक में क्या हो रहा है, इसे अस्पष्ट करने वाले डेटाबेस अमूर्त परत के उच्च स्तर से उत्पन्न होते हैं। इसके अतिरिक्त, ओआरएम सॉफ़्टवेयर पर भारी निर्भरता को खराब डिज़ाइन किए गए डेटाबेस के उत्पादन में प्रमुख कारक के रूप में उद्धृत किया गया है।[3]


वस्तु-उन्मुख डेटाबेस

ऑब्जेक्ट-अभिविन्यस्त डेटाबेस मैनेजमेंट प्रणाली (ओओडीबीएमएस) या दस्तावेज़-उन्मुख डेटाबेस जैसे मूल एक्सएम्एल डेटाबेस का उपयोग करना है जो डेटा मॉडलिंग में अधिक लचीलापन प्रदान करते हैं। ओओडीबीएमएस विशेष रूप से वस्तु-उन्मुख मानों के साथ काम करने के लिए डिज़ाइन किए गए डेटाबेस हैं। ओओडीबीएमएस का उपयोग करने से डेटा को उसके एसक्यूएल रूप से और उसके एसक्यूएल रूप में परिवर्तित करने की आवश्यकता समाप्त हो जाती है, क्योंकि डेटा को उसके मूल वस्तु प्रतिनिधित्व में संग्रहीत किया जाता है और जंक्शन तालिका/संचालन की आवश्यकता के अतिरिक्त संबंधों को सीधे दर्शाया जाता है। दस्तावेज़-उन्मुख डेटाबेस के लिए ओआरएम के समतुल्य को ऑब्जेक्ट-दस्तावेज़ मैपर (ओडीएम) कहा जाता है।

दस्तावेज़-उन्मुख डेटाबेस भी उपयोगकर्ता को वस्तुओं को तालिका पंक्तियों में श्रेड करने से रोकते हैं। इनमें से कई प्रणालियाँ डेटासमुच्चय को पुनः प्राप्त करने के लिए एक्सक्वैरी क्वेरी भाषा का भी समर्थन करती हैं।

वस्तु-उन्मुख डेटाबेस का उपयोग जटिल, आला अनुप्रयोगों में किया जाता है। ओओडीबीएमएस का उपयोग करने के खिलाफ तर्कों में से यह है कि यह विज्ञापन-प्रसार, एप्लिकेशन-स्वतंत्र प्रश्नों को निष्पादित करने में सक्षम नहीं हो सकता है।[citation needed] इस कारण से, कई प्रोग्रामर ऑब्जेक्ट-एसक्यूएल प्रतिचित्रण प्रणाली के साथ खुद को घर पर अधिक पाते हैं, चाहे अधिकांश ऑब्जेक्ट-अभिविन्यस्त डेटाबेस एसक्यूएल प्रश्नों को सीमित सीमा तक संसाधित करने में सक्षम हों। अन्य ओओडीबीएमएस प्रसिद्ध क्वेरी प्रारूप को संरक्षित करते हुए, तदर्थ प्रश्नों की आवश्यकता को संबोधित करने के साधन के रूप में, एसक्यूएल डेटाबेस को प्रतिकृति प्रदान करते हैं।[citation needed]


चुनौतियां

ऑब्जेक्ट प्रणाली को रिलेशनल डेटाबेस से कैसे मिलान किया जाए, इस पर विचार करते समय कई प्रकार की कठिनाइयाँ आती हैं। इन कठिनाइयों को वस्तु-संबंधपरक प्रतिबाधा बेमेल के रूप में संदर्भित किया जाता है।[4]

ओआरएम को प्रायुक्त करने का विकल्प हर प्रमुख डेटाबेस के साथ प्रदान की जाने वाली मूल प्रक्रियात्मक भाषाओं का उपयोग है। इन्हें एसक्यूएल कथनों का उपयोग करके ग्राहक से कॉल किया जा सकता है। डेटा एक्सेस ऑब्जेक्ट (डीएओ) डिज़ाइन प्रारूप का उपयोग इन कथनों को अमूर्त करने के लिए किया जाता है और शेष एप्लिकेशन के लिए हल्का ऑब्जेक्ट-अभिविन्यस्त अंतराफलक प्रदान करता है।[5]


यह भी देखें

संदर्भ

  1. 1.0 1.1 "What is Object/Relational Mapping?". Hibernate Overview. JBOSS Hibernate. Retrieved 27 January 2022.
  2. Douglas Barry, Torsten Stanienda, "Solving the Java Object Storage Problem," Computer, vol. 31, no. 11, pp. 33-40, Nov. 1998, http://www2.computer.org/portal/web/csdl/doi/10.1109/2.730734 , Excerpt at http://www.service-architecture.com/object-relational-mapping/articles/transparent_persistence_vs_jdbc_call-level_interface.html. Lines of code using O/R are only a fraction of those needed for a call-level interface (1:4). For this exercise, 496 lines of code were needed using the ODMG Java Binding compared to 1,923 lines of code using JDBC.
  3. Josh Berkus, "Wrecking Your Database", Computer, Aug. 2009, https://www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/
  4. Object–Relational Mapping Revisited - A Quantitative Study on the Impact of Database Technology on O/R Mapping Strategies. M Lorenz, JP Rudolph, G Hesse, M Uflacker, H Plattner. Hawaii International Conference on System Sciences (HICSS), 4877-4886 (DOI:10.24251/hicss.2017.592)
  5. Feuerstein, Steven; Bill Pribyl (September 1997). "Oracle PL/SQL Programming". 18.5 Modifying Persistent Objects. Retrieved 23 August 2011.{{cite web}}: CS1 maint: location (link)


बाहरी संबंध