फॉरेन की (Foreign Key) रेफरेंशियल इंटीग्रिटी लागू करती है, जिससे डेटा की संगति और अखंडता स्वचालित रूप से बनी रहती है।
उदाहरण: customer (पैरेंट) और orders (चाइल्ड)
mysql> SELECT * FROM Customer; +----+--------+ | id | name | +----+--------+ | 1 | Gaurav | | 2 | Raman | | 3 | Harshit| | 4 | Aarav | +----+--------+ mysql> SELECT * FROM orders; +----------+----------+------+ | order_id | product | id | +----------+----------+------+ | 100 | Notebook | 1 | | 110 | Pen | 1 | | 120 | Book | 2 | | 130 | Charts | 2 | +----------+----------+------+
अस्तित्वहीन ग्राहक के लिए ऑर्डर इन्सर्ट करने का प्रयास
mysql> INSERT INTO orders VALUES(400, 'Notebook', 10); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`query`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`id`) REFERENCES `customer` (`id`))
कैसे इंटीग्रिटी बनी रहती है
| स्थिति | FOREIGN KEY कार्रवाई |
|---|---|
| चाइल्ड में मान इन्सर्ट | पैरेंट में मौजूद होना चाहिए, वरना एरर |
| पैरेंट से पंक्ति डिलीट | चाइल्ड में रेफरेंस होने पर एरर (या CASCADE/SET NULL) |
| पैरेंट PK अपडेट | चाइल्ड में रेफरेंस होने पर एरर (या CASCADE/SET NULL) |
| चाइल्ड FK अपडेट | नया मान पैरेंट में मौजूद होना चाहिए |
एरर कोड संदर्भ
- 1452: चाइल्ड पंक्ति जोड़/अपडेट नहीं कर सकते (पैरेंट मान गुम)
- 1451: पैरेंट पंक्ति डिलीट/अपडेट नहीं कर सकते (चाइल्ड रेफरेंस मौजूद)
निष्कर्ष
FOREIGN KEY डेटाबेस लेवल पर बिजनेस नियम लागू करती है - एप्लिकेशन कोड पर निर्भर नहीं रहना पड़ता। यह डिक्लेरेटिव इंटीग्रिटी है।