हम SQL सर्वर बैक-एंड के साथ एक .NET अनुप्रयोग विकसित कर रहे हैं। क्लाइंट तैनात किए जाने के बाद क्लाइंट गतिशील रूप से इकाइयों को कस्टम विशेषताओं को जोड़ने की क्षमता का अनुरोध करता है।अंतिम उपयोगकर्ताओं को गतिशील रूप से तालिका में कॉलम जोड़ने की अनुमति देना
जैसा कि in a similar question सुझाया गया है, हम एक सारणी बना सकते हैं जिसमें प्रत्येक कस्टम विशेषता मान (Entity-attribute-value मॉडल) के लिए एक पंक्ति होगी। हालांकि, हम अंतिम उपयोगकर्ताओं को वास्तव में तालिका (also suggested) को उसी प्रश्न में संशोधित करने की अनुमति देने पर विचार कर रहे हैं) यानी कॉलम जोड़ना और निकालना।
(संपादित करें: के रूप में टिप्पणी में बताया गया है, DDL उपयोगकर्ताओं या आवेदन के द्वारा सीधे निष्पादित नहीं किया जा सकता है, लेकिन संग्रहित प्रक्रियाओं सुनिश्चित करना है कि सब कुछ सुचारू रूप से चलाता है के माध्यम से)
मुख्य कारण हैं:
- बेहतर प्रदर्शन/खोज योग्य विशेषताएं
- गुण हमेशा कॉलम के रूप में दिखाई देने के लिए आवश्यक होते हैं उपयोगकर्ता इंटरफ़ेस में डेटा ग्रिड में या Excel/PowerPivot में आगे की प्रक्रिया के लिए डेटा निकालने पर।
- डाटा दृढ़ता से लिखा गया है (जैसा कि varchar के रूप में सभी विशेषता मान भंडारण के खिलाफ)
- एक सरलीकृत डाटा मॉडल
वहाँ रहे हैं किसी भी चेतावनियां है कि हम के बारे में पता होना चाहिए?
चीजें जो मन में आ रहे हैं:
- बैकअप/कार्य है कि बदलते डेटा संरचना
- (इस तरह के विचारों के रूप में) आश्रित वस्तुओं को संभालने में असमर्थ हो सकता है कि ठीक से दिखाने के लिए अपडेट नहीं कर रहे हैं बहाल इन परिवर्तनों (किसी भी अतिरिक्त कॉलम को शामिल करने के लिए एक आश्रित दृश्य को
select * from table
करना होगा)। - ...
इस दृष्टिकोण से संबंधित कोई भी इनपुट बहुत सराहना कर रहा है।
यह शायद एक ऐसा मामला है जहां एक denormalized [Entity-विशेषता-value] (http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) मॉडल जहां गुण हैं पंक्तियों के रूप में संग्रहीत वास्तव में सबसे अधिक समझ में आता है। – mellamokb
हां, कृपया उपयोगकर्ताओं को अपने डेटाबेस में एक बंदर रिंच फेंकने दें। कम से कम ईएवी के साथ आप कुछ नियंत्रण कर सकते हैं कि वे किस विनाश को खत्म कर रहे हैं ... http://sqlblog.com/blogs/aaron_bertrand/archive/2009/11/19/what-is-so-bad-about-eav -anyway.aspx –
@AaronBertrand, लिंक के लिए धन्यवाद, कुछ अच्छे अंक वहां। हालांकि, उन्होंने वही कमी का उल्लेख किया जो हमें गैर-ईएवी दृष्टिकोण का पता लगाने के लिए प्रेरित करता है। हम उपयोगकर्ताओं को सीधे डीडीएल निष्पादित करने की अनुमति नहीं देंगे। कुछ संग्रहीत प्रक्रियाएं बंदर रिंच प्रतिरोधी के रूप में कार्य करती हैं, यह सुनिश्चित करने के लिए कि संचालन को आसानी से चलाएं/निकालें। इसके अतिरिक्त, केवल योग्य उपयोगकर्ताओं को इन्हें निष्पादित करने की अनुमति होगी। – bernhof