Kodokon kodokon.com

फ़ॉरेन की और रेफ़रेंशियल इंटीग्रिटी

REFERENCES के साथ अपनी टेबल के बीच निरंतरता की गारंटी दें और ON DELETE व्यवहार को सोच-समझकर चुनें।

8 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

एक फ़ॉरेन की यह घोषित करती है कि कोई कॉलम किसी दूसरी टेबल की प्राइमरी की की ओर इशारा करता है। तब डेटाबेस किसी भी अनाथ वैल्यू को अस्वीकार कर देता है: आप ऐसी किताब नहीं बना सकते जिसका लेखक मौजूद न हो। सावधान, SQLite में यह जाँच डिफ़ॉल्ट रूप से बंद होती है: इसे अपनी स्क्रिप्ट के शीर्ष पर एक PRAGMA के साथ चालू करें।

SQL
PRAGMA foreign_keys = ON;

CREATE TABLE authors (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL
);

CREATE TABLE books (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  author_id INTEGER NOT NULL
    REFERENCES authors(id)
    ON DELETE CASCADE
);

INSERT INTO authors (id, name) VALUES
  (1, 'Ursula K. Le Guin'),
  (2, 'Ted Chiang');

INSERT INTO books (id, title, author_id) VALUES
  (1, 'A Wizard of Earthsea', 1),
  (2, 'The Dispossessed', 1),
  (3, 'Exhalation', 2);
REFERENCES books.author_id को authors.id से जोड़ता है।

इस सुरक्षा की जाँच करें: एक अनाथ किताब डालें, फिर एक लेखक को हटाएँ। पहला कथन अस्वीकार कर दिया जाता है; दूसरा ON DELETE CASCADE की बदौलत अपनी किताबें भी अपने साथ ले जाता है।

SQL
INSERT INTO books (id, title, author_id)
VALUES (4, 'Orphan', 99);

DELETE FROM authors WHERE id = 1;

SELECT id, title FROM books;
इंसर्शन विफल हो जाता है; DELETE के बाद, केवल Exhalation बचती है।

ON DELETE यह परिभाषित करता है कि जब पैरेंट गायब हो जाता है तो चाइल्ड पंक्तियों का क्या होगा। CASCADE उन्हें उसके साथ ही हटा देता है। SET NULL पंक्ति को रखता है लेकिन संदर्भ को मिटा देता है - इसलिए कॉलम को NULL स्वीकार करना ही चाहिए। किसी क्लॉज़ के बिना, SQLite NO ACTION लागू करता है: जब तक चाइल्ड मौजूद रहते हैं, पैरेंट को हटाना अस्वीकार कर दिया जाता है, यह व्यवहार RESTRICT के करीब है।

SQL
CREATE TABLE articles (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  reviewer_id INTEGER
    REFERENCES authors(id)
    ON DELETE SET NULL
);
वैकल्पिक लिंक: यदि समीक्षक चला जाता है, तो लेख बना रहता है।

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. books.author_id पर ON DELETE CASCADE के साथ, DELETE FROM authors WHERE id = 1 किस चीज़ का कारण बनता है?
    • जब तक लेखक की किताबें हैं, तब तक एक त्रुटि
    • लेखक और उनकी सभी किताबों का विलोपन
    • उनकी किताबों में author_id को NULL पर सेट करना
  2. SQLite में PRAGMA foreign_keys = ON; क्यों चलाएँ?
    • फ़ॉरेन की बनाने के लिए
    • क्योंकि फ़ॉरेन की की जाँच डिफ़ॉल्ट रूप से, प्रति कनेक्शन बंद रहती है
    • जॉइन को तेज़ करने के लिए
  3. ON DELETE SET NULL का उपयोग करने के लिए reviewer_id कॉलम को कौन सी शर्त पूरी करनी चाहिए?
    • UNIQUE घोषित होना
    • INTEGER टाइप का होना
    • NULL स्वीकार करना, यानी NOT NULL न रखना