SQL FOREIGN KEY Constraint क्या हैं?
विदेशी कुंजी बाधा का उपयोग उन परिचालनों को रोकने के लिए किया जाता है जो तालिकाओं के बीच लिंक को नष्ट कर सकते हैं।
विदेशी कुंजी एक तालिका में एक फ़ील्ड (या फ़ील्ड का सेट) है जो किसी अन्य तालिका में प्राथमिक कुंजी को संदर्भित करती है।
विदेशी कुंजी वाली तालिका को चाइल्ड तालिका कहा जाता है और प्राथमिक कुंजी वाली तालिका को संदर्भित या मूल तालिका कहा जाता है।
महत्वपूर्ण नोट:
विदेशी कुंजी बाधा अमान्य डेटा को विदेशी कुंजी कॉलम में सम्मिलित करने से रोकती है क्योंकि यह मूल तालिका में मानों में से एक होना चाहिए।
उदाहरण तालिकाएँ
निम्नलिखित दो तालिकाएँ देखें:
व्यक्तियों की तालिका
| PersonID | LastName | FirstName | Age |
|---|---|---|---|
| 1 | Hansen | Ola | 30 |
| 2 | Svendson | Tove | 23 |
| 3 | Pettersen | Kari | 20 |
आदेश तालिका
| OrderID | OrderNumber | PersonID |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 2 |
| 4 | 24562 | 1 |
संबंध विश्लेषण:
"ऑर्डर" तालिका में "PersonID" कॉलम "व्यक्ति" तालिका में "PersonID" कॉलम को इंगित करता है।
"व्यक्ति" तालिका में "PersonID" कॉलम प्राथमिक कुंजी है।
"ऑर्डर" तालिका में "PersonID" कॉलम विदेशी कुंजी है।
तालिका बनाने में SQL विदेशी कुंजी
"ऑर्डर" तालिका बनाते समय "PersonID" कॉलम पर एक विदेशी कुंजी बनाने के लिए निम्नलिखित SQL का उपयोग किया जाता है:
MySQL:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
विदेशी कुंजी नियंत्रण का नामकरण
विदेशी कुंजी बाधा को नाम दें, एकाधिक स्तंभों पर विदेशी कुंजी बाधा को परिभाषित करें, और निम्नलिखित SQL सिंटैक्स का उपयोग करें:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
परिवर्तन तालिका में SQL विदेशी कुंजी
"ऑर्डर" तालिका पहले ही बन जाने के बाद "PersonID" कॉलम पर एक विदेशी कुंजी बाधा बनाने के लिए निम्नलिखित SQL का उपयोग करें:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
विदेशी कुंजी नियंत्रण का नामकरण
विदेशी कुंजी बाधा को नाम दें, एकाधिक स्तंभों पर विदेशी कुंजी बाधा को परिभाषित करें, और निम्नलिखित SQL सिंटैक्स का उपयोग करें:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
विदेशी कुंजी बाधा को हटाना
विदेशी कुंजी बाधा को दूर करने के लिए, निम्नलिखित SQL का उपयोग करें:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
विदेशी कुंजी के लाभ
आंकड़ा शुचिता
- गलत डेटा प्रविष्टि को रोकता है
- संदर्भात्मक अखंडता बनाए रखता है
- तालिकाओं के बीच संबंध सुरक्षित रखता है
डेटा संरचना
- एक तार्किक डेटा संरचना बनाता है
- सामान्यीकरण का समर्थन करता है
- डेटा का पुन: उपयोग करने की अनुमति देता है
क्वेरी क्षमता
- जॉइन ऑपरेशन को सरल बनाता है
- डेटा पुनर्प्राप्ति में सुधार करता है
- जटिल प्रश्नों का समर्थन करता है
शैली के उदाहरण
आदेश और ग्राहक
प्रत्येक ऑर्डर एक ग्राहक का है
CREATE TABLE Orders (
OrderID int PRIMARY KEY,
CustomerID int,
OrderDate date,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
किताबें और शिक्षक
प्रत्येक पुस्तक एक लेखक की होती है
CREATE TABLE Books (
BookID int PRIMARY KEY,
AuthorID int,
Title varchar(255),
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)
);
छात्र और कक्षाएं
प्रत्येक छात्र एक कक्षा में नामांकित है
CREATE TABLE Students (
StudentID int PRIMARY KEY,
ClassID int,
StudentName varchar(255),
FOREIGN KEY (ClassID) REFERENCES Classes(ClassID)
);