मुझे विशेष रूप से भ्रमित होने के लिए Grails में hasOne
का उपयोग मिलता है। उदाहरण के लिए, इस सवाल का क्या होता है जब एक Toone संबंध इस प्रकार घोषित किया जाता है पूछते हैं:
class Person {
static hasOne = [address: Address]
}
जैसा कि ऊपर कहा, इसका मतलब है जो पता तालिका में प्रदर्शित करने के person_id
विदेशी कुंजी, का कारण बनता है कि प्रत्येक पता ही बिंदु पर कर सकते हैं एक व्यक्ति। मुझे विचित्र लगता है, फिर भी, यह है कि कोड "एक व्यक्ति के पास एक पता" के रूप में लिखा गया है, वास्तविक परिणाम यह है कि "एक पते में एक व्यक्ति होता है"।
और वास्तव में, केवल ऊपर के रूप में परिभाषित किया गया है, एक ही व्यक्ति पर इंगित करने से एक से अधिक पता रिकॉर्ड को रोकने से कुछ भी नहीं (डेटाबेस स्तर पर) कुछ भी नहीं है, जिसका अर्थ है कि किसी व्यक्ति को वास्तव में एक पता नहीं होना चाहिए ।
दिलचस्प बात यह है कि आप एक ही डेटाबेस प्रतिनिधित्व करता है, तो आप इस तरह पता श्रेणी का निर्माण मिल चाहते हैं:
class Address {
Person person
}
person_id
विदेशी कुंजी सिर्फ पिछले उदाहरण में की तरह के रूप में, पता तालिका में होगा, लेकिन जाहिर है, आप उस संबंध को किसी भी तरीके से परिभाषित किए बिना कोड में पते से पते तक नहीं जा सकते हैं।
यह भी दिलचस्प है कि, यदि आप डेटाबेस में व्यक्ति से पता से कई रिश्तों का मॉडल कर रहे थे, तो आप एक ही टेबल लेआउट का उपयोग करेंगे। आप माता-पिता की प्राथमिक कुंजी (person_id) को बाल तालिका में डाल देंगे। डेटाबेस परिप्रेक्ष्य से, hasOne
का उपयोग उसी संरचना को बनाता है जो एक से अधिक रिश्तों को बनाएगा।
बेशक, हम केवल डेटाबेस टेबल नहीं बना रहे हैं, हम Grails डोमेन क्लासेस बना रहे हैं जिनके साथ कुछ व्यवहार है, और रिश्ते semantics के कुछ प्रवर्तन। इस विशेष व्यावसायिक उदाहरण में, आप शायद एक ही पता रिकॉर्ड को एकाधिक लोगों के साथ साझा नहीं करना चाहते हैं, आप बस अलग से पता स्टोर करना चाहते हैं (शायद उस दिन की तैयारी कर रहे हैं जब किसी व्यक्ति के पास एकाधिक पते हों)। मैं शायद इस दृष्टिकोण के लिए वोट चाहते हैं:
class Person {
Address address
static constraints = {
address unique:true
}
}
address_id
विदेशी कुंजी व्यक्ति तालिका में हो जाएगा, और अद्वितीय बाधा लागू करेंगे कि कोई भी दो व्यक्ति रिकॉर्ड एक ही पते पर ओर इशारा करते हैं।
यह समझ में आता है, धन्यवाद। मुझे यहां से एक मस्तिष्क फार्ट का थोड़ा सा खेद है। मैं grails तंत्र में लपेट गया और डेटाबेस परिप्रेक्ष्य से इसके बारे में सोचने के लिए वापस कदम नहीं उठाया। –