आप GUI या SQL स्क्रिप्ट का उपयोग करके तालिकाओं के बीच संबंध बना सकते हैं। यहाँ, मैं दोनों विधियों को प्रदर्शित करता हूँ।
रिलेशनल डेटाबेस डिज़ाइन में, एक रिलेशनशिप वह जगह है जहाँ दो या दो से अधिक तालिकाएँ एक साथ जुड़ी होती हैं क्योंकि उनमें संबंधित डेटा होता है। यह उपयोगकर्ताओं को कई तालिकाओं में संबंधित डेटा के लिए क्वेरी चलाने में सक्षम बनाता है।
यहां, हम निम्नलिखित संबंध बनाएंगे।
विधि
यहां बताया गया है कि हम इसे कैसे करेंगे:
- हम एसक्यूएल का उपयोग करेंगे एल्बम बनाने के लिए तालिका और एक संबंध।
- हम जीयूआई का उपयोग करेंगे अन्य संबंध बनाने के लिए।
इस तरह, आपको संबंध बनाने के दोनों तरीके देखने को मिलेंगे।
हमें केवल एक तालिका बनाने की आवश्यकता है क्योंकि हमने इस ट्यूटोरियल में पहले ही इनमें से दो तालिकाएँ बना ली हैं ( कलाकार GUI और शैलियों . के माध्यम से तालिका SQL का उपयोग कर तालिका)।
SQL का उपयोग करके संबंध बनाएं
SSMS में एक नई क्वेरी विंडो खोलें और निम्न कोड चलाएँ:
CREATE TABLE Albums ( AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY, AlbumName nvarchar(255) NOT NULL, ReleaseDate date NOT NULL, ArtistId int NOT NULL, GenreId int NOT NULL CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId) REFERENCES dbo.Artists (ArtistId) ON DELETE NO ACTION ON UPDATE NO ACTION );
उस कथन का पहला भाग तालिका बनाता है।
अंतिम भाग रिश्ते को परिभाषित करता है। यह हिस्सा:
CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId) REFERENCES dbo.Artists (ArtistId) ON DELETE NO ACTION ON UPDATE NO ACTION
पहली दो पंक्तियाँ संबंध बनाती हैं। वे Albums.ArtistId . के बीच एक विदेशी कुंजी बाधा उत्पन्न करते हैं कॉलम और Artist.ArtistId कॉलम।
अंतिम दो पंक्तियाँ निर्दिष्ट करती हैं कि SQL सर्वर को क्या करना चाहिए यदि कोई पैरेंट रिकॉर्ड को हटाने या अद्यतन करने का प्रयास करता है जिसे चाइल्ड टेबल में रिकॉर्ड द्वारा संदर्भित किया जा रहा है। इस मामले में, NO ACTION
इसका मतलब है कि डिलीट/अपडेट आगे नहीं बढ़ेगा। उपयोगकर्ता को बस एक त्रुटि मिलेगी।
आप इसे ON DELETE CASCADE
. में बदल सकते हैं यदि आप माता-पिता और बच्चे को एक बार में हटाने में सक्षम होना चाहते हैं (यानी हटाना माता-पिता से बच्चे तक पहुंच जाएगा)। ON UPDATE CASADE
. का उपयोग करके अपडेट पर भी यही तर्क लागू होता है ।
NO ACTION
डिफ़ॉल्ट मान है, इसलिए हम कोड की उन अंतिम दो पंक्तियों के बिना कर सकते थे। हालांकि, मैंने इसे शामिल किया, क्योंकि विदेशी कुंजी बाधाओं को बनाते समय यह सोचना एक महत्वपूर्ण कारक है।
विदेशी कुंजी प्रतिबंध क्या है?
एक विदेशी कुंजी बाधा इस तालिका और दूसरी तालिका के बीच संबंध को परिभाषित करता है। जब आप एक विदेशी कुंजी बाधा बनाते हैं, तो आप इसे बच्चे . में एक विशिष्ट कॉलम के विरुद्ध बनाते हैं तालिका, पैरेंट . में एक विशिष्ट कॉलम को संदर्भित करने के लिए टेबल।
यह चाइल्ड टेबल के कॉलम को विदेशी कुंजी . बनाता है . बाधा यह सुनिश्चित करती है कि इस (विदेशी कुंजी) कॉलम में जाने वाला कोई भी मान मूल तालिका के प्राथमिक कुंजी कॉलम के मान से मेल खाता हो। अगर कोई ऐसा मान दर्ज करने का प्रयास करता है जो मूल तालिका के प्राथमिक कुंजी कॉलम में किसी मान से मेल नहीं खाता है, तो SQL सर्वर एक त्रुटि फेंक देगा।
यह संदर्भात्मक अखंडता को लागू करने में मदद करता है। यह हमें अनाथ रिकॉर्ड (बाल रिकॉर्ड जिनमें कोई माता-पिता नहीं है) होने से रोकता है। या हमारे उदाहरण में, ऐसे एल्बम जो किसी कलाकार से संबद्ध नहीं हैं।
GUI के माध्यम से संबंध बनाएं
अब हम SQL सर्वर प्रबंधन स्टूडियो के GUI के माध्यम से अन्य संबंध बनाएंगे।
उपरोक्त लिपि में इसे शामिल करना आसान होता लेकिन मैं संबंध बनाने के दोनों तरीकों का प्रदर्शन करना चाहता था।
-
टेबल डिज़ाइनर में चाइल्ड टेबल खोलें
चाइल्ड टेबल पर राइट-क्लिक करें (हमारे नए बनाए गए एल्बम टेबल) और डिज़ाइन . चुनें प्रासंगिक मेनू से।
यदि आप ऑब्जेक्ट ब्राउज़र में अपनी नई बनाई गई तालिका नहीं देख सकते हैं, तो संभवतः आपको ऑब्जेक्ट ब्राउज़र को रीफ़्रेश करना होगा।
टेबल्स पर राइट-क्लिक करें नोड करें और रीफ़्रेश करें . चुनें ।
-
विदेशी कुंजी संबंध संवाद खोलें
टेबल डिज़ाइनर> संबंध चुनें... शीर्ष मेनू से।
-
संबंध जोड़ें
विदेशी कुंजी संबंध संवाद आपको तालिका के लिए कोई भी मौजूदा संबंध दिखाएगा। तालिका बनाते समय हम उस संबंध को देख सकते हैं जिसे हमने पहले स्थापित किया था।
जोड़ें . क्लिक करें एक और रिश्ता जोड़ने के लिए।
-
टेबल और कॉलम की विशिष्टता चुनें
चयनित संबंध . में दूसरे के ऊपर एक नया संबंध दिखाई देता है FK_Albums_Albums . के नाम वाली सूची ।
यह सुनिश्चित करना कि नया संबंध चुना गया है, टेबल्स और कॉलम विशिष्टता पर क्लिक करें दाएँ फलक में। संपत्ति के दाईं ओर एक दीर्घवृत्त दिखाई देता है।
दीर्घवृत्त क्लिक करें (... ) टेबल्स और कॉलम डायलॉग बॉक्स लॉन्च करने के लिए।
-
टेबल और कॉलम डायलॉग बॉक्स
यहां, आप बाएं फलक पर प्राथमिक कुंजी तालिका और दाईं ओर विदेशी कुंजी तालिका का चयन करते हैं।
- प्राथमिक कुंजी तालिका के अंतर्गत: शैलियों . का चयन करें तालिका के रूप में और GenreId कॉलम के रूप में।
- विदेशी कुंजी तालिका के अंतर्गत: एल्बम . चुनें तालिका के रूप में और GenreId कॉलम के रूप में।
क्लिक करें ठीक ।
SQL सर्वर संबंध के लिए एक नाम सुझाएगा। आप चाहें तो इसे एडिट कर सकते हैं। अन्यथा, इसे वैसे ही रहने दें।
-
संबंध
आपका संबंध अब विदेशी कुंजी संबंध संवाद बॉक्स में सही ढंग से प्रदर्शित होगा।
बंद करें . क्लिक करें ।
-
रिश्तों को सहेजना
जब तक आप तालिका नहीं सहेजते, आपका संबंध सहेजा नहीं जाएगा. जब आप टेबल को सेव करते हैं, तो आपको शायद एक चेतावनी मिलेगी कि दो टेबल सेव हो जाएंगी। यह अपेक्षित है, क्योंकि संबंध दो तालिकाओं को प्रभावित करता है।
हां पर क्लिक करें दोनों टेबल को सेव करने के लिए।
यदि आप टेबल डिज़ाइनर> संबंध... . चुनते हैं पैरेंट टेबल के लिए, आप वहां संबंध भी देखेंगे।