ORM क्या है, यह कैसे काम करता है, और मुझे एक का उपयोग कैसे करना चाहिए? [बन्द है]


230

किसी ने सुझाव दिया कि मैं एक ओआरएम का उपयोग उस परियोजना के लिए कर रहा हूं जिसे मैं डिजाइन कर रहा हूं, लेकिन मुझे यह जानने में परेशानी हो रही है कि यह क्या है या यह कैसे काम करता है।

क्या कोई मुझे एक संक्षिप्त विवरण दे सकता है कि ORM क्या है और यह कैसे काम करता है और मुझे एक का उपयोग कैसे शुरू करना चाहिए?


8
मुझे यह प्रश्न मिला, लेकिन यह 2009 से है और मुझे नहीं पता कि आप पहले से ही ORM में मास्टर हैं, लेकिन CodePlex C # में एंटिटी फ्रेमवर्क की तलाश करें । इसके अलावा आप इसे पढ़ सकते हैं। ( dbtechnet.org/labs/dae_lab/Orm.pdf )
मैक्सिमस डेसिमस

1
केवल यह बताना चाहते हैं कि ORM सांचा भी ऑब्जेक्ट-रोल मॉडलिंग से संबंधित है en.wikipedia.org/wiki/Object-role_modeling
O-9

1
यह एक उपयोगी प्रश्न है और शीर्ष उत्तर के वोट इसकी पुष्टि करते हैं। ओआरएम क्या है इसका एक संक्षिप्त विवरण के लिए राय की आवश्यकता नहीं है। सिर्फ इसलिए कि उपयोगकर्ता प्रश्न शुरू करने के लिए एक लिंक के लिए पूछता है जिसे ऑफ-टॉप किया गया है। मुझे लगता है कि यह मध्यस्थों की लगातार प्रतिक्रिया है।
नील

3
@NeilG एक बंद प्रश्न का अर्थ है कि प्रश्न ऑफ़-टॉपिक है। उत्तरों में उपयोगी जानकारी हो सकती है, लेकिन यह प्रश्न को विषय नहीं बनाती है। इसके अलावा, इसे हटाया नहीं जाएगा, यह यहां रहेगा, लेकिन हमें अभी भी एसओ को साफ और ऑन-टॉपिक रखने की आवश्यकता है, इसलिए यह अपने सबसे अच्छे रूप में कार्य करता है। तो, आपकी पहली टिप्पणी का उत्तर देने के लिए: यह एक उपयोगी प्रश्न नहीं है, उपयोगी उत्तर हैं।
M--

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

जवाबों:


483

परिचय

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

एक ORM लाइब्रेरी आपकी पसंद की भाषा में लिखी गई एक पूरी तरह से साधारण लाइब्रेरी है जो डेटा में हेरफेर करने के लिए आवश्यक कोड को एनकैप्सुलेट करती है, इसलिए आप SQL का उपयोग नहीं करते हैं; आप जिस वस्तु का उपयोग कर रहे हैं, उसी भाषा में किसी वस्तु के साथ सीधे इंटरैक्ट करते हैं।

उदाहरण के लिए, यहाँ एक छद्म भाषा के साथ पूरी तरह से काल्पनिक मामला है:

आपके पास एक पुस्तक वर्ग है, आप उन सभी पुस्तकों को पुनः प्राप्त करना चाहते हैं जिनमें से लेखक "लिनुस" है। मैन्युअल रूप से, आप ऐसा कुछ करेंगे:

book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
     book = new Book();
     book.setAuthor(row.get('author');
     book_list.add(book);
}

ORM लाइब्रेरी के साथ, यह इस तरह दिखेगा:

book_list = BookTable.query(author="Linus");

ओआरएम पुस्तकालय के माध्यम से यांत्रिक भाग का स्वचालित रूप से ध्यान रखा जाता है।

फायदा और नुकसान

ORM के उपयोग से बहुत समय बचता है क्योंकि:

  • DRY : आप अपने डेटा मॉडल को केवल एक ही स्थान पर लिखते हैं, और कोड को अपडेट, रखरखाव और पुन: उपयोग करना आसान है।
  • बहुत सारा सामान अपने आप हो जाता है, डेटाबेस हैंडलिंग से लेकर I18N तक
  • यह आपको MVC कोड लिखने के लिए मजबूर करता है , जो अंत में, आपके कोड को थोड़ा क्लीनर बनाता है।
  • आपको खराब-गठित SQL लिखना नहीं है (अधिकांश वेब प्रोग्रामर वास्तव में इसे चूसते हैं, क्योंकि SQL को "उप" भाषा की तरह माना जाता है, जब वास्तव में यह बहुत शक्तिशाली और जटिल होता है)।
  • साफ करना; तैयार किए गए बयानों या लेनदेन का उपयोग करना एक विधि को कॉल करने जितना आसान है।

ORM लाइब्रेरी का उपयोग अधिक लचीला है क्योंकि:

  • यह आपके प्राकृतिक तरीके से कोडिंग में फिट बैठता है (यह आपकी भाषा है!)।
  • यह DB सिस्टम को अमूर्त करता है, इसलिए आप जब चाहें इसे बदल सकते हैं।
  • मॉडल कमजोर रूप से बाकी एप्लिकेशन के लिए बाध्य है, इसलिए आप इसे बदल सकते हैं या कहीं और उपयोग कर सकते हैं।
  • यह आपको सिरदर्द के बिना डेटा वंशानुक्रम जैसे OOP अच्छाई का उपयोग करने देता है।

लेकिन ORM दर्द हो सकता है:

  • आपको इसे सीखना होगा, और ओआरएम पुस्तकालय हल्के उपकरण नहीं हैं;
  • आपको इसे सेट करना होगा। एक ही समस्या है।
  • सामान्य प्रश्नों के लिए प्रदर्शन ठीक है, लेकिन बड़ी परियोजनाओं के लिए एक SQL मास्टर हमेशा अपनी SQL के साथ बेहतर करेगा।
  • यह डीबी को अमूर्त करता है। हालांकि यह ठीक है कि अगर आपको पता है कि दृश्य के पीछे क्या हो रहा है, तो यह नए प्रोग्रामर के लिए एक जाल है जो बहुत लालची बयान लिख सकता है, जैसे कि एक forलूप में भारी हिट ।

ORM के बारे में कैसे जानें?

खैर, एक का उपयोग करें। आप जो भी ORM लाइब्रेरी चुनते हैं, वे सभी समान सिद्धांतों का उपयोग करते हैं। यहाँ बहुत सारे ORM पुस्तकालय हैं:

यदि आप वेब प्रोग्रामिंग में ORM लाइब्रेरी को आज़माना चाहते हैं, तो आप एक संपूर्ण फ्रेमवर्क स्टैक का उपयोग करके बेहतर होंगे:

  • सिम्फनी (PHP, प्रोपेल या डॉक्ट्रिन का उपयोग करके)।
  • Django (पायथन, एक आंतरिक ORM का उपयोग करके)।

जब तक आप कुछ सीखने की कोशिश नहीं कर रहे हैं, तब तक अपना खुद का ओआरएम लिखने की कोशिश न करें। यह काम का एक बड़ा टुकड़ा है, और पुराने लोगों ने विश्वसनीय बनने से पहले बहुत समय और काम किया।


50

किसी ने मुझे एक संक्षिप्त विवरण दे सकते हैं ...

ज़रूर।

ORM का अर्थ है "ऑब्जेक्ट टू रिलेशनेशनल मैपिंग" जहां

  • वस्तु हिस्सा आप अपने प्रोग्रामिंग भाषा के साथ उपयोग (इस मामले में अजगर) है

  • संबंधपरक हिस्सा एक रिलेशनल डेटाबेस प्रबंधक प्रणाली (एक डेटाबेस है कि) वहाँ डेटाबेस के अन्य प्रकार हैं, लेकिन सबसे लोकप्रिय संबंधपरक है (जैसा कि आप जानते टेबल, कॉलम, pk FK आदि जैसे ओरेकल MySQL, MS-SQL)

  • और अंत में मैपिंग हिस्सा वह जगह है जहां आप अपनी वस्तुओं और अपनी तालिकाओं के बीच एक पुल बनाते हैं।

उन अनुप्रयोगों में जहां आप ORM ढांचे का उपयोग नहीं करते हैं, आप इसे हाथ से करते हैं। ORM ढांचे का उपयोग करने से आप समाधान बनाने के लिए आवश्यक बॉयलरप्लेट को कम कर सकते हैं।

तो चलिए बताते हैं आपको ये वस्तु।

 class Employee:
      def __init__( self, name ): 
          self.__name = name

       def getName( self ):
           return self.__name

       #etc.

और मेज

   create table employee(
          name varcar(10),
          -- etc  
    )

ORM ढांचे का उपयोग करने से आप उस ऑब्जेक्ट को ऑटोमैटिक रूप से रिकॉर्ड कर सकते हैं और ऐसा कुछ लिख सकते हैं:

   emp = Employee("Ryan")

   orm.save( emp )

और कर्मचारी को डीबी में डाला गया है।

उफ़ यह संक्षिप्त नहीं था, लेकिन मुझे आशा है कि यह आपके द्वारा पढ़े गए अन्य लेखों को पकड़ने के लिए पर्याप्त सरल है।


17

एक ORM (ऑब्जेक्ट रिलेशनल मैपर) सॉफ्टवेयर का एक टुकड़ा / परत है जो आपके कोड ऑब्जेक्ट्स को आपके डेटाबेस में मैप करने में मदद करता है।

कुछ दूसरों की तुलना में अधिक पहलुओं को संभालते हैं ... लेकिन इसका उद्देश्य डेवलपर के कंधों से डेटा लेयर का कुछ वजन उठाना है।

यहां मार्टिन फॉलर (डेटा मैपर) की एक संक्षिप्त क्लिप है:

एंटरप्राइज एप्लिकेशन आर्किटेक्चर डेटा मैपर्स के पैटर्न


4

सभी योगों की तरह यह अस्पष्ट है, लेकिन मुझे लगता है कि उनका मतलब है वस्तु-संबंधपरक मैपर - अपनी आंखों को ढंकने का एक तरीका है और विश्वास करें कि कोई SQL नीचे नहीं है, बल्कि यह सभी वस्तुओं ;-) वास्तव में सच नहीं है, निश्चित रूप से, और समस्याओं के बिना नहीं - हमेशा रंगीन जेफ एटवुड ने ओआरएम को वियतनाम ;-) के वियतनाम के रूप में वर्णित किया है । लेकिन, अगर आप कम या कोई SQL जानते हैं, और एक बहुत ही सरल / छोटे पैमाने पर समस्या है, तो वे आपको समय बचा सकते हैं! -)


2

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.