यह प्रश्न पहले से ही SO पर कई बार पूछा जा चुका है, लेकिन दिलचस्प बात यह है कि सर्वोत्तम उत्तर के बारे में कोई सहमति नहीं है। तो यहां विभिन्न लोगों द्वारा सुझाए गए मुख्य विकल्पों का सारांश दिया गया है (बिना किसी विशेष क्रम के):
- इसे मास्टर डेटाबेस में
sp_
के साथ रखें उपसर्ग ताकि SQL सर्वर इसे पहले वहां ढूंढे - इसे मॉडल डेटाबेस में रखें, ताकि यह स्वचालित रूप से सभी नए डीबी में जुड़ जाए
- केवल 'वैश्विक' प्रक्रियाओं (और अन्य वस्तुओं) के लिए एक डेटाबेस बनाएं और तीन-भाग नामकरण का उपयोग करके उन्हें कॉल करें
- 3 के रूप में, लेकिन अन्य डेटाबेस में समानार्थी शब्द बनाएं ताकि आपको तीन-भाग के नामकरण की आवश्यकता न हो
- एकाधिक डेटाबेस में परिनियोजन को प्रबंधित करने के लिए वाणिज्यिक या स्व-विकसित टूल का उपयोग करें
- 5 के रूप में, लेकिन एक डेटाबेस में परिनियोजित करें, फिर
diff
डेटाबेस और अन्य डेटाबेस पर परिनियोजित करने के लिए भिन्न स्क्रिप्ट लागू करें
मेरी राय में, 1 एक गैर-स्टार्टर है क्योंकि Microsoft स्पष्ट रूप से कहता है आपको मास्टर डेटाबेस में ऑब्जेक्ट नहीं बनाना चाहिए। 2 अच्छा लगता है लेकिन व्यवहार में डेटाबेस को स्क्रैच (YMMV) से बनाए जाने की तुलना में अधिक बार पुनर्स्थापित या कॉपी किया जाता है, इसलिए मॉडल का उपयोग करना अविश्वसनीय है।
3 और 4 तालिकाओं और विचारों के लिए अच्छे हैं, लेकिन निष्पादन संदर्भ संग्रहीत कार्यविधियों और कार्यों के लिए एक समस्या हो सकती है। लेकिन यह प्रक्रियाओं में तर्क पर निर्भर करता है और यह आपके मामले में व्यावहारिक हो सकता है।
लेकिन 1-4 सभी में संभावित समस्या है कि यदि आपके पास केवल एक वस्तु है, तो आपके पास उस वस्तु का केवल एक संस्करण है, और परीक्षण के लिए या अलग-अलग ग्राहकों के लिए अलग-अलग डीबी में अलग-अलग संस्करण उपलब्ध होना अक्सर उपयोगी होता है।
5 और 6 एक ही विषय पर भिन्नताएं हैं और मुझे व्यक्तिगत रूप से यह सबसे अच्छा तरीका लगता है क्योंकि परिनियोजन एक समस्या है जिसे आपको वैसे भी हल करना है, इसलिए आप इसे भी कर सकते हैं और सुनिश्चित कर सकते हैं कि आपके पास ज्ञान, उपकरण और प्रक्रियाएं हैं। नियंत्रित, स्वचालित तरीके से किसी भी डेटाबेस में कोड को साफ और शीघ्रता से परिनियोजित करने में सक्षम होने के लिए।