DBMS में Referential Integrity
Referential integrity क्या है
Referential integrity एक नियम है जो जुड़ी tables संगत रखता है: एक foreign key value उस table में मौजूद value से मेल खानी चाहिए जिसे यह reference करती है, या null हो। यह "orphan" rows रोकती है जो न-मौजूद records की ओर इशारा करें, तो आपके database में relationships हमेशा मायने रखते हैं।
Foreign key link
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
Foreign key orders.customer_id को असली customers.id से मेल खाना चाहिए। DBMS इसे अपने-आप लागू करता है।
यह क्या रोकती है
-- customers में सिर्फ़ ids 1 और 2 हैं INSERT INTO orders VALUES (10, 99); -- ERROR: customer 99 मौजूद नहीं
DBMS इस insert को ठुकराता है क्योंकि customer 99 की कोई मेल खाती row नहीं। Referential integrity बिना, आप न-मौजूद customer के लिए order बना सकते थे — एक orphan row जो data corrupt करती है।
Delete और update पर
अगर आप orders वाले customer को delete करें तो? Default रूप से, DBMS integrity की रक्षा को delete रोकता है:
DELETE FROM customers WHERE id = 1; -- ERROR अगर orders id 1 reference करें
आप इस व्यवहार को foreign key पर define किए referential actions से नियंत्रित कर सकते हैं।
ON DELETE CASCADE
FOREIGN KEY (customer_id) REFERENCES customers(id)
ON DELETE CASCADE
ON DELETE CASCADE के साथ, customer delete करना उनके सारे orders भी अपने-आप delete करता है। यह चीज़ें संगत रखता है — कोई orphaned orders पीछे नहीं बचते। इसे तब इस्तेमाल कीजिए जब child rows का उनके parent बिना कोई मतलब न हो।
अन्य referential actions
| Action | Parent delete करने पर |
|---|---|
| RESTRICT / NO ACTION | Delete रोको (default) |
| CASCADE | Child rows भी delete करो |
| SET NULL | Child की foreign key NULL set करो |
इस आधार पर चुनिए कि parent जाने पर child rows का क्या होना चाहिए।
आम गलतियाँ
- Parent से पहले child insert करना। Parent row पहले मौजूद होनी चाहिए।
- Referenced parent बिना योजना delete करना। CASCADE, SET NULL या RESTRICT तय कीजिए।
- बेमेल column types। Foreign और referenced keys type साझा करने चाहिए।
- Foreign keys बिल्कुल भूलना। तब कुछ integrity लागू नहीं करता।
सारांश
- Referential integrity foreign keys को असली rows की ओर इशारा रखती है।
- DBMS न-मौजूद parents reference करते inserts ठुकराता है।
- Default रूप से, referenced parent delete करना रोका जाता है।
- ON DELETE CASCADE child rows को parent के साथ delete करता है।
- SET NULL और RESTRICT अन्य referential actions हैं।
आगे, इसके पीछे की keys सीखिए primary key vs foreign key में, या नियम जोड़िए constraints से।
