अशक्त "विदेशी कुंजी" से बचें। उनके कई नुकसान हैं।
एक संदर्भ पंक्ति में बाधा हमेशा लागू नहीं होती है जब विदेशी कुंजी में एक अशक्त होता है। हालाँकि, वह डिफ़ॉल्ट व्यवहार विभिन्न DBMS के बीच संगत नहीं है। कुछ DBMS अशक्त विदेशी कुंजियों के व्यवहार को बदलने के लिए कॉन्फ़िगरेशन विकल्पों का समर्थन करते हैं और कुछ नहीं करते हैं। SQL डेवलपर्स और उपयोगकर्ता इसलिए अस्पष्ट हो सकते हैं कि एक अशक्त विदेशी कुंजी बाधा वास्तव में डेटा अखंडता के दृष्टिकोण से क्या मतलब है। DBMS उत्पादों के बीच या यहां तक कि एक ही उत्पाद का उपयोग करने वाले विभिन्न सर्वरों के बीच डेटाबेस को पोर्ट करना असंगत परिणाम दे सकता है।
डेटाबेस डिज़ाइन टूल, इंटीग्रेशन टूल और अन्य सॉफ़्टवेयर हमेशा उनका सही ढंग से समर्थन नहीं करते हैं और उनके द्वारा उत्पादित परिणाम गलत हो सकते हैं।
विदेशी कुंजियों का उपयोग अक्सर जॉइन और अन्य क्वेरी लॉजिक में किया जाता है, उन उपयोगकर्ताओं के लिए समस्याओं को कंपाउंडिंग करता है जो सोचते हैं कि जब यह विशेष रूप से डीबीएमएस द्वारा लागू किए जा रहे लॉजिक को नहीं जानता है या नहीं जानता है तो यह प्रभाव में है।
जब कोई विदेशी कुंजी अशक्त हो, तो कुछ क्वेरी ऑप्टिमाइज़ेशन सुविधाएँ क्वेरी पुनर्लेखन और अन्य ऑप्टिमाइज़ेशन उपलब्ध नहीं हो सकती हैं।
तार्किक शब्दों में, एक अशक्त "विदेशी कुंजी" बाधा बहुत तार्किक अर्थ नहीं बनाती है। SQL मानक के अनुसार इस तरह की बाधा का उल्लंघन नहीं किया जा सकता है भले ही संदर्भित तालिका खाली हो। यह एक अशक्त का उपयोग करने के लिए सबसे आम कथित औचित्य में से एक का खंडन करता है - कि यह "अज्ञात" मामले का प्रतिनिधित्व करता है। यदि X के कोई मान्य मूल्य नहीं हैं, तो कोई भी "अज्ञात" X निश्चित रूप से एक वैध मूल्य नहीं हो सकता है - और फिर भी SQL इसे अनुमति देगा।
अशक्त विदेशी चाबियाँ पूरी तरह से अनावश्यक हैं। आप हमेशा किसी नई तालिका के लिए विदेशी कुंजी को विघटित कर सकते हैं या एक सुपरपाइप / उपप्रकार पैटर्न का उपयोग कर सकते हैं ताकि नल की आवश्यकता न हो। सादगी और सटीकता के हितों में नल को छोड़ना बेहतर होता है ताकि उन्हें अंदर रखा जा सके।