JDBC-compliant एप्लिकेशन को अपने एसक्यूएल स्टेटमेंट को कहां और क्यों स्टोर करना चाहिए?
अब तक, मैं इन विकल्पों की पहचान करने में कामयाब रहा:
- व्यावसायिक वस्तुओं में हार्डकोड
- SQLJ खंडों में एंबेडेड
- डेटा एक्सेस ऑब्जेक्ट्स जैसे अलग-अलग कक्षाओं में इनकैप्सुलेट
- मेटाडेटा चालित (डेटा स्कीमा से ऑब्जेक्ट स्कीमा को कम करें - मेटाडेटा में उनके बीच की मैपिंग का वर्णन करें)
- बाहरी फ़ाइलें (उदाहरण के लिए गुण या संसाधन फ़ाइलें)
- संग्रहित प्रक्रियाएं
हर एक के लिए "पेशेवरों" और "विपक्ष" क्या हैं?
SQL कोड को "कोड" या "मेटाडेटा" माना जाना चाहिए?
क्या संग्रहीत प्रक्रियाओं का उपयोग केवल प्रदर्शन अनुकूलन के लिए किया जाना चाहिए या वे डेटाबेस संरचना का एक वैध अमूर्त हैं?
क्या प्रदर्शन एक महत्वपूर्ण कारक है? विक्रेता लॉक-इन के बारे में क्या ?
क्या बेहतर है - ढीली युग्मन या तंग युग्मन और क्यों?
EDITED: जवाब के लिए आप सभी को धन्यवाद - यहाँ एक सारांश है:
मेटाडाटा संचालित अर्थात वस्तु संबंधपरक मैपिंग (ओआरएम)
पेशेवरों:
- बहुत सार - DB सर्वर को मॉडल को बदलने की आवश्यकता के बिना स्विच किया जा सकता है
- वाइड-स्प्रेड - व्यावहारिक रूप से एक मानक
- SQL की मात्रा को कम करता है
- संसाधन फ़ाइलों में SQL संग्रहीत कर सकते हैं
- प्रदर्शन (आमतौर पर) स्वीकार्य है
- मेटाडेटा संचालित दृष्टिकोण
- (डेटाबेस) विक्रेता स्वतंत्रता
विपक्ष:
- SQL और सच्चे डेवलपर्स इरादों को छुपाता है
- DBA द्वारा समीक्षा की गई / परिवर्तित की जाने वाली SQL मुश्किल
- SQL को अभी भी विषम मामलों के लिए आवश्यक हो सकता है
- एक स्वामित्व क्वेरी भाषा जैसे HQL के उपयोग को मजबूर कर सकता है
- अनुकूलन (अमूर्तता) के लिए खुद को उधार नहीं देता है
- संदर्भात्मक अखंडता की कमी हो सकती है
- SQL ज्ञान की कमी या DB में कोड की देखभाल की कमी के लिए सदस्यता
- मूल डेटाबेस प्रदर्शन से कभी मेल न करें (भले ही वह करीब आए)
- मॉडल कोड डेटाबेस मॉडल के साथ बहुत तंग है
DAO परत में हार्डकोडेड / एनकैप्सुलेटेड
पेशेवरों:
- एसक्यूएल उन वस्तुओं में रखा जाता है जो डेटा तक पहुंचते हैं (एनकैप्सुलेशन)
- एसक्यूएल लिखना आसान है (विकास की गति)
- परिवर्तन की आवश्यकता होने पर SQL को ट्रैक करना आसान होता है
- सरल समाधान (कोई गन्दा वास्तुकला नहीं)
विपक्ष:
- SQL की DBA द्वारा समीक्षा / परिवर्तन नहीं किया जा सकता है
- एसक्यूएल डीबी-विशिष्ट बनने की संभावना है
- एसक्यूएल बनाए रखने के लिए कठिन हो सकता है
संग्रहित प्रक्रियाएं
पेशेवरों:
- SQL डेटाबेस में रखा (डेटा के करीब)
- SQL को DBMS द्वारा पार्स, संकलित और अनुकूलित किया गया है
- SQL DBA की समीक्षा / परिवर्तन के लिए आसान है
- नेटवर्क ट्रैफ़िक को कम करता है
- सुरक्षा बढ़ा दी
विपक्ष:
- SQL डेटाबेस (विक्रेता लॉक-इन) से बंधा हुआ है
- SQL कोड बनाए रखने के लिए कठिन है
बाहरी फ़ाइलें (उदाहरण के लिए गुण या संसाधन फ़ाइलें)
पेशेवरों
- SQL को एप्लिकेशन के पुनर्निर्माण की आवश्यकता के बिना बदला जा सकता है
- अनुप्रयोग व्यवसाय तर्क से SQL तर्क को कम करता है
- सभी एसक्यूएल बयानों के केंद्रीय भंडार - बनाए रखने के लिए आसान
- समझने में आसान
विपक्ष:
- SQL कोड अप्राप्य हो सकता है
- (सिंटैक्स) त्रुटियों के लिए SQL कोड की जाँच करने के लिए कठिन
SQLJ खंडों में एंबेडेड
पेशेवरों:
- बेहतर वाक्यविन्यास जाँच
विपक्ष:
- जावा के बहुत करीब है
- JDBC की तुलना में कम प्रदर्शन
- गतिशील प्रश्नों का अभाव
- इतना लोकप्रिय नहीं है