CodeGym/Java Course/All lectures for BN 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)
);

যাইহোক, এমন পরিস্থিতি রয়েছে যখন আমরা যে স্ট্রিংটি উল্লেখ করি তার একটি অনন্য যৌগিক কী থাকে: উদাহরণস্বরূপ, "নাম এবং জন্মের বছর" বা "productCatogoryId এবং productId"। তাহলে FOREIGN KEY এভাবে লেখা যাবে:

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

বিদেশী কী এবং ডেটা পরিবর্তন করা

এখন এমন একটি পরিস্থিতি কল্পনা করুন যেখানে আমরা কর্মচারী টেবিলে কিছু ডেটা আপডেট করার সিদ্ধান্ত নিয়েছি এবং আমাদের কর্মচারী আইডি পরিবর্তিত হয়েছে। টাস্ক টেবিলের ডেটার কী হবে? এটা ঠিক, তারা অপ্রাসঙ্গিক হয়ে যাবে, এবং আমাদের ডাটাবেসের অখণ্ডতা লঙ্ঘন করা হবে।

এটি যাতে না ঘটে তার জন্য, আপনি এসকিউএল সার্ভারকে সমস্ত টেবিলের সমস্ত সারির কর্মচারী_আইডি পরিবর্তন করতে বলতে পারেন যা এই নির্দিষ্ট পরিবর্তিত আইডিটি উল্লেখ করে যখন কর্মচারী টেবিলের আইডি পরিবর্তন হয়।

এই ধরনের স্ক্রিপ্টগুলিকে OnUpdate এবং OnDelete বলা হয় । রেকর্ড আইডি পরিবর্তন হলে কী করবেন এবং রেকর্ড মুছে গেলে কী করবেন?

অপসারণের সাথে, সবকিছু এত সহজ নয়। যদি আপনার কাছে নির্ভরশীল বস্তু থাকে যা ডাটাবেসে স্ট্রিং দ্বারা উপস্থাপিত হয় যা একে অপরকে উল্লেখ করে, তাহলে একটি অবজেক্ট মুছে ফেলার সময় বিভিন্ন ধরণের আচরণের পরিস্থিতি সম্ভব।

ধরা যাক আমরা একটি সাইট ব্যবহারকারী মুছে ফেলি, যার মানে আমাদের অবশ্যই তার সমস্ত ব্যক্তিগত চিঠিপত্র মুছে ফেলতে হবে। কিন্তু এটা অসম্ভাব্য যে আমরা তার সব পাবলিক মন্তব্য মুছে ফেলা উচিত.

অথবা একজন কর্মচারী পদত্যাগ করেন। এটা অদ্ভুত হবে যদি তিনি ছেড়ে দেন এবং একই সময়ে তাকে অর্পিত সমস্ত কাজ ডাটাবেস থেকে অদৃশ্য হয়ে যায়। কিন্তু যদি তারা তাঁর দ্বারা নিযুক্ত না থাকত, তবে এটিও খারাপ পরিণতি পেত। এটি তৈরি করা আরও সঠিক যাতে কর্মচারী তার সমস্ত কাজ অন্য লোকেদের কাছে পুনরায় অর্পণ করার পরে ছেড়ে যেতে পারে।

FOREIGN KEY ব্যবহার করে আমরা কীভাবে এই পরিস্থিতিগুলি বর্ণনা করতে পারি তা এখানে। এই জাতীয় কী/নিয়মের সাধারণ রূপ হল:

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

মুছে ফেলার ক্ষেত্রে (অন ডিলিট) বা পরিবর্তন (আপডেট করার সময়) রেকর্ডের ক্ষেত্রে কী করবেন? মোট, এসকিউএল সার্ভারের জন্য এই প্রতিটি পরিস্থিতিতে কাজ করার জন্য 5টি বিকল্প থাকতে পারে:

# রেফারেন্স_বিকল্প ব্যাখ্যা
1 সীমাবদ্ধ স্ট্রিং রেফারেন্স পাওয়া গেলে অ্যাকশন অক্ষম করুন
2 ক্যাসকেড নির্ভরশীল সারিতে আইডি পরিবর্তন করুন
3 NULL সেট করুন নির্ভরশীল সারিগুলিতে আইডি NULL এ সেট করুন
4 কোন কর্ম কিছুই করার নাই
5 সেট ডিফল্ট x ডিপেন্ডেন্ট সিঙ্কে আইডি সেট করুন x এ

এখানে আমরা কিভাবে আমাদের টাস্ক টেবিল পরিবর্তন করতে পারি:

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

এখানে কি লেখা আছে:

ON UPDATE CASCADE : যদি কর্মচারী টেবিলের আইডি কী পরিবর্তন হয়, তাহলে টাস্ক টেবিলে কর্মীর_আইডিও পরিবর্তন করুন যা এটি উল্লেখ করে।

মুছে ফেলতে সীমাবদ্ধতা : যদি কর্মচারী টেবিল থেকে একটি সারি মুছে ফেলা হয় এবং টাস্ক টেবিল থেকে উল্লেখ করা হয়, তাহলে কর্মচারী টেবিল থেকে সারিটি মুছে ফেলা থেকে বিরত রাখুন।

মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই