एसक्यूएल में एंटीटी-एट्रिब्यूट-वैल्यू डेटाबेस डिज़ाइन के साथ प्रमुख कमियां सभी डेटा कुशलतापूर्वक और त्वरित रूप से क्वेरी करने और रिपोर्ट करने में सक्षम होने से संबंधित हैं। इस विषय पर मैंने जो अधिकांश जानकारी पढ़ी है, इन समस्याओं के कारण ईएवी को लागू करने और लगभग सभी अनुप्रयोगों के लिए पूछताछ/रिपोर्टिंग की समानता के खिलाफ चेतावनी दी गई है।ईएवी डेटाबेस से रिपोर्टिंग में कमियों को दूर करने के लिए कैसे?
मैं वर्तमान में एक प्रणाली तैयार कर रहा हूं जहां इकाइयों में से एक के लिए फ़ील्ड डिजाइन/संकलन समय पर ज्ञात नहीं हैं और सिस्टम के अंतिम उपयोगकर्ता द्वारा परिभाषित किए जाते हैं। ईएवी इस आवश्यकता के लिए एक अच्छा फिट लगता है, लेकिन जिन समस्याओं के बारे में मैंने पढ़ा है, उनके कारण मैं इसे लागू करने में संकोच कर रहा हूं क्योंकि इस प्रणाली के लिए कुछ भारी रिपोर्टिंग आवश्यकताएं भी हैं। मैं सोचता हूं मैं इस के आसपास एक रास्ता लेकर आया हूं लेकिन एसओ समुदाय को सवाल उठाना चाहता हूं।
यह देखते हुए कि ठेठ सामान्यीकृत डेटाबेस (OLTP) अभी भी रिपोर्ट चलाने के लिए सबसे अच्छा विकल्प नहीं है, एक अच्छी प्रैक्टिस में "रिपोर्टिंग" डेटाबेस (ओलाप) होना प्रतीत होता है जहां सामान्यीकृत डेटाबेस से डेटा कॉपी किया जाता है, व्यापक पूछताछ के लिए व्यापक रूप से अनुक्रमित, और संभावित रूप से denormalized। क्या एक ही विचार ईएवी डिजाइन की कमियों के आसपास काम करने के लिए इस्तेमाल किया जा सकता है?
मैं जो मुख्य नकारात्मक पक्ष देखता हूं वह ईएवी डेटाबेस से डेटा को स्थानांतरित करने की जटिल जटिलता है क्योंकि आप रिपोर्टिंग डेटाबेस में तालिकाओं को बदलने के लिए समाप्त हो सकते हैं क्योंकि नए फ़ील्ड ईएवी डेटाबेस में परिभाषित किए गए हैं। लेकिन यह शायद ही असंभव है और ईएवी डिजाइन द्वारा दी गई लचीलापन के लिए एक स्वीकार्य व्यापारिक प्रतीत होता है। यह नकारात्मक पक्ष भी मौजूद है यदि मैं मुख्य डेटा संग्रहण के लिए गैर-SQL डेटा स्टोर (यानी कॉच डीबी या इसी तरह) का उपयोग करता हूं क्योंकि सभी मानक रिपोर्टिंग टूल SQL बैकएंड के खिलाफ पूछताछ की अपेक्षा कर रहे हैं।
यदि आपके पास पूछताछ के लिए एक अलग रिपोर्टिंग डेटाबेस है तो ईएवी सिस्टम के साथ समस्याएं अधिकतर दूर हो जाती हैं?
संपादित करें: टिप्पणियों के लिए धन्यवाद। सिस्टम के बारे में महत्वपूर्ण बातों में से एक मैं इस पर काम कर रहा हूं कि मैं वास्तव में केवल एक इकाई के लिए ईएवी का उपयोग करने के बारे में बात कर रहा हूं, सिस्टम में सबकुछ नहीं।
सिस्टम का पूरा ज्ञान कई अलग-अलग स्रोतों से डेटा खींचने में सक्षम होना है जो समय से पहले ज्ञात नहीं हैं और डेटा को किसी विशेष इकाई के बारे में कुछ "सर्वश्रेष्ठ ज्ञात" डेटा के साथ आने के लिए क्रंच करते हैं। तो मैं जिन "फील्ड" से निपट रहा हूं वह बहु-मूल्यवान है और मुझे प्रत्येक के लिए इतिहास ट्रैक करने की भी आवश्यकता है। इसके लिए सामान्यीकृत डिज़ाइन 1 फ़ील्ड प्रति फ़ील्ड होता है जो किसी भी तरह से दर्दनाक तरीके से पूछताछ करता है।
यहाँ तालिका स्कीमा और नमूना डेटा मैं देख रहा हूँ (जाहिर है मैं क्या पर काम कर रहा हूँ से बदल लेकिन मैं यह बात अच्छी तरह से दिखाता है लगता है) कर रहे हैं:
EAV टेबल्स
Person
-------------------
- Id - Name -
-------------------
- 123 - Joe Smith -
-------------------
Person_Value
-------------------------------------------------------------------
- PersonId - Source - Field - Value - EffectiveDate -
-------------------------------------------------------------------
- 123 - CIA - HomeAddress - 123 Cherry Ln - 2010-03-26 -
- 123 - DMV - HomeAddress - 561 Stoney Rd - 2010-02-15 -
- 123 - FBI - HomeAddress - 676 Lancas Dr - 2010-03-01 -
-------------------------------------------------------------------
रिपोर्टिंग टेबल
Person_Denormalized
----------------------------------------------------------------------------------------
- Id - Name - HomeAddress - HomeAddress_Confidence - HomeAddress_EffectiveDate -
----------------------------------------------------------------------------------------
- 123 - Joe Smith - 123 Cherry Ln - 0.713 - 2010-03-26 -
----------------------------------------------------------------------------------------
सामान्यीकृत डिजाइन
Person
-------------------
- Id - Name -
-------------------
- 123 - Joe Smith -
-------------------
Person_HomeAddress
------------------------------------------------------
- PersonId - Source - Value - Effective Date -
------------------------------------------------------
- 123 - CIA - 123 Cherry Ln - 2010-03-26 -
- 123 - DMV - 561 Stoney Rd - 2010-02-15 -
- 123 - FBI - 676 Lancas Dr - 2010-03-01 -
------------------------------------------------------
"विश्वास" क्षेत्र यहाँ तर्क है कि आसानी से डालने नए मूल्यों के लिए एक व्यक्ति के बारे में सभी डेटा खींच दिया जाएगा के अलावा व्यक्त नहीं किया जा सकता है (अगर सब पर) तो मेरे सबसे आम आपरेशन एसक्यूएल का उपयोग कर का उपयोग कर उत्पन्न होता है सभी फ़ील्ड्स इसलिए मैं रिपोर्टिंग तालिका के लिए रिकॉर्ड उत्पन्न कर सकता हूं।यह वास्तव में ईएवी मॉडल में आसान है क्योंकि मैं एक ही प्रश्न कर सकता हूं। सामान्यीकृत डिज़ाइन में, मैं बड़े पैमाने पर कार्टेसियन उत्पाद को उन सभी में शामिल होने से बचने के लिए प्रति फ़ील्ड 1 क्वेरी करना चाहता हूं।
एक्सएमएल में जानकारी संग्रहीत करना बेहतर होगा। जैसा कि आप XQuery हालांकि SQL का उपयोग कर हमेशा पूछ सकते हैं। हमने सफलतापूर्वक हमारे आवेदन के लिए किया था। – Fahad