38

हमारा डेटाबेस ईएवी (एंटिटी-एट्रिब्यूट-वैल्यू) मॉडल के आधार पर डिज़ाइन किया गया है। जिन लोगों ने ईएवी मॉडल के साथ काम किया है वे लचीलेपन के उद्देश्य से आने वाले सभी बकवास को जानते हैं।एंटीटी-एट्रिब्यूट-वैल्यू (ईएवी) के विकल्प?

मैं वजहों EAV मॉडल (लचीलापन) का उपयोग कर के बारे में मेरे मुवक्किल को कहा, और उनके जवाब था: उनके संस्थाओं समय के साथ बदल। तो, आज उनके पास कुछ विशेषताओं वाला एक टेबल हो सकता है, लेकिन एक महीने में, कुछ नए विशेषताओं को जोड़ा जा सकता है, या मौजूदा विशेषता का नाम बदला जा सकता है। उन्हें समय पर किसी भी चरण में वापस आने के लिए रिपोर्ट तैयार करने की आवश्यकता होती है और उस चरण में इकाइयों के आकार के आधार पर डेटा पूछताछ की आवश्यकता होती है।

मैं समझता हूँ कि यह एक पारंपरिक संबंधपरक मॉडल के साथ संभव नहीं है, लेकिन मैं व्यक्तिगत रूप से विरोधी पैटर्न के रूप में EAV देखते हैं। क्या कोई अन्य वैकल्पिक मॉडल है जो हमें संस्थाओं और उदाहरणों में बदलावों में समय आयाम को पकड़ने में सक्षम बनाता है?

चीयर्स, Mosh

+2

जो आपको मिला है उसे बदलने के बजाय, क्योंकि यह किसी विशेष आवश्यकता को पूरा करता है, तो आपको समय के साथ परिवर्तनों को संग्रहीत करने वाले किसी चीज़ के साथ अपने मूल ईएवी मॉडल को बढ़ाने की आवश्यकता है। – RibaldEddie

+0

मैं रिबाल्डएडी के साथ सहमत हूं, यह आसान नहीं होगा, लेकिन आपकी विशेषता परिभाषाओं में दिनांक/संस्करण जोड़ना वर्तमान स्कीमा पर बनाए गए सभी कोड को पूरी तरह रीफैक्टर करने से आसान होगा। – JeremyWeir

+4

इस पर बंद होने का कोई मौका? या तो टिप्पणियां और प्रगति, या वोट और उत्तर की पसंद। धन्यवाद। – PerformanceDBA

उत्तर

-1

प्रत्येक इकाई वर्णन संस्करण और एक अतिरिक्त तालिका जो आपको बताता है जो तालिका जो संस्करण है के लिए एक नई तालिका वर्णन लिखें। क्वेरी सिस्टम को भी अद्यतन किया जाना चाहिए।

मुझे लगता है कि उत्पन्न एक स्क्रिप्ट बनाना, टेबल और प्रश्न आपका सबसे अच्छा शॉट है।

8

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

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

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

+1

उत्कृष्ट प्रतिक्रिया। मैं जोड़ूंगा कि कुछ ग्राहक पूरी तरह से असंतुष्ट होंगे, क्योंकि जब डेटा मॉडल की बात आती है तो वे अंतिम लचीलापन और दीर्घकालिक स्थिरता के बीच व्यापार को स्वीकार नहीं करते हैं।आपको सिर्फ इतना सीखना है कि ऐसे ग्राहकों को कैसे प्रबंधित करें और उन्हें अपने जीवन या अपनी प्रतिष्ठा को बर्बाद करने से रोकें। –

46

ईएवी के बीच ईमानदारी से या बुरी तरह से अंतर है; 5 एनएफ कुशल लोगों द्वारा या उन लोगों द्वारा किया जाता है जो अनजान हैं।

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

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

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

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

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

Other EAV Question

0

@NickLarsen और @PerformanceDBA से उत्तर देने के लिए जोड़ने के लिए,

यदि आपको फ़ील्ड नाम जैसी चीजों में ऐतिहासिक परिवर्तनों को ट्रैक करने की आवश्यकता है, तो आप Slowly Changing Dimensions जैसे कुछ देखना चाहते हैं। ऐसा लगता है कि आप गतिशील आयामी मॉडल (शायद लुकअप सूचियों) मॉडल करने के लिए ईएवी का उपयोग कर रहे हैं।

इसे प्राप्त करने का सबसे सरल (और शायद कम से कम कुशल) तरीका ईएवी तालिकाओं पर दिनांक क्षेत्र "के रूप में" शामिल करना होगा, और जब भी कोई परिवर्तन होता है, तो एक नया रिकॉर्ड डालें (मौजूदा रिकॉर्ड को अपडेट करने के बजाय) वर्तमान तिथि इसका मतलब यह है कि अगर आपको कोई भी प्रदान नहीं किया गया है, तो आपको हमेशा "तारीख" के रूप में शामिल करने या "अब" के लिए बहरे जाने के लिए अपने प्रश्नों को बदलने की आवश्यकता है। ईएवी ऑब्जेक्ट्स में शामिल होने वाली आपकी मूल इकाई को ईएवी तालिका से "शीर्ष 1" से पूछताछ करना होगा, जहां "जैसा कि" दिनांक पंक्ति की 'अंतिम अपडेट' तिथि से कम या उसके बराबर है, "के रूप में" उतरते। सबसे खराब स्थिति परिदृश्य, यदि आपको किसी दिए गए पंक्ति में सबसे हालिया परिवर्तन को ट्रैक करने की आवश्यकता है, जहां दोनों नाम ('विशेषता' तालिका में संग्रहीत) और मान बदल गया है, तो आप इस तर्क को 'अंतिम संशोधित' का उपयोग करके मूल्य तालिका में चेन करेंगे। उस विशेष तारीख के लिए उचित मूल्य खोजने के लिए पंक्ति का।

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

संबंधित मुद्दे