2013-01-22 8 views
7

हम SQL सर्वर बैक-एंड के साथ एक .NET अनुप्रयोग विकसित कर रहे हैं। क्लाइंट तैनात किए जाने के बाद क्लाइंट गतिशील रूप से इकाइयों को कस्टम विशेषताओं को जोड़ने की क्षमता का अनुरोध करता है।अंतिम उपयोगकर्ताओं को गतिशील रूप से तालिका में कॉलम जोड़ने की अनुमति देना

जैसा कि in a similar question सुझाया गया है, हम एक सारणी बना सकते हैं जिसमें प्रत्येक कस्टम विशेषता मान (Entity-attribute-value मॉडल) के लिए एक पंक्ति होगी। हालांकि, हम अंतिम उपयोगकर्ताओं को वास्तव में तालिका (also suggested) को उसी प्रश्न में संशोधित करने की अनुमति देने पर विचार कर रहे हैं) यानी कॉलम जोड़ना और निकालना।

(संपादित करें: के रूप में टिप्पणी में बताया गया है, DDL उपयोगकर्ताओं या आवेदन के द्वारा सीधे निष्पादित नहीं किया जा सकता है, लेकिन संग्रहित प्रक्रियाओं सुनिश्चित करना है कि सब कुछ सुचारू रूप से चलाता है के माध्यम से)

मुख्य कारण हैं:

  • बेहतर प्रदर्शन/खोज योग्य विशेषताएं
  • गुण हमेशा कॉलम के रूप में दिखाई देने के लिए आवश्यक होते हैं उपयोगकर्ता इंटरफ़ेस में डेटा ग्रिड में या Excel/PowerPivot में आगे की प्रक्रिया के लिए डेटा निकालने पर।
  • डाटा दृढ़ता से लिखा गया है (जैसा कि varchar के रूप में सभी विशेषता मान भंडारण के खिलाफ)
  • एक सरलीकृत डाटा मॉडल

वहाँ रहे हैं किसी भी चेतावनियां है कि हम के बारे में पता होना चाहिए?

चीजें जो मन में आ रहे हैं:

  • बैकअप/कार्य है कि बदलते डेटा संरचना
  • (इस तरह के विचारों के रूप में) आश्रित वस्तुओं को संभालने में असमर्थ हो सकता है कि ठीक से दिखाने के लिए अपडेट नहीं कर रहे हैं बहाल इन परिवर्तनों (किसी भी अतिरिक्त कॉलम को शामिल करने के लिए एक आश्रित दृश्य को select * from table करना होगा)।
  • ...

इस दृष्टिकोण से संबंधित कोई भी इनपुट बहुत सराहना कर रहा है।

+2

यह शायद एक ऐसा मामला है जहां एक denormalized [Entity-विशेषता-value] (http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) मॉडल जहां गुण हैं पंक्तियों के रूप में संग्रहीत वास्तव में सबसे अधिक समझ में आता है। – mellamokb

+2

हां, कृपया उपयोगकर्ताओं को अपने डेटाबेस में एक बंदर रिंच फेंकने दें। कम से कम ईएवी के साथ आप कुछ नियंत्रण कर सकते हैं कि वे किस विनाश को खत्म कर रहे हैं ... http://sqlblog.com/blogs/aaron_bertrand/archive/2009/11/19/what-is-so-bad-about-eav -anyway.aspx –

+0

@AaronBertrand, लिंक के लिए धन्यवाद, कुछ अच्छे अंक वहां। हालांकि, उन्होंने वही कमी का उल्लेख किया जो हमें गैर-ईएवी दृष्टिकोण का पता लगाने के लिए प्रेरित करता है। हम उपयोगकर्ताओं को सीधे डीडीएल निष्पादित करने की अनुमति नहीं देंगे। कुछ संग्रहीत प्रक्रियाएं बंदर रिंच प्रतिरोधी के रूप में कार्य करती हैं, यह सुनिश्चित करने के लिए कि संचालन को आसानी से चलाएं/निकालें। इसके अतिरिक्त, केवल योग्य उपयोगकर्ताओं को इन्हें निष्पादित करने की अनुमति होगी। – bernhof

उत्तर

3

मैं किसी तृतीय पक्ष अनुप्रयोग है कि विभिन्न तरीकों से में इस हैंडल के साथ काम: संख्या 1, Date26:

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

  3. अपनी खुद की टेबल

  4. बनाने अपने खुद के विचारों और संग्रहित प्रक्रियाओं बनाने और उन्हें आवेदन में रजिस्टर। ये डेटासेट उन्हें डेटा ग्रिड से जोड़ा जा सकता है और/या कस्टम रिपोर्ट में उपयोग किया जा सकता है।

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

यहां कुंजी यह है कि इस ग्राहक के चलते समर्थन के साथ इस ग्राहक के लिए कितना भुगतान करना है? यदि आप उन्हें किसी मौजूदा तालिका पर कस्टम फ़ील्ड बनाने देते हैं और वे निर्णय लेते हैं कि वे डेटा प्रकार को बदलना चाहते हैं जो आसानी से परिवर्तित नहीं होगा, तो क्या वे उम्मीद कर रहे हैं कि आप इसे घुमाएं और इसे परिवर्तित करें?

हम इस प्रणाली के लिए जो भुगतान करते हैं उसके लिए हम एक पूर्णकालिक प्रोग्रामर किराए पर ले सकते हैं। SalesForce.com और इसी तरह की साइटों में यह क्षमता है। मुझे नहीं लगता कि आप इसे एक-ऑफ क्लाइंट ऐप के लिए प्राप्त करना चाहते हैं। लंबे समय तक ऐप को अपडेट रखने के लिए वे आपको भुगतान भी कर सकते हैं।

+0

यदि मैं आपको सही ढंग से समझता हूं, तो "कस्टम" विशेषताएँ (संख्या 1, दिनांक 26 इत्यादि) पहले दिन से मौजूद थीं और डेटा के साथ पॉप्युलेट होने का इंतजार कर रहे थे? मैं इस दृष्टिकोण का एक बड़ा प्रशंसक नहीं हूं, हालांकि यह * तालिका को भौतिक रूप से संशोधित करने के तत्काल दोषों में से कुछ को खत्म करता है। – bernhof

+0

हां, वे फ़ील्ड ऐप के साथ आए थे। मैं मानता हूं, यह आदर्श नहीं है। – JeffO

+0

आपके इनपुट के लिए धन्यवाद। हम अब के लिए गतिशील दृष्टिकोण से बचने जा रहे हैं और इसके बजाय प्रति अनुरोध नए गुण लागू कर रहे हैं। – bernhof

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