हम यह कहने के लिए एक SQL FK (विदेशी कुंजी) बाधा की घोषणा करते हैं कि स्तंभों की सूची के लिए एक उप-मान हमेशा स्तंभों की सूची के लिए एक उप-मान के रूप में कहीं और दिखाई देता है जो SQL PK (प्राथमिक कुंजी) या UNIQUE NOT NULL बनाता है। जब भी यह अन्य घोषणाओं द्वारा पहले से ही निहित न हो तो इसे घोषित करें। इसे घोषित SQL PK (प्राथमिक कुंजी) या UNIQUE NOT NULL में कॉलम सूची का संदर्भ देना चाहिए। तो आपको यह घोषित करना होगा कि संदर्भित तालिका में, भले ही वह पहले से ही NOT NULLs द्वारा निहित हो और एक छोटा निहित PK या UNIQUE NOT NULL।
इसलिए ध्यान दें कि SQL PK अनिवार्य रूप से अद्वितीय होने के संबंधपरक अर्थ में एक PK नहीं है, लेकिन इसमें एक छोटा अद्वितीय स्तंभ सेट नहीं है, अर्थात एक सुपरकी होने के नाते जिसमें एक छोटी सुपरकी नहीं है, यानी एक न्यूनतम/इरेड्यूसेबल सुपरकी होना, यानी CK होना ( उम्मीदवार कुंजी).
यहां, आपको buildingno
. को बदलने की आवश्यकता हो सकती है &roomno
एक-एक करके FK, (buildingno, roomno)
Room
. के लिए :
CONSTRAINT SESSION_FK12
FOREIGN KEY(BUILDINGNO,ROOMNO) REFERENCES ROOM(BUILDINGNO,ROOMNO)
वह हो सकता है अपनी तालिकाओं के अर्थ के लिए उपयुक्त रहें--जो वास्तव में आप नहीं देते हैं, इसलिए हम नहीं जान सकते, हम केवल अनुमान लगा सकते हैं। जैसे अगर buildingno
भी सकता है कमरे में PK या UNIQUE NOT NULL घोषित किया जाए, जो कि जब roomno IS NOT NULL
. है वास्तव में संगत है और इसका अर्थ है (buildingno, roomno)
PK या UNIQUE NOT NULL घोषित किया जा सकता है, हो सकता है कि आपका FK दाएं हो लेकिन आपका Room
घोषणाएं अपर्याप्त हैं।
जब स्तंभों की सूची के लिए एक सबरो मान हमेशा कॉलम की सूची के लिए एक सबरो मान के रूप में कहीं और दिखाई देता है जिसे IND (समावेश निर्भरता) बाधा कहा जाता है। SQL में गैर-FK IND घोषित करने का कोई तरीका नहीं है; हमें ट्रिगर्स द्वारा लागू करना चाहिए। वह भी हो सकता है कि आपको अपने डिजाइन के लिए क्या चाहिए।
आप FK को buildingno
. से रख सकते हैं Building
. के लिए , लेकिन यह मेरे द्वारा सुझाए गए FK और buildingno
में FK द्वारा निहित है Room
. पर संदर्भ Building
।
समग्र प्राथमिक कुंजी का हिस्सा संदर्भित करना