दिलचस्प पोस्ट
क्या कोई कारण है कि हम रूबी में "रिवर्स रेंज" पर फिर से नहीं चल सकते? Android पर एक SOAP वेब सेवा को कैसे कॉल करें वेब फ़ॉर्म सबमिट करने के लिए एन्टर कीप्रेस को कैसे रोकें? जावा में अंतर धागा संचार मैं एमएस एक्सेस डाटाबेस से टेबल नाम कैसे प्राप्त करूं? मैं एसएसीएल में वीएआरएआरएआर से क्यों चुनूँगा? ## प्रीप्रोसेसर ऑपरेटर और गेचर्स के विचार के लिए क्या आवेदन हैं? Sys अपरिभाषित है जावा में अंतिम कक्षा का उपयोग कैसे सी # में किसी अन्य प्रक्रिया के लिए पैरामीटर पारित करने के लिए क्यों एक शब्दकोश "का आदेश दिया" नहीं है? मैं PHP से पीएनजी मेटाडेटा कैसे पढ़ सकता हूं? फेसबुक से लाइव लाइव टोकन प्राप्त करें जावास्क्रिप्ट में "अपरिभाषित" कैसे जांचें? फ़ॉर्म में वर्ण एन्कोडिंग को सेट करना Internet Explorer के लिए सबमिट करें

क्या कोई विदेशी कुंजी नल और / या डुप्लिकेट हो सकती है?

कृपया मेरे लिए दो चीजों को स्पष्ट करें:

  1. क्या कोई विदेशी कुंजी नल हो सकती है?
  2. क्या विदेशी कुंजी डुप्लिकेट हो सकती है?

जैसा कि मुझे पता है उतना उचित है, विदेशी NULL उपयोग नहीं किया जाना चाहिए, लेकिन मेरे कुछ अनुप्रयोग में मैं ओरेकल और SQL सर्वर दोनों में NULL इनपुट करने में सक्षम हूं, और मुझे नहीं पता कि क्यों

वेब के समाधान से एकत्रित समाधान "क्या कोई विदेशी कुंजी नल और / या डुप्लिकेट हो सकती है?"

संक्षिप्त उत्तर: हाँ, यह नल या डुप्लिकेट हो सकता है।

मैं समझाना चाहता हूं कि एक विदेशी कुंजी को रिक्त होने की आवश्यकता क्यों हो सकती है या अनूठा होना चाहिए या नहीं अद्वितीय सबसे पहले एक विदेशी कुंजी को याद रखना जरूरी है कि उस क्षेत्र का मान पहले एक अलग तालिका (मूल तालिका) में मौजूद होना चाहिए। यह सभी एफके परिभाषा के अनुसार है। परिभाषा द्वारा अशक्त एक मूल्य नहीं है। शून्य मतलब है कि हम अभी तक पता नहीं है कि मूल्य क्या है

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

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

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

1 – हां, कम से कम SQL Server 2000 के बाद से

2 – हां, जब तक यह एक UNIQUE बाधा नहीं है या एक अद्वितीय सूचकांक से जुड़ा हुआ है

घोड़े के मुंह से:

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

विदेशी कुंजी पर कोई प्रतिबंध नहीं है

जब कोई अन्य बाधाओं को विदेशी कुंजी पर परिभाषित नहीं किया जाता है, तो बच्चे की सारणी में पंक्तियों की कोई भी संख्या एक ही मूल कुंजी मान को संदर्भित कर सकती है। यह मॉडल विदेशी कुंजी में नाखूनों की अनुमति देता है …

विदेशी कुंजी पर नल बाध्य नहीं है

जब किसी विदेशी कुंजी में नल की अनुमति नहीं होती है, तो बच्चे की तालिका में प्रत्येक पंक्ति को स्पष्ट रूप से मूल कुंजी में मान संदर्भित करना चाहिए क्योंकि विदेशी कुंजी में नल की अनुमति नहीं है।

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

विदेशी कुंजी पर अद्वितीय प्रतिबंध

जब एक अद्वितीय बाध्यता को विदेशी कुंजी पर परिभाषित किया जाता है, तो बच्चे की तालिका में केवल एक ही पंक्ति एक दिये गए मूल कुंजी को संदर्भ कर सकती है। यह मॉडल विदेशी कुंजी में नाखूनों की अनुमति देता है

यह मॉडल माता-पिता और विदेशी कुंजी के बीच एक-से-एक-एक संबंध स्थापित करता है जो विदेशी कुंजी में अनिर्धारित मान (नल) की अनुमति देता है। उदाहरण के लिए, मान लें कि कर्मचारी तालिका में कंपनी बीमा योजना में एक कर्मचारी सदस्यता संख्या का उल्लेख करते हुए, मेम्बरनो नामक एक स्तंभ था इसके अलावा, INSURANCE नामक एक तालिका में एक प्राथमिक कुंजी है मेम्बरो, और तालिका के अन्य कॉलम एक कर्मचारी बीमा पॉलिसी से संबंधित संबंधित जानकारी रखते हैं। कर्मचारी तालिका में MEMBERNO दोनों एक विदेशी कुंजी और एक अद्वितीय कुंजी होना चाहिए:

  • EMP_TAB और INSURANCE तालिकाओं (विदेशी कुंजी बाधा) के बीच संदर्भित अखंडता नियमों को लागू करने के लिए

  • यह गारंटी करने के लिए कि प्रत्येक कर्मचारी को एक अद्वितीय सदस्यता संख्या (अद्वितीय कुंजी संख्या) है

विदेशी कुंजी पर अद्वितीय और नाल बाध्यताएं

जब दोनों अद्वितीय और नाबालिग बाधाओं को विदेशी कुंजी पर परिभाषित किया जाता है, तो बच्चे की तालिका में केवल एक ही पंक्ति एक दिये गए मूल कुंजी को संदर्भित कर सकती है, और क्योंकि विदेशी मानों में शून्य मानों की अनुमति नहीं है, बच्चे की तालिका में प्रत्येक पंक्ति को स्पष्ट रूप से संदर्भ देना चाहिए मूल कुंजी में एक मान

यह देखो:

ओरेकल 11 जी लिंक

हां विदेशी कुंजी नल हो सकती है, जैसा कि वरिष्ठ प्रोग्रामर द्वारा ऊपर बताया गया है … मैं एक और परिदृश्य जोड़ूंगा जहां विदेशी कुंजी को रिक्त होना आवश्यक होगा …. मान लें कि हमारे पास एक टिप्पणी में तालिकाओं, चित्र और वीडियो हैं, जो तस्वीरों पर टिप्पणियों की अनुमति देता है वीडियो। टिप्पणी तालिका में हम प्राथमिक कुंजी टिप्पणी आईडी के साथ दो विदेशी कुंजी चित्र इडी, और वीडियो बना सकते हैं। इसलिए जब आप किसी वीडियो पर टिप्पणी करते हैं, केवल वीडियो आईडी की आवश्यकता होगी और तस्वीर आईडी रिक्त होगी … और अगर आप किसी तस्वीर पर टिप्पणी करते हैं तो केवल चित्र ID आवश्यक होगा और वीडियो आईडी रिक्त हो जाएगी …

ओरेकल सिंटैक्स का उपयोग करते हुए यहां एक उदाहरण है:
सबसे पहले हम एक तालिका COUNTRY बनाते हैं

 CREATE TABLE TBL_COUNTRY ( COUNTRY_ID VARCHAR2 (50) NOT NULL ) ; ALTER TABLE TBL_COUNTRY ADD CONSTRAINT COUNTRY_PK PRIMARY KEY ( COUNTRY_ID ) ; 

तालिका बनाएं PROVINCE

 CREATE TABLE TBL_PROVINCE( PROVINCE_ID VARCHAR2 (50) NOT NULL , COUNTRY_ID VARCHAR2 (50) ); ALTER TABLE TBL_PROVINCE ADD CONSTRAINT PROVINCE_PK PRIMARY KEY ( PROVINCE_ID ) ; ALTER TABLE TBL_PROVINCE ADD CONSTRAINT PROVINCE_COUNTRY_FK FOREIGN KEY ( COUNTRY_ID ) REFERENCES TBL_COUNTRY ( COUNTRY_ID ) ; 

यह ओरेकल में पूरी तरह से ठीक चलाता है दूसरी तालिका में COUNTRY_ID विदेशी कुंजी को नोटिस नहीं है "NOT NULL"

अब प्रोविंस तालिका में एक पंक्ति डालने के लिए, केवल PROVINCE_ID को निर्दिष्ट करने के लिए पर्याप्त है हालांकि, अगर आपने COUNTRY_ID को भी निर्दिष्ट करना चुना है, तो यह पहले से ही COUNTRY तालिका में मौजूद होना चाहिए।

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

अब, गैर-पहचान वाले संबंधों का उदाहरण जहां कार्डिनलिटी "शून्य" (गैर-पहचान) हो सकती है, जब हम एक इकाई में एक रिकार्ड / ऑब्जेक्ट कहते हैं-एक "हो सकता है" या "हो सकता है" रिकॉर्ड के संदर्भ के रूप में कोई मान न हो / एस एक अन्य इकाई बी में

जैसा कि, इकाई-ए का एक रिकार्ड दूसरे इकाई बी के अभिलेखों की पहचान करने की संभावना है, इसलिए इकाई-बी के रिकॉर्ड की पहचान-मूल्य रखने के लिए इकाई-बी में एक स्तंभ होना चाहिए। एंटिटी-ए में कोई रिकॉर्ड इकाई-बी में रिकार्ड / एस (या ऑब्जेक्ट्स) को पहचानता है, तो यह कॉलम "नल" हो सकता है

ऑब्जेक्ट ओरिएंटेड (वास्तविक दुनिया) प्रतिमान में, ऐसी परिस्थिति होती है जब क्लास-बी का एक ऑब्जेक्ट जरूरी नहीं कि इसके अस्तित्व के लिए क्लास-ए के ऑब्जेक्ट पर (दृढ़ता से युग्मित) निर्भर करता है, जिसका मतलब है क्लास-बी क्लास- क्लास-ए में कक्षा-ए का एक ऑब्जेक्ट "कंटेन" (कंटेनमेंट) हो सकता है, क्योंकि कक्षा-बी के ऑब्जेक्ट की अवधारणा के विरोध में कक्षा (ए) का एक ऑब्जेक्ट होना चाहिए, इसके लिए क्लास- बी) निर्माण

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

मुझे लगता है कि एक मेज की विदेशी कुंजी किसी अन्य तालिका के लिए प्राथमिक कुंजी होती है। इसलिए यह नाक की अनुमति नहीं देगा। इसलिए विदेशी कुंजी में शून्य मूल्य होने का कोई सवाल ही नहीं है।