विदेशी कुंजियाँ संदर्भात्मक अखंडता प्रदान करती हैं। विदेशी कुंजी कॉलम में डेटा मान्य है - मान केवल वही हो सकता है जो विदेशी कुंजी में परिभाषित तालिका और कॉलम में पहले से मौजूद है। यह "खराब डेटा" को रोकने में बहुत प्रभावी है - कोई भी जो कुछ भी चाहता है उसे दर्ज नहीं कर सकता - संख्याएं, ASCII टेक्स्ट इत्यादि। इसका मतलब है कि डेटा सामान्यीकृत है - दोहराए जाने वाले मानों की पहचान की गई है और उन्हें अपनी तालिका में अलग कर दिया गया है, इसलिए कोई और चिंता नहीं है पाठ में केस संवेदनशीलता से निपटने के बारे में... और मान सुसंगत हैं। यह अगले भाग में ले जाता है - विदेशी कुंजी वे हैं जिनका उपयोग आप तालिकाओं को एक साथ जोड़ने के लिए करते हैं।
किसी उपयोगकर्ता के प्रोजेक्ट के लिए आपकी क्वेरी काम नहीं करेगी - आप USERS
से एक कॉलम का संदर्भ दे रहे हैं तालिका जब क्वेरी में तालिका का कोई संदर्भ नहीं है, और उस जानकारी को PROJECTS
से जोड़ने से पहले उस जानकारी को प्राप्त करने के लिए कोई सबक्वायरी उपयोग नहीं किया जा रहा है टेबल। आप वास्तव में क्या उपयोग करेंगे:
SELECT p.*
FROM PROJECTS p
JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'