कैसे एक बदसूरत डेटाबेस में गोता लगाने के लिए?


26

मुझे यकीन है कि आप में से कई एक बदसूरत डेटाबेस से निपट रहे हैं। आप जानते हैं, वह डेटाबेस जो बिल्कुल भी सामान्यीकृत नहीं है, वह डेटाबेस जहां आपको सबसे अधिक तुच्छ डेटा प्राप्त करने के लिए बड़ी दर्दनाक क्वेरी करनी पड़ती है, वह डेटाबेस जो उत्पादन में है और आप थोड़ा नहीं बदल सकते हैं ... आप जानते हैं , "वो वाला"।

मेरा सवाल यह है कि आप इससे कैसे निपटेंगे?

  • क्या आप एक नया डेटाबेस बनाने की कोशिश करते हैं?
  • तुम हार मान कर चले जाते हो?
  • आप क्या सलाह दे सकते हैं?

जवाबों:


29
  • पहली बात जो मैं एक इकाई संबंध संबंध (ईआरडी) बना रहा हूं । कभी-कभी आप केवल मेटाडेटा को कमांड-लाइन टूल के साथ वर्णित कर सकते हैं, लेकिन समय बचाने के लिए कुछ उपकरण हैं जो स्वचालित रूप से आरेख उत्पन्न कर सकते हैं।

  • दूसरा, प्रत्येक तालिका की जांच करें और सुनिश्चित करें कि मैं इसका क्या अर्थ संग्रहीत करता हूं।

  • तीसरा, प्रत्येक रिश्ते की जांच करें और सुनिश्चित करें कि मैं समझता हूं कि टेबल एक दूसरे से कैसे संबंधित हैं।

  • चौथा, कस्टम डेटा अखंडता प्रवर्तन या कैस्केडिंग संचालन को समझने के लिए कोई भी दृश्य या ट्रिगर पढ़ें।

  • पांचवां, किसी भी संग्रहीत प्रक्रियाओं को पढ़ें। यदि ऐसा हो तो SQL एक्सेस विशेषाधिकार भी पढ़ें।

  • छठा, डेटाबेस का उपयोग करने वाले एप्लिकेशन कोड के कुछ हिस्सों के माध्यम से पढ़ें। यहीं से कुछ अतिरिक्त व्यावसायिक नियम और डेटा अखंडता नियम लागू होते हैं।


अपडेट: मैंने एक अच्छा चेकलिस्ट के साथ एक दिलचस्प लेख " 9 थिंग्स टू डू व्हेन यू इनहार्ट ए डेटाबेस " पढ़ा ।

सारांश:

  1. बैकअप
  2. अनुसंधान (स्कीमा प्रलेखन चरणों जो मैं ऊपर उल्लेख करता हूं)
  3. पूर्व डेवलपर्स से बात करें
  4. एक बग डेटाबेस
  5. स्रोत कोड नियंत्रण
  6. उपयोगकर्ताओं और / या व्यापार मालिकों से बात करें
  7. कुछ चीजों को ठीक करके या कुछ वृद्धि करके उपयोगकर्ताओं के साथ विश्वसनीयता स्थापित करें
  8. विकास का माहौल बनाएं
  9. अप्रचलित वस्तुओं को गिरा दें

13

यह हमेशा संभव नहीं है, लेकिन कुछ स्थितियों में मेरे लिए काम करने वाली एक चीज को कुछ तालिकाओं को विचारों के साथ बदलना है। फिर आप नीचे दी गई तालिकाओं को साफ कर सकते हैं और कुछ मामलों में अंततः विचारों का निपटान कर सकते हैं। जैसा कि मैंने कहा, केवल कुछ मामलों में काम करता है।


ओरेकल मैटेरियलाइज्ड व्यूज में भी इससे मदद मिल सकती है।
लेह रिफ़ेल

9

डेटा शब्दकोश आपका मित्र है। इसके अलावा, Visio पर रिवर्स-इंजीनियरिंग टूल के साथ डेटाबेस को रिवर्स-इंजीनियरिंग करने का प्रयास करें और अपने स्वयं के आरेखों का निर्माण करें। क्योंकि रिवर्स इंजीनियरिंग इंटरैक्टिव है - आप आरेख बनाते हैं - यह एक डेटा शब्दकोश के माध्यम से पढ़ने की तुलना में बहुत अधिक आकर्षक है। प्रक्रिया की सक्रियता इसका फायदा है और मुझे ऐसा करने में काफी सुकून मिलता है।

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

Visio pro इतना महंगा नहीं है और Visio मॉडलिंग इंजन आपको कई आरेखों के बीच एक मॉडल साझा करने देता है। एक बोनस के रूप में, आप आरेखों में लापता विदेशी कुंजियों को जोड़ सकते हैं और आपको सिस्टम के अंत के लिए प्रलेखन का एक उपयोगी सेट मिलता है।


6

बिल कारविन के विचारों के अलावा, मैं उपयोगकर्ताओं से बात करने का सुझाव देता हूं - कभी-कभी उपयोगकर्ता इस बारे में काफी कुछ जानते हैं कि उनके डेटाबेस का उपयोग किस लिए किया जाता है, खासकर यदि वे इससे कोई रिपोर्टिंग करते हैं।


6

मैं एक विक्रेता के सॉफ़्टवेयर के लिए बहुत बदसूरत व्यवहार करता हूं, जो सुझाव देने से अलग है, मैं इसे बदलने के लिए बहुत कुछ नहीं कर सकता। मैं हमेशा चीजों को बदलने के लिए जोर दे रहा हूं, लेकिन चूंकि यह मेरे नियंत्रण से बाहर है, इसलिए मैं कबाड़ के साथ फंस गया हूं।

जिन चीजों का मैंने जल्दी उपयोग करना शुरू कर दिया है, उनमें से एक डेटाबेस में बिल्कुल कोई संबंध नहीं है, स्कीमा के लिए एक सामान्य नाम क्वेरी है:

--Find Column named like 'blah' in a specific table
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V') AND O.Name like '%TableName%'
ORDER by O.Name

या

--Find all Columns in DB with name like 'blah'    
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V')
ORDER by O.Name

चूंकि कुछ तालिकाओं में बहुत खराब रूप से नामित कॉलम हैं, और तालिका के बीच संबंध बनाने के लिए मैं जो उपयोग करने में सक्षम हो सकता हूं उसे खोजने के लिए बहुत से कॉलम देखने के लिए।

मुझे पता है कि यह सवाल के नए स्वरूप में ज्यादा मदद नहीं करता है, लेकिन यह खराब स्कीमा को समझने और समझने में बहुत मददगार है।


6

स्कीमा क्रॉलर मेरा डेटाबेस डिस्कवरी टूल है जिसमें कुछ विशेषताएं हैं जो एक बदसूरत डेटाबेस का पता लगाना आसान बनाती हैं। स्कीमा क्रॉलर में एक "grep" जैसी कार्यक्षमता है, जो आपको नियमित अभिव्यक्ति का उपयोग करके टेबल और कॉलम की खोज करने की अनुमति देता है। उदाहरण के लिए, आप उनके नाम के एक हिस्से के रूप में "ACCOUNT" के साथ तालिकाओं और स्तंभों की खोज कर सकते हैं, और वे शायद किसी तरह से संबंधित होंगे।

स्कीमा क्रॉलर विदेशी कुंजी रिश्तों को भी प्रभावित करता है, यहां तक ​​कि जहां कोई विदेशी कुंजी नहीं है। यह सामान्य नामकरण सम्मेलनों का उपयोग करके "कमजोर संघों" को खोजने के द्वारा करता है, जैसे कि टेबल हैं नाम आमतौर पर बहुवचन होते हैं, लेकिन स्तंभ नाम नहीं होते हैं, और स्तंभ नामों में _ID का उपसर्ग हो सकता है। आप इन अनुमानित संबंधों का उपयोग करके संबंधित तालिकाओं को पा सकते हैं।


5

निर्भर करता है कि यह कितना बदसूरत है, और आपके पास डिजाइन पर कितना नियंत्रण है और इसके साथ क्या बातचीत करता है। मुझे अपनी वर्तमान नौकरी में वर्षों में कई बदसूरत डेटाबेस के साथ बातचीत करनी है, और यहाँ बताया गया है कि मैंने उनके साथ कैसे निपटा है:

कर्मचारी डेटा

कर्मचारी डेटा रखने वाला डेटाबेस है। इसका विक्रेता डेटाबेस है, इसलिए मेरा इस पर कोई नियंत्रण नहीं है। (अन?) सौभाग्य से, मेरी इस तक सीधी पहुँच नहीं है। मुझे हर सुबह एक डीटीएस डंप मिलता है।

सर्वश्रेष्ठ मैं प्रबंधित करने में सक्षम हूं एक स्क्रिप्ट लिखना है जो सुबह के डंप से इनपुट को स्क्रब करता है (हाँ यह शब्द विकल्प जानबूझकर था) और इसे एक अधिक उपयोगी प्रारूप में माइग्रेट करें, और स्क्रब किए गए डेटा से काम करें।

यहां तक ​​कि अगर मैं इसे बदल सकता था, तो मैं शायद नहीं करूंगा - केवल इसलिए कि बड़ी संख्या में अन्य कार्यक्रम हैं जो इस पर भरोसा करते हैं कि यह जिस तरह से सेट किया जा रहा है, और मैं उनमें बदलाव को मजबूर नहीं कर सकता।

ऑनलाइन प्रशिक्षण डेटा

यह मेरे अपने डिजाइन की गड़बड़ी थी। मैंने इसे बिना किसी संरक्षक के कॉलेज से बाहर लाने में मदद करने के लिए बनाया ... मैं तब से इसे एक बार में थोड़ा ठीक कर रहा हूं। चूंकि मैं एकमात्र प्रोग्राम को नियंत्रित करता हूं जो डेटा तक पहुंचता है, जैसा कि मैं साइट के कुछ हिस्सों को अपग्रेड करता हूं, मैं डेटाबेस के कॉन्फ़िगरेशन को "अपग्रेड" करूंगा। मैं एक परिवर्तन पटकथा लिखूंगा और इसे सख्ती से कॉपी पर परीक्षण करूंगा ताकि मैं यह सुनिश्चित कर सकूं कि जो भी बदलाव किए जाने की जरूरत है वे सभी हो जाएं।

यह एक लंबी प्रक्रिया रही है, लेकिन यह अच्छी तरह से साथ आ रहा है।

कक्षा प्रशिक्षण डेटा

मेरा पायलट प्रोजेक्ट 3 अलग-अलग डेटाबेस से डेटा को एकीकृत कर रहा है, सभी मेरे पूर्ववर्ती द्वारा थोड़ा अलग तरीके से डिज़ाइन किए गए हैं ... जो एक नर्स शिक्षक थे जो एक प्रोग्रामिंग क्लास या दो ले गए थे।

यह एक और धीमी प्रक्रिया है। चूँकि मेरा उन कार्यक्रमों पर पूरा नियंत्रण है जो डेटा का उपयोग करते हैं, इसलिए मैं इसे ऑनलाइन प्रशिक्षण डेटा की तरह थोड़ा बदल रहा हूं।

रेट्रोस्पेक्ट में, यह स्वच्छ शुरू करने के लिए एक प्रमुख उम्मीदवार रहा होगा ... हिंद दृष्टि हमेशा 20/20 है।

अंततः...

मुझे नहीं पता कि यह कितना उपयोगी रहा है, और मैं अधिक विस्तार कर सकता हूं (एक बिंदु पर, कंपनी कानूनी यादा यादा और सभी)। अंतिम जवाब "यह निर्भर करता है"।


5

इसलिए आपके सभी उत्तरों को पढ़ने के बाद, मैं आपको मेरा जवाब देता हूं:

पहले मैं "मास्टर टेबल" के लिए देखता हूं, फिर, कलम और कागज के साथ, मैं अन्य तालिकाओं के साथ संबंधों को मैप करना शुरू कर देता हूं, उसके बाद, अगर देखने के लिए कुछ ऐप कोड हैं तो मैं कुछ कच्चे रेखाचित्र बनाना शुरू कर देता हूं कि डेटा कैसे बहता है।

जब मैं db काम करता हूँ तो मुझे एक अच्छी तस्वीर मिलती है, मैं सिर्फ उन जगहों की जाँच कर रहा हूँ जहाँ चीजों को बदलना है। बस।

मुझे पता नहीं क्यों लेकिन मैं किसी भी डेटाबेस मॉडलिंग सॉफ्टवेयर पर कागज को प्राथमिकता देता हूं।


5

बाहरी अनुप्रयोग द्वारा इसका उपयोग करने के कारण आप डेटाबेस "इंटरफ़ेस" को बदल नहीं सकते हैं। मुझे नहीं पता कि आप किस प्रकार का डेटाबेस (oracle, mysql, mssql) का उपयोग कर रहे हैं, लेकिन मैं इसे एक तरीके से देखता हूं:

  • डेटाबेस इंटरफेस को देखने और संग्रहीत प्रक्रियाओं के रूप में वस्तुओं के प्रकार का उपयोग करके।
  • कदम से कदम refactoring (सामान्य बनाने, क्षेत्र का नाम बदलने ...)
  • ग्राहक के आवेदन को बदलना (यदि आवश्यक हो)

दृश्य, संग्रहीत कार्यविधियाँ आंतरिक डेटाबेस संशोधनों (परिवर्तन) को छिपाएंगी।


4

डेटाबेस की संरचना की खोज के अलावा, मैंने पाया है कि डेटा गुणवत्ता को देखना भी महत्वपूर्ण है । एक बार जब आप प्रत्येक स्तंभ का अर्थ समझ जाते हैं, तो आप किसी भी ऐसे स्थान की तलाश कर सकते हैं जहाँ बहुत अधिक मूल्य हैं। जैसा कि आप डेटा से अधिक परिचित हो जाते हैं, आप यह भी जांच सकते हैं कि विभिन्न स्तंभों में मानों के बीच असंगतता कहाँ है।


4

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


4

यदि आप समस्या को उन समस्याओं में विभाजित कर सकते हैं जो आप अपने मस्तिष्क को चारों ओर लपेट सकते हैं, तो आप एक बार में उन पर हमला कर सकते हैं। कभी-कभी, बस यह जानते हुए भी कि एक मेज है जो सभी बगर्ड नहीं है, आपको काम करने के लिए एक समुद्र तट दे सकती है। इस तरह, आप अपने "क्लीन स्पॉट" को डेटाबेस में अधिक डेटाबेस को शामिल करने के लिए बढ़ाते हैं।


4

यदि आपके पास Visio (Microsoft Office का भाग) है, तो आप रिवर्स इंजीनियर फ़ंक्शन का प्रयास कर सकते हैं । यह सुंदर नहीं है, लेकिन यह कम से कम आपको एक शुरुआत देगा (तर्कसंगत गुलाब जैसे "वास्तविक" उपकरण की लागत के एक अंश पर)।



3

बिल ने एक उत्कृष्ट उत्तर दिया। मैं जोड़ूंगा कि मैं एक परीक्षण उपयोगकर्ता के रूप में उपयोगकर्ता इंटरफ़ेस में प्रवेश करूंगा और यह समझने की कोशिश करूंगा कि उपयोगकर्ता डेटा के साथ क्या करते हैं। यह आपको समझने में मदद करेगा कि कुछ संग्रहीत procs या डिज़ाइन के पीछे क्यों है। यह समझना कि डेटा का क्या अर्थ है और इसका उपयोग करने के लिए महत्वपूर्ण है एक डेटाबेस को समझना।

यदि डेटाबेस एक व्यावसायिक कार्य या विषय पर है, तो आप सामान्य रूप से अपरिचित हैं (जैसा कि यह उड़ान योजना करता है और आपने पहले केवल वित्तीय अनुप्रयोगों पर काम किया है), तो उपयोगकर्ताओं से विषय सामग्री पर कुछ पढ़ने के लिए कहें या लाइब्रेरी जाएं स्वयं या विषय वस्तु के बारे में इंटरनेट पर खोज करें। उपयोगकर्ताओं से पूछें कि क्या कानूनी या नियामक समस्याएं हैं जिनसे आपको अवगत होने की आवश्यकता है। इस विषय वस्तु की पृष्ठभूमि के बारे में फिर से समझा जा सकता है कि विषम डिजाइन विकल्प क्या प्रतीत होते हैं।


3

यदि यह एक विक्रेता डेटाबेस है (और मैंने कुछ बहुत बुरे लोगों को देखा है) तो आप इसके बारे में विक्रेता से शिकायत कर सकते हैं।

अनुप्रयोगों के लिए जो घर में बनाए जाते हैं, यह आमतौर पर डेवलपर्स के लिए कुछ शिक्षा लेता है और आप स्कीमा को बदलना शुरू कर सकते हैं ताकि प्रदर्शन में सुधार हो। इसमें समय लगता है, और यह आमतौर पर एक धीमी प्रक्रिया है।

मेरे अनुभव में एक नया डेटाबेस बनाना वास्तव में एक विकल्प नहीं है, क्योंकि सैकड़ों जीबी या टीबी डेटा को स्थानांतरित करना संभव नहीं है।

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


3

आह ... बदसूरत डेटाबेस, बड़े उद्यम अधिक विरासत डेटाबेस है जो हम पाएंगे।

  • प्रदर्शन के लिए ट्यूनिंग लोगों को ऐसे डेटाबेस के बारे में शिकायत नहीं होती है जब तक कि उन्हें प्रदर्शन के मुद्दे नहीं मिलते हैं। इसलिए हमारे संगठन में हम व्यक्तिगत प्रश्नों की पहचान करते हैं और उन्हें एक पैच के रूप में ठीक करते हैं।
  • डेटा को सीमित करना अब हम जानते हैं कि बदबूदार कचरा कहां है ताकि ऐसे डेटाबेस के माध्यम से डेटा प्रवाह से बचने की कोशिश करें। स्टेजिंग डेटाबेस बनाएं और पुराने डेटा को डेटा डंप के साथ शुरू करने और उपयोग करने के लिए अपने डेटा को उन टेबल पर रीडायरेक्ट करें।
  • डेटा जमाखोरी से बचें / पुराने डेटा को काटें जो किसी भी अधिक आवश्यक नहीं है। एक टीम होनी चाहिए जो यह तय करती है कि एक डेटाबेस में कितने समय के लिए डेटा आवश्यक है। उसके बाद आप इसे फ्लैट फ़ाइलों या यहां तक ​​कि टेप ड्राइव में स्थानांतरित कर सकते हैं।
  • चरण एक बार जब आप डेटा पुनर्निर्देशन और ट्रंकेशन प्राप्त कर सकते हैं। नए डेटाबेस का उपयोग शुरू करने के लिए अन्य टीमों को मनाएं।

यह हमेशा काम नहीं करता है, लेकिन अगर हम प्रयास नहीं करते हैं तो यह केवल बदतर होता जा रहा है। मैं अनुप्रयोगों के साथ डेटाबेस को फिर से डिज़ाइन करने की कोशिश करता हूं, यह मेरे लिए डेटा माइग्रेशन के साथ और अधिक काम जोड़ सकता है लेकिन प्रदर्शन एक जादू की चाल है जिसे मैं हमेशा अपनी टोपी से बाहर खींचता हूं।

अपनी बदसूरत लड़की दोस्त के साथ शुभकामनाएँ;)


2

देखें कि क्या आपके लिए नॉलेज ट्रांसफर सेशन का विकल्प उपलब्ध है और यदि ऐसा है तो इसका पूरा फायदा उठाएं।

इसके अलावा, कई DBMS ऐसे टूल के साथ आते हैं जो आपको डेटाबेस स्कीमा को कुछ उपयोगी जानकारी (यानी विदेशी कुंजी) के साथ आकर्षित / प्रिंट करने की अनुमति देते हैं।

इसके अतिरिक्त, (NXC से चुराया गया) आप Visio जैसे टूल के जरिए डेटाबेस को रिवर्स कर सकते हैं।


2

मैं एक क्वेरी प्रोफाइलर को फायर करना पसंद करता हूं और देखता हूं कि उत्पादन प्रणाली पर क्या होता है। मुझे कुछ आइडिया देता है कि कौन सी टेबल 'हॉट' हैं और उनके खिलाफ किस तरह के सवाल हैं।


1

सैंडबॉक्स सर्वर पर बैकअप कॉपी रखें और फिर टेस्ट क्वेरी लिखना और चलाना शुरू करें। मुझे हमेशा यह समझने में आसान एक जटिल प्रणाली मिलती है कि क्या मैं इस पर अपना हाथ रख सकता हूं और इसे तोड़ने की चिंता नहीं करता।

इसके अलावा, मुझे ब्राउज़र विंडो में डेली डब्ल्यूटीएफ खुला होना पसंद है । किसी और के डिजाइन को लेने में आमतौर पर बहुत सारे "मैं विश्वास नहीं कर सकता कि उन्होंने {डब्ल्यूटीएफ}" क्षणों को शामिल किया है, और यह कहीं जाने में मदद करता है जहां लोग आपके दर्द को समझते हैं।

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