Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

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

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

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

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

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

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एंटिटी फ्रेमवर्क से एकल रिकॉर्ड हटाएं?

  2. SQL सर्वर (T-SQL) में डेटाटाइमऑफ़सेट मान पर समय क्षेत्र ऑफ़सेट बदलें

  3. SQL सर्वर:किसी क्वेरी के साथ कॉलम का डिफ़ॉल्ट मान ज्ञात करें

  4. मुझे कैसे पता चलेगा कि विदेशी कुंजी उल्लंघन के कारण SQLException को फेंक दिया गया था?

  5. डेटाबेस मेल प्रोफ़ाइल (SSMS) हटाएं