मैं डेटाबेस कॉलम को डुप्लिकेट करने के खिलाफ कैसे यकीन कर सकता हूं?


47

मैंने एक नए संगठन में काम करना शुरू कर दिया है और डेटाबेस में जो एक पैटर्न मैं देख रहा हूं, वह व्यापार विश्लेषकों के लिए लेखन प्रश्नों को आसान बनाने के लिए फ़ील्ड को डुप्लिकेट कर रहा है। हम Django और उसके ORM का उपयोग कर रहे हैं।

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

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


2
"आरामदायक लेखन जॉइन नहीं होना" का क्या अर्थ है? वे कैसे समझाते हैं?
पटकथा

9
क्या ये लोग आपके लिए काम करते हैं? क्या आप उनके पर्यवेक्षक हैं? आपके अधिकांश औचित्य यहां देखे जा सकते हैं: en.wikipedia.org/wiki/Database_normalization । हां, उन्हें जोड़ का उपयोग करने में बेहतर होने की आवश्यकता है।
रॉबर्ट हार्वे

1
क्या आपने साहित्य को देखा है कि सामान्यीकरण क्यों वांछनीय है?
नाथन तुग्गी

17
उन विचारों को जोड़ना नहीं होगा जो आंतरिक रूप से लेखन प्रश्नों को आसान बनाते हैं? आप उन्हें विकल्प के रूप में सुझाव दे सकते हैं।
कोडइन्चोस

1
क्या आपने अपने साथियों और वरिष्ठों के साथ यह (विनम्रता से) संवाद किया? उनके औचित्य क्या हैं, वे क्या विचार कर रहे हैं? इसके कई कारण हो सकते हैं कि यह एक अच्छा विचार क्यों हो सकता है (भले ही आप कहते हैं कि "प्रदर्शन का कारण नहीं है", आप उस समर्थन का क्या सबूत देते हैं?)। उन पर बहुत अधिक आलसी और / या कठोर होने का आरोप लगाने से पहले, क्या आपने डिजाइन करने के तरीके के बारे में उन कारणों पर विचार (और पूछा) किया है? हो सकता है कि राइट्स (एनालिटिक्स हैवी डीबी) की तुलना में कहीं अधिक पढ़ें ट्रैकिंग बदलें? ऐतिहासिक आंकड़ा? सभी से पूछें - किसी को वास्तविक कारण पता चल सकता है ।
लुआण

जवाबों:


128

विसंगतियों को कम करने के लिए आपका परिचालन डेटाबेस अत्यधिक सामान्य होना चाहिए ।

विश्लेषण को आसान बनाने के लिए आपके विश्लेषणात्मक डेटाबेस (वेयरहाउस) को अत्यधिक विकृत किया जाना चाहिए।

यदि आपके पास एक अलग विश्लेषणात्मक डेटाबेस नहीं है, तो आपको कुछ अत्यधिक असामान्य [भौतिक] विचार करने चाहिए।

यदि आप अपने वरिष्ठ व्यवसाय विश्लेषकों / प्रबंधकों को एक सरल विश्लेषण के लिए बहुत से जुड़ने के लिए कहते हैं, तो ठीक है, आप निकाल सकते हैं।

एजाइल डेटा वेयरहाउस डिज़ाइन एक अच्छी किताब है

मेरे त्वरित n 'गंदे डेटा वेयरहाउस युक्तियाँ यहां देखें


9
यह जाने का सही तरीका है।
लीख

6
+1 यह ठीक वैसा ही है जैसा कि दृश्य के लिए होता है: एक सामान्यीकृत डेटाबेस पर एक असमान दृश्य की अनुमति।
नजल्ल

4
बिल्कुल सही है, लेकिन मुझे लगता है कि "कम विसंगतियों" पर अधिक जोर दिया जाना चाहिए, क्योंकि यह सवाल का प्राथमिक उत्तर है। सबसे आम (केवल?) विसंगति जिसे आप डेटा डुप्लीकेशन / डीमोनेटाइजेशन के साथ देखेंगे वह यह है कि कॉलम किसी भी समय विरोधाभासी डेटा के साथ आबाद हो जाएंगे, आपको यह जानने का कोई तरीका नहीं है कि वास्तविक डेटा क्या माना जाता है और नहीं यह निर्धारित करने का तरीका कि क्या गलत हुआ। बाद वाले को परिवर्तनों के बड़े पैमाने पर नज़र रखने के साथ कम किया जा सकता है, लेकिन यह समस्या से गुजरने और खोजने के लिए सस्ता या त्वरित नहीं होगा। पूरी तरह से समस्या से बचने के लिए अधिक लागत प्रभावी है।
jpmc26

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

1
@Panzercrisis लेन-देन का एकमात्र तरीका "निहित" है यदि आपके पास अपनी क्वेरी के अंत में एक स्वचालित प्रतिबद्धता है। यह आमतौर पर उत्पादन डेटाबेस के लिए मामला नहीं होना चाहिए। एक आवेदन में, लेनदेन को स्वचालित रूप से शुरू किया जाना चाहिए और क्वेरी से अलग एक प्रतिबद्धता जारी की जानी चाहिए। यह एप्लिकेशन में एक छोटा अपफ्रंट निवेश है, लेकिन यह कोड परिवर्तन को आसान बनाता है जिसमें डेटाबेस कॉल जोड़ना और कम करना है कि एक डेवलपर को कितना सोचना है (देव गति में सुधार, देव त्रुटियों को कम करता है)। इस तरह का डिज़ाइन कनेक्शन पूलिंग जैसी चीजों के साथ अच्छी तरह से फिट बैठता है।
jpmc26

57

मैं समझता हूं, कि क्यों प्रत्येक चयन के लिए कोई व्यक्ति जुड़ने से बचना चाहता है ।

लेकिन आप जुड़ने के साथ एक बार दृश्य बना सकते हैं और अपनी अप्राकृतिक तालिका के बजाय इसका उपयोग कर सकते हैं ।

तो आप एक आसान चयन की सुविधा के साथ सामान्यीकरण के लाभ को जोड़ते हैं।


12
दृश्य आपके मित्र हैं। उनका उदारतापूर्वक उपयोग करें। और प्रदर्शन के लिए, आप अपने आरडीबीएमएस का समर्थन करने पर भौतिक विचारों का उपयोग भी कर सकते हैं।
VH-NZZ

13

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

इसका उत्तर है "मर्फी के नियम के कारण"। मर्फी का नियम कहता है कि:

अगर कुछ गलत हो सकता है, तो यह होगा।

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

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


12

अच्छे / बुरे के बजाय व्यापार की दृष्टि से इसे सोचना अधिक उत्पादक होगा। वे क्वेरी प्रयोज्य में लाभ के लिए सामान्यीकरण (esp। संगति) के फायदे बंद कर रहे हैं।

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

जोखिमों और लागतों को कम करने के लिए आप क्या कर सकते हैं?

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

6

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

संभावित डेटा भ्रष्टाचार के लिए क्वेरी करने की थोड़ी अधिक कठिन विधि बेहतर हो सकती है।


6
उनके लोग तर्क देंगे कि वे यह सुनिश्चित करने के लिए पर्याप्त हैं कि सभी डेटा ठीक से अपडेट किए जा रहे हैं (एक आधार मैं विवाद, अगर वे जुड़ने में असहज हैं)। शायद एक बेहतर तर्क यह है कि आप एसीआईडी ​​के अधिकांश लाभों को खो देते हैं जो आरडीबीएमएस प्रदान करते हैं, यदि आप सामान्यीकरण से बचते हैं।
रॉबर्ट हार्वे

4
शायद, लेकिन यह सब जोखिम का सवाल है। क्या वे डेटाबेस को दूषित करने के जोखिम को स्वीकार करने के लिए तैयार हैं क्योंकि यह क्वेरी को आसान बनाता है?
ओलेक्सी

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

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

0

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

धैर्य से काम लें और विधिपूर्वक काम करें। रात में बदलाव नहीं होगा।


0

बाहर निकलें।

ईमानदारी से, आप सामान्यता, संगति और सरासर आलस्य के कारण पागल कीड़े से लड़ने के बारे में बहस करते हुए महीने बिता सकते हैं और फिर छोड़ सकते हैं।

या आप बस समय बचा सकते हैं, और निराशा और अब छोड़ सकते हैं।

अच्छे प्रोग्रामर बहुत आलसी लोग होते हैं। वे ग्राहक और प्रबंधन की जरूरतों को समझते हैं। लेकिन सबसे महत्वपूर्ण बात यह है कि वे समझते हैं कि समस्याओं को अच्छी तरह से हल करना, अच्छी तरह से डिज़ाइन किए गए और अच्छी तरह से लागू किए गए समाधानों का उपयोग करना उन्हें व्यक्तिगत रूप से बहुत बड़ी मात्रा में काम, प्रयास, और सबसे महत्वपूर्ण रूप से पीड़ा और तनाव से बचाता है।

तो आप एक ऐसी जगह पर काम करना ज्यादा बेहतर समझेंगे, जो अच्छी इंजीनियरिंग को समझता और महत्व देता है।

शुभ लाभ।


बाद में: शायद उन्हें बीआई / ओएलएपी उपकरण की जरूरत है ... http://en.wikipedia.org/wiki/Online_analytical_processing

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