क्या संस्करण नियंत्रण के तरीके लोगों को डेटाबेस स्कीमा परिवर्तन को ट्रैक करने में मदद करते हैं?
क्या संस्करण नियंत्रण के तरीके लोगों को डेटाबेस स्कीमा परिवर्तन को ट्रैक करने में मदद करते हैं?
जवाबों:
बस कुछ मिनट पहले मैं यह जाँच कर रहा था: एक तालिका जो एक डेटाबेस के साथ सभी परियोजनाओं में मौजूद होनी चाहिए , व्यवहार में लाना सरल लगता है, इसे देखें:
इसे स्कीमा_वर्सन (या माइग्रेशन, या जो भी आपको सूट करता है) कहा जाता है और इसका उद्देश्य डेटाबेस में संरचनात्मक या डेटा परिवर्तनों का ट्रैक रखना है। एक संभावित संरचना (MySQL में उदाहरण) है:
create table schema_version ( `when` timestamp not null default CURRENT_TIMESTAMP, `key` varchar(256) not null, `extra` varchar(256), primary key (`key`) ) ENGINE=InnoDB;
स्कीमा_वर्सन (
key
,extra
) मान ('001', 'स्कीमा संस्करण') में डालें ;चाहे आप इस तालिका को प्रोजेक्ट की शुरुआत से जोड़ लें या आपके द्वारा स्टेजिंग या प्रोडक्शन सर्वर पर पहला संस्करण तैनात करने के बाद ही आप पर निर्भर है।
जब भी आपको डेटाबेस संरचना को बदलने या डेटा माइग्रेशन करने के लिए किसी SQL स्क्रिप्ट को निष्पादित करने की आवश्यकता होती है तो आपको उस तालिका में एक पंक्ति जोड़नी चाहिए। और उस स्क्रिप्ट के भीख या अंत में एक सम्मिलित विवरण के माध्यम से ऐसा करें (जो परियोजना के कोड भंडार के लिए प्रतिबद्ध है)।
...
मुझे लगता है कि आपके निर्माण प्रक्रिया के हिस्से के रूप में डेटाबेस को उत्पन्न करने के लिए सबसे अच्छी विधि है । सभी लिपियों को बाकी कोड के साथ स्रोत नियंत्रण में रखें, और हर कोई अपने स्वयं के वातावरण के लिए जिम्मेदार है।
ऐसा करने में, RedGate के पास SSMS और SQL की तुलना में स्रोत नियंत्रण को एकीकृत करने के लिए एक उपकरण है जो MS SQL स्कीमा की तुलना / सिंक्रनाइज़ेशन के लिए उपयोगी है। Visual Studio डेटाबेस संस्करण में एक अंतर्निहित स्कीमा तुलना उपकरण भी है ।
एक और SO प्रश्न मुझे माइग्रेटर डॉट नेट की ओर ले जाता है जिसे मैं अपने प्रचुर खाली समय के दौरान जांच शुरू करने जा रहा हूं। यह एक अच्छी विधि की तरह दिखता है, लेकिन यह उस समय / ओवरहेड निवेश से अधिक हो सकता है, जो आप बनाने के इच्छुक हैं।
eiefai ने पहले ही एक तालिका का उल्लेख किया है जो एक डेटाबेस के साथ सभी परियोजनाओं में मौजूद होना चाहिए । यह एक महान ब्लॉग पोस्ट है, लेकिन IMO यह केवल डेटाबेस संशोधन नियंत्रण के लिए काम करने वाले समाधान के रास्ते का हिस्सा है। मुझे लगता है कि वास्तविक दुनिया में इस सवाल का "जवाब" देने का कोई प्रयास वीसीएस और डेटाबेस के बारे में कुछ अन्य जानकारी पर विचार करने की आवश्यकता है:
मुझे लगता है कि इस सवाल का जवाब देने के लिए कुछ अलग-अलग कोण हैं। मेरा मानना है कि "टूल-फर्स्ट" कोण, प्लेटफॉर्म और व्यक्तिगत पसंद के आधार पर अलग-अलग है। बिंदु में मामला: मैं एमएस विज़ुअल स्टूडियो में एक डेटाबेस प्रोजेक्ट का उपयोग कर रहा हूं, लेकिन मुझे यकीन नहीं है कि यह MySQL के लिए एक महान समाधान है। मैं ऐसे लोगों को भी जानता हूं जो रेडगेट, इरविन, एम्बरकैडेरो, आदि से अपने पसंदीदा टूल पर बहुत अधिक बिकते हैं।
इस प्रश्न के लिए एक "प्रक्रिया-प्रथम" कोण भी है, जो (बाद में) इस साइट पर बाद के प्रश्नों में फिर से दर्शाया जाएगा। इस प्रक्रिया में कीस्टोन आपके स्कीमा को स्रोत नियंत्रण और प्रबंध परिवर्तनों के तहत प्राप्त कर रहे हैं, ताकि आप "एक्स" से संस्करण "वाई" के लिए मांग पर बहुत अधिक स्कीमा परिवर्तन लागू कर सकें।
इस विषय का एक निश्चित उत्तर एक किताब की तरह लगने वाला है, इसलिए यह संभवत: एक को संदर्भित करके शुरू करने लायक है: रेडगेट ने हाल ही में " रेड गेट गाइड टू एसक्यूएल सर्वर टीम-आधारित विकास " नामक एक मुफ्त ईबुक प्रकाशित किया , और वहीं वहाँ बहुत बहस करने के लिए, यह बहस शुरू करने के लिए एक बहुत अच्छी जगह है, IMO। नाम के विपरीत, इस पुस्तक की अधिकांश सामग्री किसी भी डीबी (सिर्फ एसक्यूएल सर्वर) और किसी भी उपकरण सेट (केवल रेडगेट नहीं) पर लागू करने के लिए पर्याप्त है। यदि आपने इसे पहले से नहीं देखा है, तो यह निश्चित रूप से एक स्किम के लायक है, कम से कम।
अंत में, यह स्टैकओवरफ़्लो से "विरासत जवाब" में जोड़ने के लायक है ।
SchemaCrawler डेटाबेस स्कीमा ऑब्जेक्ट के सभी के साथ एक टेक्स्ट फ़ाइल बनाने के लिए मेरा टूल है। मैंने इस पाठ आउटपुट को मानव-पठनीय, साथ ही साथ अन्य सर्वर से समान आउटपुट के विरुद्ध भिन्न-सक्षम होने के लिए डिज़ाइन किया है।
व्यवहार में, मैंने जो पाया है वह यह है कि डेटाबेस स्कीमा की एक टेक्स्ट फाइल का आउटपुट उपयोगी होता है, जब बिल्ड के हिस्से के रूप में किया जाता है। इस तरह, आप अपने स्रोत कोड नियंत्रण प्रणाली में पाठ फ़ाइल की जांच कर सकते हैं, और आपके स्कीमा समय के साथ कैसे विकसित हुए, इसका एक संस्करण इतिहास है। स्कीमा क्रॉलर को कमांड-लाइन से इसे भी स्वचालित करने के लिए डिज़ाइन किया गया है।