2012-09-20 5 views
5

में उपयोग किए जाने वाले डेटाबेस को डिज़ाइन करना मैं .NET (C#, SQL सर्वर) का उपयोग कर एक एन-स्तरीय एप्लिकेशन पर काम कर रहा हूं। मैंने डेटाबेस को डिज़ाइन करके शुरू किया क्योंकि मेरा मानना ​​है कि नीचे से शुरू करना एक अच्छा विचार होगा। अब मुझे डेटाबेस को बहुत लचीला बनाने में आपके सुझावों की आवश्यकता है। यह जानकर कि एप्लिकेशन प्लग-इन के समूह के रूप में बनाया गया है।एन-टियर एप्लिकेशन

एप्लिकेशन कई अलग-अलग हार्डवेयर उपकरणों (कार, इंजन, आदि) के लिए एक रिमोट कंट्रोल ऐप है यहां डेटाबेस टेबल का एक टुकड़ा है।

  1. डिवाइस टेबल
  2. कार्मिक टेबल
  3. उपयोगकर्ता तालिका
  4. भूमिकाओं तालिका

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

उपयोगकर्ता एप्लिकेशन उपयोगकर्ता हैं जिन्हें आप देख सकते हैं कि मैंने अलग किया है उपयोगकर्ता और दो अलग-अलग तालिकाओं में भूमिकाएं।

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

अग्रिम धन्यवाद, और अगर मुझे स्पष्ट नहीं है तो कृपया मुझे क्षमा करें।

+0

[समग्र] (http://www.oodesign.com/composite-pattern.html) –

+0

समग्र पैटर्न के उपयोग के संबंध में एक समस्या यह है कि उदाहरण के लिए मैं सिम्स रिपोर्ट प्रदर्शित करना चाहता हूं और जानना कि सिम्स को दफनाया गया है समग्र पेड़ में गहराई से मुझे उस पेड़ को शायद विज़िटर पैटर्न का उपयोग करने के लिए एक रास्ता चाहिए। –

उत्तर

1

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

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

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

+0

हां, मैं किसी भी विरासत कोड का उपयोग नहीं कर रहा हूं। –

1

असली डिज़ाइन निर्णय यहां आपके डिवाइस और प्रॉपर्टी टेबल के आसपास है। अन्य सुंदर मानक हैं।

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

आप डेटाबेस-परिभाषित बाधाओं के माध्यम से ऐसा कर सकते हैं। लेकिन आपको कैसे पता होना चाहिए कि 'कार' डिवाइस को 'मॉडल' संपत्ति की आवश्यकता है? शायद आपको प्रत्येक डिवाइस के लिए टेम्पलेट परिभाषा की आवश्यकता है: डिवाइस टाइप और प्रॉपर्टी टाइप टेबल। इस तरह आपकी बाधा हमेशा यह जानती है कि जब आप रिकॉर्ड अपडेट/डालने पर गुणों की अपेक्षा की जाती है। इसके अलावा, इससे आपके आवेदन में डेटा के साथ काम करना आसान हो जाएगा।

+0

गुणों के बारे में एक बात यह है कि जब उन्हें प्रेजेंटेशन लेयर में मैप किया जाता है तो वे अलग-अलग प्रकार के होंगे, कुछ में केवल बूलियन वैल्यू हो सकते हैं जबकि अन्य स्ट्रिंग या न्यूमेरिक रेंज लेते हैं। इसका अर्थ यह है कि गुणों में अलग-अलग "मूल्य प्रकार" –

+0

होंगे जिन्हें आपके डिवाइस टाइप-प्रॉपर्टी टाइप परिभाषा में परिभाषित किया जा सकता है। – davenewza

0

कुछ भी के लिए कोई आदर्श डेटाबेस डिजाइन नहीं है। यह आपके द्वारा छेड़छाड़ की जा रही जानकारी के अनुसार जल्दी से बदल सकता है।

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

यहां तक ​​कि प्रत्येक डिवाइस के विभिन्न गुण है, तो आप अपने-अपने समूह में उपकरणों वर्गीकृत कर सकते हैं और एक समूह के ज्यादातर समान गुणों होगा। आप उस समूह के सभी गुणों सहित एक संपत्ति तालिका बना सकते हैं। जैसा कि आपने कहा था, आप उन्हें डिवाइस आईडी और propertyID के साथ एक अलग तालिका में जोड़ सकते हैं। एक व्यक्ति और डिवाइस के लिए वही बात होती है। आप अपने गुणों के आधार पर व्यक्ति तालिका को छोटे टुकड़ों में तोड़ सकते हैं।

कई तालिकाओं डेटा extrection के मामले में एक क्लस्टर के रूप में हैं, तो आप केंद्र में एक तथ्य तालिका (वास्तविक संख्या) और उसके आसपास संबद्ध डेटा के साथ अपने समाधान के लिए एक स्टार स्कीमा पर विचार कर सकते हैं।

शुभकामनाएं!

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