मैं इस सवाल को मॉडलिंग के दृष्टिकोण से ले जाऊंगा।
जब तक आप किसी ऐसे रिश्ते को नहीं जोड़ते जो वास्तव में वहां नहीं हैं, आप सुरक्षित हैं। यदि आप उन्हें जोड़ते हैं, तो आपको डेटा में कम अखंडता मिलती है (क्योंकि वहाँ अतिरेक है) और अधिक कसकर युग्मित कोड।
विशेष रूप से परिपत्र संदर्भों के साथ बात यह है कि मैंने एक मामला नहीं देखा है जहां उन्हें वास्तव में एक - आत्म संदर्भ को छोड़कर आवश्यकता होगी। यदि आप पेड़ों या ग्राफ़ों को मॉडल करते हैं, तो आपको इसकी आवश्यकता है और यह पूरी तरह से सही है क्योंकि कोड-गुणवत्ता के दृष्टिकोण से आत्म-संदर्भ हानिरहित है (कोई निर्भरता नहीं जोड़ा गया)।
मेरा मानना है कि इस समय आपको एक आत्म-आत्म-संदर्भ की आवश्यकता है, तुरंत आपको यह पूछना चाहिए कि क्या आप इसे एक ग्राफ के रूप में मॉडल नहीं कर सकते हैं (कई संस्थाओं को एक-नोड में ध्वस्त कर सकते हैं)। हो सकता है कि बीच में कोई मामला हो जहां आप एक परिपत्र संदर्भ बनाते हैं लेकिन इसे ग्राफ़ के रूप में मॉडलिंग करना उचित नहीं है लेकिन मुझे इस पर बहुत संदेह है।
एक खतरा है कि लोग सोचते हैं कि उन्हें एक परिपत्र संदर्भ की आवश्यकता है लेकिन वास्तव में वे नहीं करते हैं। सबसे आम मामला "द-वन-ऑफ-वन-केस" है। उदाहरण के लिए, आपको एक ग्राहक मिला है जिसमें कई पते हैं जिनमें से एक को प्राथमिक पते के रूप में चिह्नित किया जाना चाहिए। इस स्थिति को मॉडल करना बहुत ही लुभावना है क्योंकि दो अलग-अलग रिश्तों में has_address और is_primary_address_of है लेकिन यह सही नहीं है। कारण यह है कि प्राथमिक पता उपयोगकर्ताओं और पते के बीच एक अलग संबंध नहीं है, बल्कि इसके बजाय यह है कि संबंध का एक विशेषता पता है। ऐसा क्यों है? क्योंकि इसका डोमेन उपयोगकर्ता के पते तक ही सीमित है और वहां के सभी पते नहीं हैं। आप किसी एक लिंक को चुनते हैं और इसे सबसे मजबूत (प्राथमिक) के रूप में चिह्नित करते हैं।
(अब डेटाबेस के बारे में बात करने जा रहे हैं) बहुत से लोग दो-रिश्तों के समाधान के लिए चुनते हैं क्योंकि वे "प्राथमिक" को एक अद्वितीय सूचक मानते हैं और एक विदेशी कुंजी एक सूचक की तरह है। तो विदेशी कुंजी का उपयोग करने के लिए बात होनी चाहिए, है ना? गलत। विदेशी कुंजी रिश्तों का प्रतिनिधित्व करती है लेकिन "प्राथमिक" एक रिश्ता नहीं है। यह एक आदेश का एक विकृत मामला है जहां एक तत्व सभी से ऊपर है और बाकी का आदेश नहीं दिया गया है। यदि आपको कुल ऑर्डर करने की आवश्यकता है, तो आप निश्चित रूप से इसे एक रिश्ते की विशेषता के रूप में मानेंगे क्योंकि मूल रूप से कोई अन्य विकल्प नहीं है। लेकिन जिस समय आप इसे पतित करते हैं, वहाँ एक विकल्प होता है और काफी भयानक होता है - कुछ ऐसा करने के लिए जो एक रिश्ते के रूप में एक रिश्ता नहीं है। तो यहाँ यह आता है - रिश्ता अतिरेक जो निश्चित रूप से कम करके आंका नहीं जाना है।
इसलिए, जब तक यह पूरी तरह से स्पष्ट नहीं हो जाता कि मैं जिस चीज से मॉडलिंग कर रहा हूं, यह एक स्पष्ट संदर्भ नहीं होने देता।
(ध्यान दें: यह डेटाबेस डिजाइन के लिए थोड़ा पक्षपाती है, लेकिन मैं शर्त लगा सकता हूं कि यह अन्य क्षेत्रों में भी लागू हो)