मैं एक सास अवधारणा के लिए बहु-किराये डेटाबेस स्कीमा डिज़ाइन देख रहा हूं। यह एएसपी.नेट एमवीसी -> ईएफ होगा, लेकिन यह इतना महत्वपूर्ण नहीं है।इकाई फ्रेमवर्क और बहु-किरायेदारी डेटाबेस डिजाइन
नीचे आप एक उदाहरण डेटाबेस स्कीमा (किरायेदार कंपनी होने) देख सकते हैं। कंपनी आईडी को पूरे स्कीमा में दोहराया गया है और प्राथमिक कुंजी दोनों प्राकृतिक कुंजी, साथ ही किरायेदार आईडी पर रखा गया है।
- संबंध 'FK_Order_Customer' विदेशी चाबियों का सेट का उपयोग करता: जब मैं इकाई मॉडल फ़ाइल में तालिकाओं (Model1.edmx) जोड़ने
इकाई की रूपरेखा में इस स्कीमा Plugging निम्न त्रुटियों देता है '{ग्राहक आईडी, कंपनीआईडी}' जो तालिका 'ऑर्डर' के प्राथमिक कुंजी '{OrderId, CompanyId}' के सेट में आंशिक रूप से निहित हैं। विदेशी कुंजी का सेट प्राथमिक कुंजी के सेट में पूरी तरह निहित होना चाहिए, या किसी मॉडल में मैप किए जाने के लिए प्राथमिक कुंजी के सेट में पूरी तरह निहित नहीं होना चाहिए।
- रिश्ते 'FK_OrderLine_Customer' विदेशी कुंजी '{CustomerId, CompanyId}' के सेट का उपयोग करता है जो आंशिक रूप से 'ऑर्डरलाइन' तालिका के प्राथमिक कुंजी '{OrderLineId, CompanyId}' के सेट में निहित है। विदेशी कुंजी का सेट प्राथमिक कुंजी के सेट में पूरी तरह निहित होना चाहिए, या किसी मॉडल में मैप किए जाने के लिए प्राथमिक कुंजी के सेट में पूरी तरह निहित नहीं होना चाहिए।
- रिश्ते 'FK_OrderLine_Order' विदेशी कुंजी '{OrderId, CompanyId}' के सेट का उपयोग करता है जो आंशिक रूप से 'ऑर्डरलाइन' तालिका के प्राथमिक कुंजी '{OrderLineId, CompanyId}' के सेट में निहित है। विदेशी कुंजी का सेट प्राथमिक कुंजी के सेट में पूरी तरह निहित होना चाहिए, या किसी मॉडल में मैप किए जाने के लिए प्राथमिक कुंजी के सेट में पूरी तरह निहित नहीं होना चाहिए।
- रिश्ते 'FK_Order_Customer' विदेशी कुंजी '{ग्राहक आईडी, कंपनीआईडी}' के सेट का उपयोग करता है जो आंशिक रूप से तालिका 'ऑर्डर' के प्राथमिक कुंजी '{OrderId, CompanyId}' के सेट में निहित है। विदेशी कुंजी का सेट प्राथमिक कुंजी के सेट में पूरी तरह निहित होना चाहिए, या किसी मॉडल में मैप किए जाने के लिए प्राथमिक कुंजी के सेट में पूरी तरह निहित नहीं होना चाहिए।
- रिश्ते 'FK_OrderLine_Customer' विदेशी कुंजी '{CustomerId, CompanyId}' के सेट का उपयोग करता है जो आंशिक रूप से 'ऑर्डरलाइन' तालिका के प्राथमिक कुंजी '{OrderLineId, CompanyId}' के सेट में निहित है। विदेशी कुंजी का सेट प्राथमिक कुंजी के सेट में पूरी तरह निहित होना चाहिए, या किसी मॉडल में मैप किए जाने के लिए प्राथमिक कुंजी के सेट में पूरी तरह निहित नहीं होना चाहिए।
- रिश्ते 'FK_OrderLine_Order' विदेशी कुंजी '{OrderId, CompanyId}' के सेट का उपयोग करता है जो आंशिक रूप से 'ऑर्डरलाइन' तालिका के प्राथमिक कुंजी '{OrderLineId, CompanyId}' के सेट में निहित है। विदेशी कुंजी का सेट प्राथमिक कुंजी के सेट में पूरी तरह निहित होना चाहिए, या किसी मॉडल में मैप किए जाने के लिए प्राथमिक कुंजी के सेट में पूरी तरह निहित नहीं होना चाहिए।
- रिश्ते 'FK_OrderLine_Product' विदेशी कुंजी '{ProductId, CompanyId}' के सेट का उपयोग करता है जो आंशिक रूप से 'ऑर्डरलाइन' तालिका के प्राथमिक कुंजी '{OrderLineId, CompanyId}' के सेट में निहित है। विदेशी कुंजी का सेट प्राथमिक कुंजी के सेट में पूरी तरह निहित होना चाहिए, या किसी मॉडल में मैप किए जाने के लिए प्राथमिक कुंजी के सेट में पूरी तरह निहित नहीं होना चाहिए।
प्रश्न दो भागों में है:
- मेरी डेटाबेस डिजाइन गलत है? क्या मुझे इन यौगिक प्राथमिक कुंजी से बचना चाहिए? मैं मौलिक स्कीमा डिज़ाइन (फ्रैज्ड मस्तिष्क सिंड्रोम) के संबंध में अपनी स्वच्छता पर सवाल उठा रहा हूं। कृपया 'आदर्शीकृत' स्कीमा का सुझाव देने के लिए स्वतंत्र महसूस करें।
- वैकल्पिक रूप से, यदि डेटाबेस डिज़ाइन सही है, तो क्या ईएफ कुंजी से मिलान करने में असमर्थ है क्योंकि यह इन विदेशी कुंजी को संभावित गलत कॉन्फ़िगर किए गए 1: 1 रिश्तों (गलत तरीके से) के रूप में समझता है? इस मामले में, क्या यह एक ईएफ बग है और मैं इसके आसपास कैसे काम कर सकता हूं?
Multi-tenancy database schema http://i46.tinypic.com/23si52u.png
यदि मैं समग्र प्राथमिक कुंजी को हटाता हूं और केवल प्राकृतिक कुंजी (ProductId, OrderId, CustomerId, OrderLineId) का उपयोग करता हूं तो ईएफ त्रुटि दूर हो जाती है। हालांकि, मुझे यकीन नहीं है कि क्या यह सिर्फ कालीन के नीचे बकवास को फेंक रहा है! – Junto
प्राथमिक आवश्यकताओं को दो आवश्यकताओं को पूरा करने की आवश्यकता है। सबसे पहले, यह अद्वितीय होना चाहिए। दूसरा, सामान्यीकरण के लिए, सभी गैर-महत्वपूर्ण तत्व प्राथमिक कुंजी पर पूरी तरह से निर्भर होना चाहिए। आपकी कुछ यौगिक कुंजी सामान्य रूप से सामान्य रूप से सामान्य रूप से तोड़ती हैं, क्योंकि ऐसा लगता है कि आपकी यौगिक कुंजी का एक घटक यौगिक कुंजी के दूसरे भाग पर निर्भर है। यह यौगिक कुंजी के साथ एक बड़ा जोखिम है। तो अपनी चिंता का जवाब देने के लिए, नहीं, यह * नहीं * कालीन के नीचे सिर्फ झुकाव बकवास है! –