CodeGym/Java Course/All lectures for HI purposes/बाधा: डेटाबेस अखंडता

बाधा: डेटाबेस अखंडता

उपलब्ध

डेटाबेस अखंडता नियंत्रण

डेटाबेस के बारे में जानने के लिए एक और महत्वपूर्ण बात है CONSTRAINS। बाधाओं की सहायता से, आप अपनी तालिकाओं में डेटा परिवर्तनों को नियंत्रित कर सकते हैं और उनकी अखंडता और निरंतरता बनाए रख सकते हैं।

जब हम डेटाबेस के बारे में बात करते हैं तो डेटा संगतता क्या होती है ?

आइए कर्मचारी, उत्पाद और कार्य तालिका के साथ अपना ऑनलाइन स्टोर लें । हम पहले से ही जानते हैं कि कार्य तालिका में ऐसे कार्य हो सकते हैं जो किसी को नहीं सौंपे गए हैं: ऐसी पंक्तियों का कर्मचारी_आईडी NULL है।

लेकिन क्या होता है यदि कार्य तालिका में कर्मचारी_आईडी के बराबर एक प्रविष्टि है, कहें, 115? आखिर हमारे पास ऐसा कोई कर्मचारी नहीं है। हमारे पास कर्मचारी तालिका में आईडी = 115 वाला कर्मचारी नहीं है। वहीं, इस आईडी वाले एक कर्मचारी का लिंक टास्क टेबल में है। यह डेटा असंगति का एक उदाहरण है ।

तो हम इन आंकड़ों का मिलान कैसे करें? आदर्श रूप से, ऐसा होगा कि SQL सर्वर, किसी भी डेटा परिवर्तन के साथ, इन सभी बारीकियों को नियंत्रित करता है। और ऐसा अवसर है, इसे FOREIGN_KEY कहते हैं।

यदि आपकी तालिका के कुछ कॉलम में न केवल संख्याएँ हैं, बल्कि दूसरी तालिका की आईडी पंक्तियाँ हैं, तो इसे स्पष्ट रूप से निर्दिष्ट किया जा सकता है।

एक विदेशी कुंजी जोड़ना

इस तरह की कुंजी को इसके निर्माण के चरण में और उसके बाद, ALTER TABLE का उपयोग करके तालिका में जोड़ा जा सकता है। प्रारूप मौलिक रूप से भिन्न नहीं है। हम दोनों विकल्प पेश करेंगे।

ऐसी कुंजी/नियम का सामान्य रूप है:

FOREIGN KEY (column)
  	REFERENCES table(column)

आइए इस कुंजी/नियम को कार्य तालिका में जोड़ते हैं ताकि यह सुनिश्चित किया जा सके कि तालिका के सभी कर्मचारी_आईडी कर्मचारी तालिका में मौजूदा प्रविष्टि को संदर्भित करते हैं। यह स्क्रिप्ट इस तरह दिखेगी:

ALTER TABLE task
      ADD FOREIGN KEY (employee_id)
  	REFERENCES employee(id)

और अगर हमने टास्क टेबल बनाते समय इस नियम को जोड़ने का फैसला किया, तो कोड इस तरह दिखेगा:

CREATE TABLE task (
      id INT,
      name VARCHAR(100),
      employee_id INT,
      deadline DATE,
 
      PRIMARY KEY (id),
  	  FOREIGN KEY (employee_id)  
	      REFERENCES employee(id)
);

वैसे, ऐसी स्थितियाँ होती हैं जब हमारे द्वारा संदर्भित स्ट्रिंग में एक अद्वितीय समग्र कुंजी होती है: उदाहरण के लिए, "नाम और जन्म का वर्ष" या "productCatogoryId और productId"। तब FOREIGN KEY को इस प्रकार लिखा जा सकता है:

FOREIGN KEY (our_column1, our_column2)
  	REFERENCES table(their_column1, their_column2)

विदेशी कुंजी और बदलते डेटा

अब ऐसी स्थिति की कल्पना करें जहां हमने कर्मचारी तालिका में कुछ डेटा अपडेट करने का निर्णय लिया है और हमारी कर्मचारी आईडी बदल गई है। टास्क टेबल में डेटा का क्या होगा? यह सही है, वे अप्रासंगिक हो जाएंगे, और हमारे डेटाबेस की अखंडता का उल्लंघन होगा।

ऐसा होने से रोकने के लिए, आप SQL सर्वर को सभी तालिकाओं में सभी पंक्तियों के कर्मचारी_आईडी को बदलने के लिए कह सकते हैं जो इस विशेष परिवर्तित आईडी को संदर्भित करते हैं जब कर्मचारी तालिका में आईडी बदलती है।

ऐसी स्क्रिप्ट को OnUpdate और OnDelete कहा जाता है । यदि रिकॉर्ड आईडी बदल जाए तो क्या करें और यदि रिकॉर्ड हटा दिया जाए तो क्या करें?

हटाने के साथ सब कुछ इतना आसान नहीं है। यदि आपके पास डेटाबेस में स्ट्रिंग्स द्वारा दर्शाई गई निर्भर वस्तुएं हैं जो एक दूसरे को संदर्भित करती हैं, तो एक ऑब्जेक्ट को हटाते समय विभिन्न प्रकार के व्यवहार परिदृश्य संभव हैं।

मान लें कि हम एक साइट उपयोगकर्ता को हटा देते हैं, जिसका अर्थ है कि हमें उसके सभी व्यक्तिगत पत्राचार को हटाना होगा। लेकिन इसकी संभावना नहीं है कि हम उनकी सभी सार्वजनिक टिप्पणियों को हटा दें।

या कोई कर्मचारी नौकरी छोड़ देता है। यह अजीब होगा अगर उसने छोड़ दिया और उसी समय उसे सौंपे गए सभी कार्य डेटाबेस से गायब हो गए। लेकिन अगर वे उसके द्वारा नियुक्त नहीं रहते, तो यह भी बुरी तरह से निकला होता। इसे बनाना अधिक सही है ताकि कर्मचारी अपने सभी कार्यों को अन्य लोगों को सौंपने के बाद नौकरी छोड़ सके।

यहां बताया गया है कि हम विदेशी कुंजी का उपयोग करके इन परिदृश्यों का वर्णन कैसे कर सकते हैं। ऐसी कुंजी/नियम का सामान्य रूप है:

FOREIGN KEY (column)
  	REFERENCES table(column)
 	[ON DELETE reference_option]
 	[ON UPDATE reference_option]

रिकॉर्ड हटाने (हटाने पर) या बदलने (अद्यतन होने पर) की स्थिति में क्या करें? कुल मिलाकर, इनमें से प्रत्येक स्थिति में कार्य करने के लिए SQL सर्वर के लिए 5 विकल्प हो सकते हैं:

# reference_option व्याख्या
1 प्रतिबंध लगाना स्ट्रिंग संदर्भ मिलने पर कार्रवाई अक्षम करें
2 झरना निर्भर पंक्तियों में आईडी बदलें
3 शून्य सेट करें निर्भर पंक्तियों में आईडी को NULL पर सेट करें
4 कोई कार्रवाई नहीं कुछ भी नहीं करना
5 डिफ़ॉल्ट एक्स सेट करें निर्भर सिंक में आईडी को x पर सेट करें

यहां बताया गया है कि हम अपनी कार्य तालिका को कैसे संशोधित कर सकते हैं:

ALTER TABLE task
  	ADD FOREIGN KEY (employee_id)
  	REFERENCES employee(id)
  	ON UPDATE CASCADE
  	ON DELETE RESTRICT;

यहाँ क्या लिखा है:

अद्यतन कैस्केड पर : यदि कर्मचारी तालिका में आईडी कुंजी बदलती है, तो उसे संदर्भित करने वाली कार्य तालिका में कर्मचारी_आईडी भी बदलें।

DELETE RESTRICT पर : यदि कोई पंक्ति कर्मचारी तालिका से हटाई जा रही है और कार्य तालिका से संदर्भित है, तो पंक्ति को कर्मचारी तालिका से हटाए जाने से रोकें।

टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं