2013-01-12 18 views
5

हमारे सिस्टम में एक प्रक्रिया कुछ नियमों के अनुसार फाइल भेजने के लिए ज़िम्मेदार है। इसके फ़ाइल नाम के आधार पर, एक फ़ाइल किसी ग्राहक या कारखाने को भेजी जा सकती है (लेकिन दोनों कभी नहीं)।डेटाबेस डेटाबेस को डिज़ाइन करना जो केवल 2 विदेशी कुंजी में से एक हो सकता है?

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

इस प्रक्रिया में, हम कारखाने और ग्राहक को जानते हैं कि एक फ़ाइल संबंधित है, और हम कारखाने और ग्राहक के नियमों को देखेंगे और फ़िल्टर से मेल खाने वाली फ़ाइलों के लिए नियम लागू करेंगे (प्राथमिकता दी जाएगी ग्राहक नियमों के लिए)

डेटाबेस में नियमों और ग्राहक/कारखाने के बीच संबंधों का प्रतिनिधित्व करने का सबसे अच्छा तरीका क्या है? हमारे पास पहले से ही डेटाबेस में ग्राहक और फैक्टरी तालिका है, लेकिन मैं रिश्ते का प्रतिनिधित्व करने का सबसे अच्छा तरीका नहीं सोच सकता। नियम की प्रत्येक पंक्ति में बिल्कुल एक एफके होगा (या तो ग्राहक या फैक्ट्री, इसमें दोनों नहीं हो सकते हैं और इसमें कोई भी नहीं हो सकता है)। जिस तरह से इस प्रतिनिधित्व करने के लिए में से एक की तरह है:

enter image description here

लेकिन इस तथ्य यह है कि यह केवल हो सकता है पर कब्जा नहीं है ठीक दो FKS में से एक। हम एक बाधा डाल सकते हैं कि उनमें से एक को वैध एफके होना चाहिए और दूसरे को खाली होना चाहिए, लेकिन यह बहुत साफ नहीं लगता है। इसके अलावा, अगर हमारे पास नियमों (जैसे देश) का अन्य निर्धारक है तो यह उग्र हो जाएगा। कोई विचार है कि इस डिजाइन को कैसे सुधारें?

मुझे लगता है कि यह यह भी निर्दिष्ट करने में मदद करेगा कि सिस्टम .NET में विकसित किया गया है, और हम एक ऑब्जेक्ट-रिलेशनल मैपिंग, अर्थात् NHibernate का उपयोग करते हैं।

+0

वहाँ ग्राहकों और कारखानों के बीच कुछ साझा डेटा है, तो स्पष्ट एक आधार वर्ग है कि दोनों ग्राहकों और कारखानों से निकाले जाते हैं लागू करने के लिए है। FK तो आधार वर्ग –

उत्तर

6

table inheritance पर एक नज़र डालें।

आप कुछ इस तरह इस्तेमाल कर सकते हैं:

Rule 
    int RuleId 
    int TypeRule 
    PK (RuleId) 
    UQ (RuleId, TypeRule) 

CustomerRule 
    int TypeRule = 1 
    int CustomerId 
    FK (TypeRule, RuleId) 
    FK CustomerId 

FactoryRule 
    int TypeRule = 2 
    int FactoryId 
    FK (TypeRule, RuleId) 
    FK FactoryId 

एक प्रणाली इस तरह आप या तो एक ग्राहक नियम या एक कारखाने शासन, दोनों नहीं है के साथ। इसके अलावा, कल CountryRule जोड़ना आसान है।

+0

यह एक एसक्यूएल सर्वर सुविधा है करने के लिए जाना चाहते हैं? किसी भी विचार है कि यह कैसे NHibernate के साथ काम करता है? –

3

हाइबरनेट और उसके Table-per-Subclass Mapping Strategy का उपयोग करके आप, एक अमूर्त नियम-क्लास को परिभाषित यह ग्राहकों और कारखानों के लिए विशेषज्ञ और इस तरह रिलेशनल डाटाबेस स्कीमा के वर्ग पदानुक्रम मैप कर सकते हैं:

Mapping

1

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

1

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

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

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

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