टेबल रिलेशन को समझना
SQL सर्वर रिलेशनल डेटाबेस में तालिकाओं के बीच संबंधों को लागू करने के लिए विदेशी कुंजी जोड़ता है। आप जिस प्रकार के डेटा को स्टोर करना चाहते हैं, उसके आधार पर एक तालिका में एक-से-एक, एक-से-अनेक, या किसी अन्य तालिका के साथ कई-से-अनेक संबंध हो सकते हैं।
एक-से-एक संबंध सरल है और शायद ही कभी उपयोग किया जाता है। किसी विशेष तालिका में प्रत्येक रिकॉर्ड दूसरी तालिका में ठीक एक रिकॉर्ड से संबंधित है।
उदाहरण के लिए, आप उपयोगकर्ता के नाम, आईडी और लिंग को एक तालिका में संग्रहीत कर सकते हैं (उपयोगकर्ता तालिका) और उनके पते अलग-अलग तालिका में संग्रहीत किए जाएंगे (पता टेबल)। उपयोगकर्ता . में प्रत्येक रिकॉर्ड तालिका पते . में एक रिकॉर्ड के अनुरूप होगी टेबल। इसके विपरीत, पता . में प्रत्येक पता तालिका उपयोगकर्ता . में केवल एक रिकॉर्ड से संबंधित होगी टेबल।
एक-से-कई और अनेक-से-अनेक संबंध कहीं अधिक बार-बार होते हैं।
एक ऐसे परिदृश्य पर विचार करें जहां आप किसी संगठन के कर्मचारियों, विभागों, कर्मचारियों की बीमा कंपनियों और कर्मचारियों के कार्यालय के पते के बारे में जानकारी संग्रहीत करते हैं।
हम मानते हैं कि एक कर्मचारी केवल एक ही विभाग से संबंधित हो सकता है और केवल एक बीमा कंपनी की सदस्यता ले सकता है। हालांकि, विभागों और बीमा कंपनियों में कई कर्मचारी हो सकते हैं। विभाग और कर्मचारी तालिकाओं में एक-से-अनेक संबंध होंगे। इसी तरह, बीमा और कर्मचारी टेबल एक-से-अनेक संबंध होगा।
साथ ही, संगठन के कई कार्यालय हो सकते हैं, और एक कर्मचारी एक से अधिक कार्यालयों में काम कर सकता है। इसके अलावा, एक कार्यालय में कई कर्मचारी हो सकते हैं। इस मामले में, कार्यालय और कर्मचारी तालिकाओं में अनेक-से-अनेक संबंध होंगे।
कई-से-अनेक संबंध लागू करने के लिए, आपको एक लुक-अप तालिका बनानी होगी जो कई-से-अनेक संबंध में दो तालिकाओं को जोड़ती है। मूल तालिका में लुक-अप तालिका के साथ एक-से-अनेक संबंध होते हैं।
आइए कर्मचारी . के बीच अनेक-से-अनेक संबंध बनाने पर विचार करें और कार्यालय टेबल। आप एक नई लुक-अप तालिका तैयार करेंगे कर्मचारी_कार्यालय . फिर आप कर्मचारी . के बीच एक-से-अनेक संबंध बनाते हैं और कर्मचारी_कार्यालय टेबल और कार्यालय और कर्मचारी_कार्यालय टेबल.
आइए अब देखें कि इस चर्चा में विदेशी कुंजी कैसे फिट होती है।
विदेशी कुंजियाँ क्या हैं और आपको अनेक विदेशी कुंजियों की आवश्यकता क्यों है?
संबंधपरक डेटाबेस में, विदेशी कुंजियाँ विभिन्न प्रकार के डेटाबेस संबंधों को लागू करती हैं।
उदाहरण के लिए, SQL सर्वर में एक-से-अनेक संबंध लागू करने के लिए, आपको कई पर तालिका में एक विदेशी कुंजी जोड़ने की आवश्यकता है एक-से-अनेक संबंध के पक्ष।
विदेशी कुंजी प्राथमिक कुंजी या तालिका की विशिष्ट पहचान कुंजी का संदर्भ देती है जो एक . पर है मेज के किनारे। इसलिए, विभाग . के बीच एक-से-अनेक संबंध में और कर्मचारी टेबल जिन पर हमने ऊपर चर्चा की, कर्मचारी तालिका एक विदेशी कुंजी संग्रहीत करेगी जो विभाग . की प्राथमिक कुंजी का संदर्भ देती है टेबल।
उन परिदृश्यों में जहां एक तालिका में कई अन्य तालिकाओं के साथ संबंध हो सकते हैं, आपको एक तालिका में कई विदेशी कुंजियाँ जोड़ने की आवश्यकता होगी। कर्मचारी . के लिए तालिका में, आपको विदेशी कुंजियाँ जोड़ने की ज़रूरत है जो विभाग . की प्राथमिक कुंजियों का संदर्भ देती हैं तालिका और बीमा टेबल। इसी तरह, कर्मचारी_कार्यालय लुकअप तालिका में दो विदेशी कुंजियाँ होंगी जो कर्मचारी . की प्राथमिक कुंजियों का संदर्भ देती हैं और कार्यालय टेबल.
SQL सर्वर के साथ अनेक विदेशी कुंजियां जोड़ना
निम्न आरेख डेटाबेस स्कीमा दिखाता है जिसे आप हमारे सरल उदाहरण के लिए लागू करने जा रहे हैं:
यहां आप देख सकते हैं कि डेटाबेस में पांच टेबल हैं:कर्मचारी , बीमा , विभाग , कार्यालय , और कर्मचारी_कार्यालय ।
विभाग और कर्मचारी तालिकाओं में एक-से-अनेक संबंध होते हैं। इसी तरह, बीमा और कर्मचारी तालिकाओं में एक-से-अनेक संबंध भी होते हैं। कार्यालय और कर्मचारी तालिका में कर्मचारी_कार्यालय के साथ दो एक-से-अनेक संबंधों का उपयोग करके कई-से-अनेक संबंध लागू किए गए हैं लुकअप टेबल।
कर्मचारी तालिका में दो विदेशी कुंजियाँ हैं, Dep_Id , और Insur_Id जो विभाग . की प्राथमिक कुंजियों (Id) को संदर्भित करता है और बीमा टेबल, क्रमशः।
आइए अब SQL स्क्रिप्ट निष्पादित करें जो वर्णित डेटाबेस बनाता है।
बिना किसी विदेशी कुंजी के टेबल बनाकर शुरू करें। यदि आप विदेशी कुंजियों वाली तालिकाएँ बनाने का प्रयास करते हैं जो अन्य तालिकाओं का संदर्भ देती हैं जो अभी तक नहीं बनी हैं, तो आपको एक त्रुटि मिलेगी।
हमारे डेटाबेस स्कीमा में, विभाग , संगठन , और कार्यालय टेबल में कोई विदेशी कुंजी नहीं है। निम्न स्क्रिप्ट संगठन . नामक एक डमी डेटाबेस बनाती है और इसमें तीन टेबल जोड़ता है:विभाग , बीमा , और कार्यालय ।
CREATE DATABASE Organization
USE Organization
CREATE TABLE Department
(
Id INT PRIMARY KEY,
Name VARCHAR (50) NOT NULL
)
USE Organization
CREATE TABLE Insurance
(
Id INT PRIMARY KEY,
Name VARCHAR (50) NOT NULL
)
USE Organization
CREATE TABLE Office
(
Id INT PRIMARY KEY,
Name VARCHAR (50) NOT NULL
)
आप विदेशी कुंजी संदर्भ का उपयोग कर सकते हैं SQL सर्वर में एक विदेशी कुंजी संबंध लागू करने के लिए बाधा। तालिका का नाम निर्दिष्ट करें। फिर कोष्ठक में विदेशी कुंजी को संदर्भित करने के लिए कॉलम नाम निर्दिष्ट करें।
निम्न स्क्रिप्ट कर्मचारी बनाती है विदेशी कुंजियों वाली तालिका Dep_Id और Insur_Id विभाग . में संदर्भ आईडी कॉलम और बीमा क्रमशः टेबल।
USE Organization
CREATE TABLE Employee
(
Id INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR (50) NOT NULL,
Age INT,
Gender VARCHAR (50),
Dep_Id int FOREIGN KEY REFERENCES Department(Id),
Insur_Id int FOREIGN KEY REFERENCES Insurance(Id)
)
अंत में, निम्न स्क्रिप्ट कर्मचारी_कार्यालय का निर्माण करती है दो विदेशी कुंजियों वाली तालिका Emp_Id और Office_Id ।
USE Organization
CREATE TABLE Employee_Office
(
Id INT PRIMARY KEY IDENTITY(1,1),
Emp_Id int FOREIGN KEY REFERENCES Employee(Id),
Office_Id int FOREIGN KEY REFERENCES Office(Id)
)
एकाधिक विदेशी कुंजियों वाली तालिकाओं में रिकॉर्ड सम्मिलित करना
एकाधिक विदेशी कुंजियों वाली तालिकाओं में रिकॉर्ड सम्मिलित करने के लिए, आपको पहले उन तालिकाओं में संगत रिकॉर्ड बनाना चाहिए जो मूल तालिकाओं में विदेशी कुंजियों द्वारा संदर्भित हैं।
व्यवहार में, कर्मचारी . में रिकॉर्ड डालने के लिए तालिका में, हमें पहले विभाग . में संबंधित रिकॉर्ड बनाना होगा और बीमा टेबल। ऐसा इसलिए है क्योंकि कर्मचारी तालिका में विभाग . को संदर्भित करने वाली विदेशी कुंजियाँ हैं और बीमा टेबल.
सबसे पहले, हम कर्मचारी . में रिकॉर्ड जोड़ने का प्रयास करते हैं विभाग . को संदर्भित करने वाली विदेशी कुंजियों को निर्दिष्ट किए बिना तालिका और कर्मचारी टेबल.
INSERT INTO Employee
VALUES ('James', 10, 'Male'),
('Sara', 7, 'Female')
आपको निम्न त्रुटि दिखाई देगी। ऐसा इसलिए होता है क्योंकि निर्दिष्ट मानों की संख्या कर्मचारी . में कॉलम की संख्या से मेल नहीं खाती है टेबल।
आइए Dep_Id . के लिए कुछ डमी मान जोड़ने का प्रयास करें और Insur_Id कॉलम (विदेशी कुंजी):
INSERT INTO Employee
VALUES ('James', 10, 'Male', 2, 2),
('Sara', 7, 'Female', 1, 1)
आपको निम्न त्रुटि दिखाई देगी क्योंकि विभाग और बीमा तालिकाओं में क्रमशः आईडी 2 और 1 के रिकॉर्ड नहीं हैं।
आइए अब विभाग . में रिकॉर्ड डालें , बीमा , और कार्यालय टेबल:
INSERT INTO Department
VALUES (1, 'Finance'),
(2, 'HR')
INSERT INTO Insurance
VALUES (1, 'Company A'),
(2, 'Company B')
INSERT INTO Office
VALUES (1, 'Paris'),
(2, 'London')
चूंकि विभाग और बीमा तालिका में अब आईडी 2 और 1 के साथ रिकॉर्ड हैं, आप कर्मचारी . में रिकॉर्ड सम्मिलित कर सकते हैं नीचे दिखाए गए अनुसार संबंधित विदेशी कुंजी मानों वाली तालिकाएँ:
INSERT INTO Employee
VALUES ('James', 10, 'Male', 2, 2),
('Sara', 7, 'Female', 1, 1)
कर्मचारी_कार्यालय में कुछ रिकॉर्ड डालें टेबल। लेकिन इससे पहले, आइए कर्मचारी तालिका में आईडी कॉलम मान देखें:
SELECT * FROM Employee
कर्मचारी कॉलम में 2 और 3 के आईडी मान वाले रिकॉर्ड हैं। आप कर्मचारी_कार्यालय . में रिकॉर्ड सम्मिलित कर सकते हैं तालिका जहां Emp_Id कॉलम में 2 या 3 होते हैं, और Office_Id कॉलम में 1 या 2 शामिल हैं।
INSERT INTO Employee_Office
VALUES (2, 1),
(2, 2),
(3,2)
एकाधिक विदेशी कुंजियों वाली तालिकाओं से रिकॉर्ड का चयन करना
एकाधिक विदेशी कुंजियों वाली तालिकाओं से रिकॉर्ड चुनने के लिए, आपको जॉइन की आवश्यकता होगी।
निम्न स्क्रिप्ट नाम . के मान लौटाती है और लिंग कर्मचारी . से कॉलम तालिका और नाम विभाग . से कॉलम और बीमा टेबल। चूंकि कर्मचारी तालिका में दो विदेशी कुंजियाँ हैं, आपको दो का उपयोग करना होगा बायाँ जॉइन बयान:
SELECT
Employee.Name AS Employee_Name,
Employee.Gender,
Department.Name as Department_Name,
Insurance.Name as Insurance
FROM Employee
LEFT JOIN Department ON Employee.Dep_Id = Department.Id
LEFT JOIN Insurance ON Employee.Insur_Id = Insurance.Id
इसी तरह, आप नाम . के मानों का चयन कर सकते हैं और लिंग कर्मचारी . से कॉलम तालिका और नाम कार्यालय . से कॉलम लुकअप टेबल कर्मचारी_कार्यालय . पर दो LEFT JOIN स्टेटमेंट का उपयोग कर तालिका ।
SELECT
Employee.Name AS Employee_Name,
Employee.Gender,
Office.Name as Office_Name
FROM Employee
LEFT JOIN Employee_Office ON Employee.Id = Employee_Office.Emp_Id
LEFT JOIN Office ON Office.Id = Employee_Office.Office_Id
एकाधिक विदेशी कुंजियों वाली तालिकाओं से रिकॉर्ड हटाना
आप कई विदेशी कुंजियों वाली तालिकाओं से रिकॉर्ड हटा सकते हैं। हालांकि, सुनिश्चित करें कि तालिका किसी अन्य कॉलम में किसी विदेशी कुंजी द्वारा संदर्भित नहीं है।
उदाहरण के लिए, आपको विभाग . से रिकॉर्ड नहीं हटाने चाहिए Emp_Id . द्वारा संदर्भित तालिका कर्मचारी . में विदेशी कुंजी टेबल। यहां एक उदाहरण दिया गया है:
DELETE FROM Department WHERE Id = 1
विभाग . में आईडी 1 के साथ रिकॉर्ड के बाद से तालिका Emp_Id . द्वारा संदर्भित है कर्मचारी . में कॉलम तालिका, आप इसे उपरोक्त त्रुटि में बताए अनुसार हटा नहीं सकते। सबसे पहले, आपको कर्मचारी . से सभी रिकॉर्ड हटाने होंगे तालिका जहां Emp_Id है 1.
कर्मचारी तालिका में केवल 1 ऐसा रिकॉर्ड होता है (3 के आईडी मान के साथ)। आइए निम्न क्वेरी के साथ उस रिकॉर्ड को हटाने का प्रयास करें:
DELETE FROM Employee WHERE Id = 3
आपको वह त्रुटि दिखाई देगी जो तब होती है क्योंकि कर्मचारी_कार्यालय इसमें एक रिकॉर्ड होता है जहां Emp_Id विदेशी कुंजी कॉलम में 3 रिकॉर्ड होते हैं। इसलिए आपको पहले उस रिकॉर्ड को हटाना होगा:
निम्न स्क्रिप्ट Emp_Id . के साथ रिकॉर्ड को हटा देती है कर्मचारी_कार्यालय . से 3 का मान टेबल।
DELETE FROM Employee_Office WHERE Emp_Id = 3
अंत में, निम्न स्क्रिप्ट कर्मचारी . से 1 के आईडी मान वाले रिकॉर्ड को हटा देती है और विभाग कॉलम।
DELETE FROM Employee WHERE Id = 1
DELETE FROM Department WHERE Id = 1
निष्कर्ष
इस प्रकार, हमने विदेशी कुंजियों को जोड़ने के लिए SQL क्वेरी का उपयोग करके SQL सर्वर तालिकाओं में कई विदेशी कुंजियों को जोड़ने की जांच की है। आशा है कि लेख में उपयोग किए गए इन व्यावहारिक उदाहरणों ने भी आपको इस विषय में महारत हासिल करने में मदद की है।
जब आप कार्य कार्यों को करने के लिए विदेशी कुंजियों और तालिका निर्भरताओं से निपटते हैं, तो रूटीन को सरल बनाने के लिए सॉफ़्टवेयर टूल का उपयोग करना भी सहायक होता है। तालिकाओं के बीच सभी निर्भरताओं को देखने के लिए एक समर्पित समाधान के रूप में विज़ुअल डेटाबेस आरेख की अत्यधिक अनुशंसा की जाती है। साथ ही, आप संपूर्ण डेटाबेस के लिए सटीक दस्तावेज़ीकरण उत्पन्न कर सकते हैं, डेटाबेस डॉक्यूमेंटर सुविधा के साथ इसकी जटिलता चाहे जो भी हो।
इन दोनों उपकरणों का उद्देश्य मैनुअल लोड को कम करना, प्रक्रियाओं को स्वचालित करना और आपके कंधों से कुछ बोझ हटाने के लिए प्रदर्शन को तेज करना है।