डेटाबेस में अनन्य चाप क्या है और यह बुराई क्यों है?


10

मैं stackoverflow पर डेवलपर क्यू एंड ए द्वारा किए गए सबसे आम डेटाबेस डिजाइन गलतियों को पढ़ रहा था । पहले उत्तर में अनन्य चाप के बारे में वाक्यांश था:

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

मैं वास्तव में नहीं समझता कि अनन्य चाप बुराई क्यों है। संभवत: मुझे इसकी मूल बातें समझ नहीं आईं। क्या एक्सक्लूसिव आर्क पर कोई अच्छी व्याख्या है?

जवाबों:


8

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

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


4
तीन संभावित ट्रक स्थान एक सुपरक्लास, "ट्रक स्थान" के उपवर्ग हैं। ऐसे कई मामले हैं जहां उपवर्ग परस्पर अनन्य हैं। चुनौती बन जाती है कि रिलेशनल टेबलों में कक्षाओं और उपवर्गों को कैसे मॉडल किया जाए।
वाल्टर मिती

मैं मानता हूं कि ऐसे मामले हैं जहां इस डिजाइन का उपयोग करना उचित है। हालाँकि, मैं इस मूल पोस्ट से भी सहमत हो सकता हूँ कि इस पैटर्न का उपयोग LOT से अधिक किया जाना चाहिए। इसके कुछ बहुत बड़े नुकसान भी हैं ...
JDT

6
एक चेक बाधा का उपयोग नहीं किया जा सकता है? उदाहरण के लिए alter table mytable add constraint myconstraint check ((col1 is not null and col2 is null and col3 is null) or (col1 is null and col2 is not null and col3 is null) or (col1 is null and col2 is null and col3 is not null))। मुझे एक्सक्लूसिव आर्क पसंद नहीं है, लेकिन उन्हें एक चेक बाधा के साथ लागू किया जा सकता है। बेशक एफके की कमी भी मौजूद होनी चाहिए।
ट्यूलेंस कोरडोवा

1
इसलिए ऊपर उद्धृत पद से "जटिल जांच बाधाओं के बावजूद"। आप चेक बाधाओं या हेक, यहां तक ​​कि ट्रिगर्स के साथ वास्तव में परिष्कृत सत्यापन करने में सक्षम हो सकते हैं, जो इसे एक अच्छा विचार या अच्छे डिजाइन का टोकन नहीं बनाता है। चार या पांच कॉलम के साथ अनन्य आर्क्स पर चेक बाधाओं की कल्पना करें ... इसके अलावा, मुझे पूरा यकीन है कि सभी डेटाबेस इंजन CHECK बाधा का समर्थन नहीं करते हैं । MySQL में स्पष्ट रूप से बताया गया है कि CHECK क्लॉज़ को पार्स किया जाता है, लेकिन इसे अनदेखा किया जाता है ...
JDT

यह स्रोत अनन्य चाप की सिफारिश करता है। विचार?
एलेक्स मूर-नीमी

4

अनन्य आर्क्स के बारे में कुछ भी बुराई नहीं है। बस एक चेक बाधा का उपयोग करके संबंधित व्यवसाय नियम को लागू करें। अधिकांश प्रमुख डेटाबेस प्रबंधन सिस्टम चेक बाधाओं (Oracle, SQL सर्वर, PostgreSQL) का समर्थन करते हैं। यदि आप एक डेटा मॉडलिंग टूल का उपयोग कर रहे हैं, तो एक अच्छा मौका है कि आपका उपकरण स्वचालित रूप से चेक बाधा को लागू करने के लिए कोड उत्पन्न करेगा।


-1

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.