@ डानो कुछ मुद्दों को सही तरीके से उठाता है जिन्हें एक पूर्ण उत्तर में सबसे अच्छा संबोधित किया जाता है।
@Celenius द्वारा पहले ही नोट की गई एक कठिनाई यह है कि B और A के बीच एक जुड़ाव (दोनों दिशाओं में) सभी क्षेत्रों को डुप्लिकेट करता है; इसे ठीक करने के लिए यह बहुत अच्छा हो सकता है। मैंने टिप्पणियों में सुझाव दिया है कि स्पष्ट आसान तरीका (एक स्प्रेडशीट के लिए निर्यात) डेटा अखंडता के प्रश्न उठाता है। एक और कठिनाई , पहले से ही सेलेनियस के प्रस्ताव द्वारा संबोधित की गई है, इस समस्या को हल करने वाली चिंताएं जब विशेषताओं का कोई संयोजन ए और बी दोनों के लिए एक कुंजी के रूप में सेवा नहीं कर सकता, क्योंकि यह एक डेटाबेस को शामिल करता है। स्थानिक जुड़ाव उस समस्या के आसपास हो जाता है।
फिर, क्या एक अच्छा समाधान है? एक दृष्टिकोण बी के वांछित डेटा वाले संबंधित रिकॉर्ड की पहचान करने के लिए ए का उपयोग करता है। बहुभुज के विन्यास के बारे में मान्यताओं के आधार पर - चाहे वे ओवरलैप हों, चाहे कुछ में अन्य शामिल हो सकते हैं, आदि - यह विभिन्न तरीकों से किया जा सकता है: एक परत का उपयोग दूसरे में वस्तुओं का चयन करने के लिए, या जॉइन के माध्यम से। यहाँ मुद्दा यह है कि इस स्तर पर हम जो करना चाहते हैं, वह ए के अनुरूप बी का सबसेट है।
उस चयन को प्राप्त करने के बाद, चयन को निर्यात करें और इसे ए। संपन्न की जगह दें ।
यह समाधान मानता है कि बी के सभी क्षेत्रों का उद्देश्य ए में अपने समकक्षों को बदलना है। यदि नहीं, तो वास्तव में ए (गंतव्य) के लिए बी (स्रोत) से 1-1 जुड़ना आवश्यक है । आइडेंटिफायर्स के आधार पर ज्वाइन करना सबसे अच्छा है, लेकिन आईडी उपलब्ध न होने पर पॉलीगॉन आइडेंटिटी (सेलेनियस) पर जॉइन करना ठीक रहता है और ए और बी में संबंधित पॉलीगॉन शेप में कोई मौका नहीं होता है, हालांकि थोड़ा अलग हो सकता है । (यह एक सूक्ष्म बिंदु है, और कपटी त्रुटियों का संभावित कारण है, क्योंकि बी में बहुभुज में पिछले संपादन जो अभी भी ए के अनुरूप नहीं हैं, यदि जीआईएस "स्नैपिंग" या "टोपोलॉजी बनाए रखना" है तो अन्य पॉलीगोन को बी में संशोधित कर सकते हैं। या अन्यथा स्वचालित रूप से स्थानीय संपादन के दौरान वैश्विक परिवर्तन कर रहे हैं।)
इस मोड़ पर, हर फ़ील्ड की दो प्रतियां होती हैं: यदि [Foo] A और B के लिए एक सामान्य फ़ील्ड है, तो Join में A. [Foo] और B. [Foo] शामिल हैं। फ़ील्ड गणना का उपयोग करते हुए , B. [Foo] को A. [Foo] में कॉपी करें। सभी आवश्यक क्षेत्रों के लिए दोहराएँ। ऐसा करने के बाद, जॉइन को हटा दें।
यद्यपि यह प्रक्रिया थोड़ी सी खराब हो सकती है जब कई क्षेत्र शामिल होते हैं, इसके गुणों में शामिल हैं
- यह स्क्रिप्ट के लिए सीधा और तेज है।
- यह स्क्रिप्ट एक लेखा परीक्षा निशान छोड़ देता है प्रसंस्करण का दस्तावेजीकरण डेटा पर किया जा रहा। यह डेटा अखंडता की रक्षा के लिए महत्वपूर्ण है।
- यह कुछ प्रकार की थोक त्रुटियों के खिलाफ बचाव करता है, जैसे कि जुड़ने के बाद गलत क्षेत्र को बनाए रखना (जिससे उस क्षेत्र के लिए नए डेटा के बजाय पुराने डेटा को बनाए रखना) या एक महत्वपूर्ण फ़ील्ड को हटाना।
- यह डेटाबेस प्रबंधन प्रणाली द्वारा पेश किए गए अंतर्निहित डिफेंस पर कैपिटल करता है, जैसे कि डेटा प्रकार प्रवर्तन और व्यापार नियम प्रवर्तन, जो त्रुटियों को रोकने और पहचानने और डेटाबेस में सभी तालिकाओं और परतों के बीच स्थिरता बनाए रखने के लिए काम करते हैं।
इस सुझाव में शामिल कुछ मार्गदर्शक सिद्धांत हैं
- इस कार्य के लिए डिज़ाइन किए गए या अनुपयोगी सॉफ़्टवेयर का उपयोग करने के बजाय डेटा को संसाधित करने के लिए अपने डेटाबेस प्रबंधन प्रणाली का उपयोग करें।
- डेटाबेस संरचनाओं को बदलने से बचें (जैसे कि फ़ील्ड हटाना या जोड़ना) जब ऑपरेशन को इसकी आवश्यकता नहीं होती है।
- स्वचालन के लिए सॉफ्टवेयर की क्षमताओं का उपयोग कार्य को सरल बनाने, उसे दस्तावेज करने और संचालन को प्रतिलिपि प्रस्तुत करने योग्य बनाने के लिए करें।
किसी को आपत्ति हो सकती है कि कई मामलों में समान परिणाम तक पहुंचने के तेज़ और आसान तरीके हैं। हाँ, वहाँ हो सकता है, और वे प्रभावी हो सकते हैं और आमतौर पर वे देखभाल के साथ काम करते हैं। लेकिन डेटा को जोखिम में डालने वाले समाधान सामान्य-उद्देश्य उत्तरों के रूप में अनुशंसा और बचाव करना मुश्किल है। वे छोटे डेटासेट के साथ एक-बंद स्थितियों में सर्वश्रेष्ठ रूप से कार्यरत हैं जहां डेटा में भ्रष्टाचार तेजी से स्पष्ट हो जाना चाहिए और ऐसी किसी भी गलती के परिणाम अपरिहार्य हैं।