12

पॉलिमॉर्फिक एसिओसिएशन (पीए) अपेक्षाकृत सरल डेटाबेस आवश्यकता के लिए काफी मुट्ठी भर है: विभिन्न तालिकाओं को एक साझा तालिका में बाल रिकॉर्ड होने दें। क्लासिक उदाहरण एक रिकॉर्ड है जिसमें टिप्पणी रिकॉर्ड हैं जो अलग-अलग जरूरी नहीं है।किसी मौजूदा डेटाबेस में पॉलीमोर्फिक एसोसिएशन को कार्यान्वित करने के लिए कैसे करें

this question मार्क ने पीए के कार्यान्वयन के लिए तीन आम दृष्टिकोण दिखाते हुए एक उत्कृष्ट काम किया। मैं बेस टेबल दृष्टिकोण का उपयोग करना चाहता हूं, जिसे एक समान उत्कृष्ट answer by Bill Karwin में अधिक विस्तार से वर्णित किया गया है।

एक ठोस उदाहरण इस प्रकार दिखाई देगा:

enter image description here

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

अब मेरा प्रश्न: क्या होगा यदि मैं मौजूदा डेटाबेस में संदर्भित अखंडता के साथ पीए को पेश करना चाहता हूं, जो स्वयं को उत्पन्न करता है, पारस्परिक रूप से प्राथमिक कुंजी ओवरलैप कर रहा है?

विकल्प 1::

Option 1

प्रत्येक इकाई अपने स्वयं के प्राथमिक कुंजी रखता है, लेकिन यह भी एक वैकल्पिक कुंजी हो जाता है

अब तक, मैं दो विकल्प देखेंगे।

तरह:

सिफारिश की दृष्टिकोण के लिए
  • बंद।
  • बेस तालिका स्थिर है।

नापसंद:

  • मौजूदा संस्थाओं संशोधित किया जाना चाहिए।
  • टिप्पणी की अपनी खुद की इकाई ढूंढना मुश्किल है।

विकल्प 2:

Option 2

प्रत्येक इकाई आधार तालिका में अपनी ही विदेशी कुंजी स्तंभ है। यह मार्क के एकाधिक स्तंभ दृष्टिकोण की तरह दिखता है।

तरह:

  • मौजूदा संस्थाओं नहीं प्रभावित किया।
  • एक टिप्पणी की खुद की इकाई खोजने के लिए आसान है।

नापसंद:

  • विरल स्तंभों
  • बेस तालिका नहीं स्थिर: संशोधन जब फिलीस्तीनी अथॉरिटी के साथ एक नई इकाई शुरू की है जरूरत

मैं एक क्षेत्र के साथ संभवतः विकल्प 1 के लिए दुबला, बिडरेक्शनल लुकअप के लिए बेस टेबल में "EntityName"। कौन सा विकल्प बेहतर होगा। या एक और, बेहतर है, दृष्टिकोण?

+0

विकल्प 1 बनाए रखने के लिए आसान होगा:

(EntityType सिर्फ एक auxilary, संदर्भ तालिका, 3 पंक्तियों के साथ है)। यदि आपको अपनी बेस टेबल पर कॉलम जोड़ना है तो यह दोनों परेशानी होगी और पेज स्प्लिट्स और पॉइंटर्स और इस तरह के कारण बहुत से रखरखाव की आवश्यकता होगी। – JNK

+0

@ जेएनके अच्छा बिंदु, भौतिक भंडारण प्रभाव को ध्यान में रखना महत्वपूर्ण है। –

+0

आप विकल्प 1 का उपयोग कर सकते हैं लेकिन अतिरिक्त सरोगेट वैकल्पिक कुंजी के साथ नहीं। नई वैकल्पिक कुंजी मौजूदा प्राथमिक कुंजी (प्रत्येक इकाई का) हो सकती है, जिसे 'एंटीटी टाइप' कॉलम ('CHAR (1)' कहा जाता है, जो घटनाओं के लिए 'E' होगा, व्यक्तियों के लिए 'पी',' डी' उत्पादों के लिए) –

उत्तर

9

आप विकल्प 1 का उपयोग कर सकते हैं लेकिन अतिरिक्त सरोगेट वैकल्पिक कुंजी के बिना।

इसके बजाय, (प्रत्येक इकाई की) मौजूदा प्राथमिक कुंजी, एक EntityType स्तंभ के साथ (जैसे कि CHAR(1), कि उत्पाद के लिए व्यक्तियों के लिए घटनाक्रम के लिए E, P, D होगा) का विस्तार।

यौगिक (EntityId, EntityType) तब तालिका Entity की प्राथमिक कुंजी और अन्य 3 उप प्रकार तालिकाओं में इसी यौगिक बन जाएगा।

Polymorphic_Associations

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

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