CodeGym/Java Course/All lectures for MR purposes/प्रतिबंध: डेटाबेस अखंडता

प्रतिबंध: डेटाबेस अखंडता

उपलब्ध

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

डेटाबेसबद्दल जाणून घेण्याची आणखी एक महत्त्वाची गोष्ट म्हणजे कंस्ट्रेन. मर्यादांच्या मदतीने, तुम्ही तुमच्या टेबलमधील डेटा बदल नियंत्रित करू शकता आणि त्यांची अखंडता आणि सातत्य राखू शकता.

जेव्हा आपण डेटाबेसबद्दल बोलतो तेव्हा डेटा सुसंगतता म्हणजे काय ?

चला कर्मचारी, उत्पादन आणि कार्य सारण्यांसह आमचे ऑनलाइन स्टोअर घेऊ . आम्हाला आधीच माहित आहे की टास्क टेबलमध्ये अशी कार्ये असू शकतात जी कोणालाही नियुक्त केलेली नाहीत: अशा पंक्तींचा कर्मचारी_आयडी NULL आहे.

पण टास्क टेबलमध्ये 115 च्या समान एम्प्लॉयी_आयडी असलेली एंट्री असल्यास काय होईल? शेवटी, आमच्याकडे असा कर्मचारी नाही. आमच्याकडे कर्मचारी टेबलमध्ये id = 115 असलेला कर्मचारी नाही. त्याच वेळी, या आयडीसह कर्मचाऱ्याची लिंक टास्क टेबलमध्ये आहे. हे डेटा विसंगतीचे उदाहरण आहे .

मग आम्ही या डेटाची जुळवाजुळव कशी करू? तद्वतच, हे असे असेल की एसक्यूएल सर्व्हर, कोणत्याही डेटा बदलासह, या सर्व बारकावे नियंत्रित करेल. आणि अशी संधी आहे, त्याला 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)
);

तसे, अशी परिस्थिती असते जेव्हा आपण ज्या स्ट्रिंगचा संदर्भ घेतो त्यात एक अद्वितीय संमिश्र की असते: उदाहरणार्थ, “नाव आणि जन्म वर्ष” किंवा “उत्पादन कॅटगोरीआयडी आणि उत्पादन आयडी”. मग 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]

रेकॉर्ड हटवल्यास (ON DELETE) किंवा बदलल्यास (ON UPDATE) काय करावे? एकूण, SQL सर्व्हरला यापैकी प्रत्येक परिस्थितीत कार्य करण्यासाठी 5 पर्याय असू शकतात:

# संदर्भ_पर्याय स्पष्टीकरण
प्रतिबंधित करा स्ट्रिंग संदर्भ आढळल्यास क्रिया अक्षम करा
2 कॅस्केड अवलंबून पंक्तींमध्ये आयडी बदला
3 NULL सेट करा अवलंबित पंक्तींमध्ये आयडी NULL वर सेट करा
4 कृतीविना काही करायला नाही
सेट डीफॉल्ट x आश्रित सिंकमध्ये x वर आयडी सेट करा

आम्ही आमचे टास्क टेबल कसे सुधारू शकतो ते येथे आहे:

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

येथे काय लिहिले आहे:

अपडेट कॅस्केडवर : जर कर्मचारी टेबलमधील आयडी की बदलली, तर त्याचा संदर्भ असलेल्या टास्क टेबलमधील कर्मचारी_आयडी देखील बदला.

ऑन डिलीट रिस्ट्रिक्ट : जर कर्मचारी टेबलमधून पंक्ती हटवली जात असेल आणि टास्क टेबलमधून संदर्भित असेल, तर कर्मचारी टेबलमधून पंक्ती हटवण्यापासून प्रतिबंधित करा.

टिप्पण्या
  • लोकप्रिय
  • नवीन
  • जुने
टिप्पणी करण्यासाठी तुम्ही साईन इन केलेले असणे आवश्यक आहे
या पानावर अजून कोणत्याही टिप्पण्या नाहीत