मैं इस प्रश्न के उत्तर की संरचना करने के लिए कैसे कर रहा हूँ, क्योंकि यह मूल रूप से पोस्ट किया गया था। यह मुश्किल है क्योंकि VS2010 के लिए उपकरण की विशेषताओं और लाभों के बारे में वर्णन नहीं किया गया है। यह पाठक को डेटाबेस विकास के लिए उनके दृष्टिकोण में एक मौलिक बदलाव करने के लिए आश्वस्त करने के बारे में है। आसान नहीं है।
अनुभवी डेटाबेस पेशेवरों के इस सवाल के जवाब हैं, जिसमें डीबीए, डेवलपर / डीबीए और ओएलटीपी और डेटा वेयरहाउसिंग के साथ एक पृष्ठभूमि मिश्रण है। डेटाबेस डेवलपमेंट के हर पहलू के लिए एक बार में बैठना मेरे लिए व्यवहार्य नहीं है, इसलिए मैं एक विशेष परिदृश्य के लिए प्रयास करने जा रहा हूं।
यदि आपका प्रोजेक्ट इन मानदंडों को पूरा करता है, तो मुझे लगता है कि VS2010 के लिए एक सम्मोहक मामला है:
- आपकी टीम अनुप्रयोग विकास के लिए VS2010 का उपयोग कर रही है।
- आपकी टीम स्रोत नियंत्रण और निर्माण प्रबंधन के लिए TFS का उपयोग कर रही है।
- आपका डेटाबेस SQL सर्वर है।
- आपकी टीम के पास पहले से ही है, या वीएस स्वचालित परीक्षण में रुचि रखता है।
यदि आप डेटाबेस विकास के लिए VS2010 का मूल्यांकन कर रहे हैं, तो आपकी बाइबल विजुअल स्टूडियो एएलएम रेंजर्स से विजुअल स्टूडियो डेटाबेस गाइड होगी । कोई भी उद्धरण जो संदर्भ नहीं है, इस दस्तावेज़ से होगा।
फिर हम चले ...
डेटाबेस विकास प्रक्रिया अनुप्रयोग विकास से अलग क्यों है?
डेटा। यदि यह उस pesky डेटा के लिए नहीं था, तो डेटाबेस विकास एक कामचोर होगा। हम हर रिलीज पर बस सबकुछ DROP कर सकते थे और इस तकलीफदेह बदलाव को भूल सकते थे।
डेटा का अस्तित्व डेटाबेस परिवर्तन प्रक्रिया को जटिल करता है क्योंकि डेटा को अक्सर माइग्रेट, ट्रांसफ़ॉर्म या रीलोड किया जाता है जब परिवर्तन एप्लिकेशन डेवलपमेंट प्रयासों द्वारा पेश किए जाते हैं जो डेटाबेस के टेबल या अन्य डेटा स्कीमा के आकार को प्रभावित करते हैं। इस परिवर्तन प्रक्रिया के दौरान, उत्पादन गुणवत्ता डेटा और परिचालन स्थिति को उन परिवर्तनों से बचाया जाना चाहिए जो संगठन के लिए इसकी अखंडता, मूल्य और उपयोगिता को खतरे में डाल सकते हैं।
एसएसएमएस में क्या गलत है?
इसे किसी कारण से SQL सर्वर प्रबंधन स्टूडियो कहा जाता है। एक स्वसंपूर्ण उपकरण के रूप में, अपने विकास के प्रयासों का प्रबंधन करना अव्यावहारिक है यदि आप स्वीकृत सर्वोत्तम प्रथाओं का पालन करने जा रहे हैं।
अकेले लिपियों के साथ, अपने विकास के लिए स्थापित स्रोत नियंत्रण प्रथाओं को सार्थक रूप से लागू करने के लिए आपको दोनों ऑब्जेक्ट परिभाषाएँ (जैसे एक निर्माणाधीन स्क्रिप्ट) को बनाए रखना होगा और स्क्रिप्ट बदलना (जैसे अन्य तालिका) और यह सुनिश्चित करने के लिए कड़ी मेहनत करें कि वे सिंक्रनाइज़ रहें।
एक टेबल में बदलाव के लिए संस्करणों की श्रृंखला बहुत जल्दी बहुत ही सुंदर हो जाती है। एक बहुत ही सरल उदाहरण:
-- Version 1
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20))
-- Version 2
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(50))
-- Version 3
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(100))
संस्करण 3 से, डेटाबेस परिवर्तन स्क्रिप्ट में शामिल हैं:
ALTER TABLE dbo.Widget ADD Description VARCHAR(50)
ALTER TABLE dbo.Widget ALTER COLUMN Description VARCHAR(100)
यदि इस डेटाबेस का लाइव संस्करण संस्करण 1 है और हमारी अगली रिलीज़ संस्करण 3 है, तो नीचे दी गई स्क्रिप्ट वह सब होगी जिसकी आवश्यकता थी लेकिन इसके बजाय दोनों कथन निष्पादित किए जाएंगे।
ALTER TABLE dbo.Widget ADD Description VARCHAR(100)
5 सप्ताह के 4 साल स्प्रिंट कुछ मनोरंजक संस्करण स्क्रिप्ट में जुड़ते हैं और तैनाती समय पर प्रभाव को कम करने के लिए अतिरिक्त मैन-हैंडलिंग की आवश्यकता होती है।
तो क्या SSMS में कुछ गड़बड़ है? नहीं, यह SQL सर्वर को प्रशासित और प्रबंधित करने के लिए इसके अच्छे के लिए अच्छा है। यह क्या करने का दिखावा भी नहीं करता है एक डेटाबेस डेवलपर की सहायता से (कई बार) परिवर्तन को प्रबंधित करने का बहुत जटिल कार्य।
यदि आप स्रोत से डेटाबेस के हर संस्करण का निर्माण नहीं कर सकते हैं और किसी भी भविष्य के संस्करण में अपग्रेड नहीं कर सकते हैं, तो आपका स्रोत नियंत्रण टूट जाता है। यदि आपको ऐसा नहीं लगता है, तो एरिक सिंक से पूछें ।
SSMS + <- स्कीमा तुलना टूल डालें -> के बारे में क्या?
यह निश्चित रूप से सही दिशा में एक कदम है और लिपियों को बनाए रखने के लिए आवश्यक मैनुअल प्रयास से बहुत दूर ले जाता है। लेकिन (और यह एक बड़ा लेकिन) है, आमतौर पर इसमें मैनुअल कदम शामिल होते हैं।
लोकप्रिय स्कीमा तुलना उपकरण पूरी तरह से स्वचालित हो सकते हैं और निर्माण प्रक्रिया में एकीकृत हो सकते हैं। हालांकि, मेरे अनुभव में अधिक सामान्य अभ्यास मैन्युअल रूप से चलाने के लिए तुलना के लिए है, जिसके परिणामस्वरूप स्क्रिप्ट नेत्रगोलक, स्रोत नियंत्रण की जाँच की जाती है, फिर मैन्युअल रूप से लागू करने के लिए निष्पादित किया जाता है। अच्छा नही।
किसी भी समय हम गिरने वाले मनुष्यों को निर्माण या तैनाती की प्रक्रिया में शामिल होना पड़ता है, हम जोखिम का परिचय देते हैं और हम इस प्रक्रिया को गैर-दोहराने योग्य बनाते हैं।
यदि आप और आपकी टीम कुछ ऐसे हैं जो पूरी तरह से स्वचालित स्कीमा की तुलना और परिनियोजन करते हैं, तो आपसे नफरत करता है! आप लोग उन लाभों के लिए खुले रहने की सबसे अधिक संभावना है जो VS2010 के रूप में प्रस्तुत करना है:
- आपने पहले ही स्वीकार कर लिया है कि मैन्युअल चरण खतरनाक हैं।
- आप स्वचालन का मूल्य देखते हैं।
- आप इसे काम करने के लिए आवश्यक समय का निवेश करने को तैयार हैं।
यदि आप किसी एकल चरण में बिल्ड नहीं बना सकते हैं, या एकल चरण में परिनियोजित नहीं कर सकते हैं, तो आपका विकास और परिनियोजन प्रक्रिया टूट गई है। अगर आपको ऐसा नहीं लगता है, तो जोएल स्पोल्स्की से पूछें ।
VS2010 क्यों?
सवाल @NickChammas हत्यारा सुविधाओं है कि क्यों VS2010 डेटाबेस विकास के लिए एक खेल परिवर्तक है प्रदर्शित करता है के लिए देख रहा है। मुझे नहीं लगता कि मैं उस आधार पर केस कर सकता हूं।
शायद हास्यपूर्ण रूप से, जहां अन्य लोगों को इस उपकरण की खामियां दिखाई देती हैं, मुझे गोद लेने के मजबूत कारण दिखाई देते हैं:
- आपको अपना दृष्टिकोण बदलना होगा।
- आपको और आपकी टीम को एक अलग तरीके से काम करने के लिए मजबूर किया जाएगा।
- आपको प्रत्येक परिवर्तन के प्रभाव का मूल्यांकन करना होगा, लंबाई में, विस्तार से।
- आपको हर बदलाव को आदर्श बनाने की दिशा में निर्देशित किया जाएगा ।
यदि आप किसी प्रोजेक्ट पर एकमात्र DBA हैं, तो डेटाबेस में सभी परिवर्तनों को प्रबंधित करते हुए, इस तर्क को बेतुकी सीमा पर हास्यास्पद लगना चाहिए। अगर आपको लगता है कि @BrentOzar के पास एक बिंदु है और नए नियमों में से एक यह है कि हर कोई डीबीए है , तो आपको डेटाबेस परिवर्तन को नियंत्रित करने की आवश्यकता है जिस तरह से टीम के प्रत्येक डेवलपर के साथ काम कर सकते हैं।
डेटाबेस प्रोजेक्ट्स को अपनाने के लिए कुछ डेवलपर्स के लिए एक मानसिक बदलाव ( पुरानी आदतों को तोड़ना मुश्किल होता है ) या कम से कम प्रक्रिया या बदलाव की आवश्यकता हो सकती है । जिन डेवलपर्स ने डेटाबेस एप्लिकेशन विकसित किए हैं,
जहां उत्पादन डेटाबेस डेटाबेस के वर्तमान संस्करण का प्रतिनिधित्व करता है, को स्रोत कोड आधारित दृष्टिकोण अपनाने की आवश्यकता होगी जहां स्रोत कोड वाहन बन जाता है जिसमें डेटाबेस में परिवर्तन किया जाता है । Visual Studio डेटाबेस प्रोजेक्ट्स में, प्रोजेक्ट और स्रोत कोड डेटाबेस स्कीमा के लिए "सत्य का एक संस्करण" है और SCM वर्कफ़्लोज़ का उपयोग करके प्रबंधित किया जाता है, जो संभवतः पहले से ही डेवलपर या संगठन द्वारा उनके एप्लिकेशन स्टैक के अन्य भागों के लिए उपयोग किया जा रहा है। डेटा के लिए, उत्पादन डेटाबेस इसका "सत्य का एक संस्करण" बना हुआ है जैसा कि यह होना चाहिए।
हम मौलिक बदलाव पर पहुंचे हैं जो डेटाबेस विकास के लिए VS2010 दृष्टिकोण को सफलतापूर्वक अपनाने के लिए आवश्यक है…
अपने डेटाबेस को कोड के रूप में मानें
लाइव डेटाबेस को और अधिक नहीं बदलना। प्रत्येक डेटाबेस परिवर्तन अनुप्रयोग परिवर्तन के समान पैटर्न का पालन करेगा। स्रोत, निर्माण, तैनाती को संशोधित करें। यह Microsoft से दिशा का अस्थायी परिवर्तन नहीं है, यह SQL सर्वर के लिए भविष्य है । कोड के रूप में डेटाबेस यहाँ रहने के लिए है।
डेटाबेस डेवलपर एप्लिकेशन के संस्करण के लिए ऑब्जेक्ट के आकार को परिभाषित करता है, न कि डेटाबेस ऑब्जेक्ट में मौजूदा ऑब्जेक्ट को वांछित आकार में म्यूट करने का तरीका। आप खुद से पूछ सकते हैं: यह कैसे एक डेटाबेस के खिलाफ तैनात किया जाता है जिसमें पहले से ही ग्राहक तालिका है? यह वह जगह है जहाँ तैनाती इंजन खेलने के लिए आता है। जैसा कि पहले उल्लेख किया गया है, परिनियोजन इंजन आपके स्कीमा का संकलित संस्करण लेगा और इसकी तुलना डेटाबेस परिनियोजन लक्ष्य से करेगा। अलग-अलग इंजन परियोजना से आपके द्वारा तैनात किए जा रहे संस्करण से मिलान करने के लिए लक्ष्य स्कीमा को अद्यतन करने के लिए आवश्यक स्क्रिप्ट का उत्पादन करेगा।
हां, ऐसे अन्य उपकरण हैं जो एक समान पैटर्न का पालन करते हैं और मेरे जवाब पर रखी बाधाओं के बाहर की परियोजनाओं के लिए, वे समान विचार के लायक हैं। लेकिन, यदि आप Visual Studio और Team Foundation Server ALM के साथ काम कर रहे हैं, तो मुझे नहीं लगता कि वे प्रतिस्पर्धा कर सकते हैं।
VS2010 डेटाबेस प्रोजेक्ट्स में क्या गलत है?
- वे परिपूर्ण नहीं हैं । लेकिन अगर आप सीमाओं और समस्या क्षेत्रों से अवगत हैं, तो आप उन्हें हल कर सकते हैं।
- जटिल डेटा आंदोलनों को अभी भी देखभाल और ध्यान देने की आवश्यकता है, लेकिन पूर्व / पोस्ट परिनियोजन स्क्रिप्ट के साथ पूरा किया जाता है।
संपादित करें: तो आपकी बात क्या है?
@AndrewBickerton ने एक टिप्पणी में उल्लेख किया है कि मैंने मूल प्रश्न का उत्तर नहीं दिया है, इसलिए मैं कोशिश करूंगा और "अपने डेटाबेस विकास के लिए SSMS पर विज़ुअल स्टूडियो 2010 का उपयोग क्यों करूं?" यहाँ।
- SSMS डेटाबेस डेवलपमेंट टूल नहीं है। हां आप SSMS के साथ TSQL विकसित कर सकते हैं लेकिन यह VS2010 की समृद्ध आईडीई सुविधाएँ प्रदान नहीं करता है।
- VS2010 आपके डेटाबेस को कोड के रूप में मानने के लिए एक ढांचा प्रदान करता है।
- VS2010 आपके डेटाबेस कोड में स्थिर कोड विश्लेषण लाता है ।
- VS2010 आपको बिल्ड-परिनियोजन-परीक्षण चक्र को पूरी तरह से स्वचालित करने के लिए उपकरण प्रदान करता है।
- SQL2012 और Visual Studio vNext डेटाबेस प्रोजेक्ट्स की क्षमताओं का विस्तार करते हैं। अब VS2010 से परिचित हो जाएं और आपको अगली पीढ़ी के डेटाबेस डेवलपमेंट टूल्स पर एक हेड स्टार्ट मिल जाए।