INSTEAD OF Triggers একটি বিশেষ ধরনের trigger যা VIEW তে INSERT, UPDATE, অথবা DELETE অপারেশন করার সময় কার্যকর হয়। এই trigger এর মাধ্যমে আপনি VIEW তে কোনো ডেটা পরিবর্তন করার চেষ্টা করলে, ঐ পরিবর্তনটি আসলে মূল টেবিল বা ডেটাবেস অবজেক্ট এ করা হয়। এটি মূলত VIEW গুলোর ক্ষেত্রে ব্যবহার করা হয়, কারণ VIEW তে সরাসরি INSERT, UPDATE, বা DELETE করা সম্ভব নয়। INSTEAD OF Trigger এর মাধ্যমে এই অপারেশনগুলো মূল টেবিল বা অন্য কোনো ডেটাবেস অবজেক্টে পরিবর্তন করতে ব্যবহৃত হয়।
এই ধরনের trigger সাধারণত তখন ব্যবহৃত হয় যখন একটি কমপ্লেক্স ভিউ বা ডেটাবেস অবজেক্ট এর উপর INSERT, UPDATE, বা DELETE করতে হবে, কিন্তু সেই ভিউতে সরাসরি ডেটা পরিবর্তন সম্ভব নয়।
INSTEAD OF Trigger এর গঠন:
CREATE OR REPLACE TRIGGER trigger_name
INSTEAD OF {INSERT | UPDATE | DELETE}
ON view_name
FOR EACH ROW
BEGIN
-- Trigger body
-- Perform operations on the underlying base tables
END;
এখানে:
trigger_name: Trigger এর নাম।{INSERT | UPDATE | DELETE}: আপনি কোন অপারেশনটি করতে চান (এটিINSERT,UPDATE, বাDELETEহতে পারে)।view_name: যেইVIEWতে আপনি এই trigger প্রয়োগ করতে চান।FOR EACH ROW: এই triggerটি প্রতিটি affected row এর জন্য কাজ করবে।
INSTEAD OF Trigger এর ব্যবহার:
INSTEAD OF Triggers বিশেষভাবে VIEW গুলোর জন্য ব্যবহৃত হয়, কারণ VIEW তে ডেটা পরিবর্তন করার জন্য এক্সিকিউটেবল SQL স্টেটমেন্ট নেই। INSTEAD OF trigger তৈরি করলে, আপনি VIEW তে পরিবর্তন করতে পারবেন এবং সেই পরিবর্তন আসলে underlying টেবিলের উপর কার্যকর হবে।
INSTEAD OF Trigger এর উদাহরণ:
উদাহরণ ১: INSERT Operation এর জন্য INSTEAD OF Trigger
ধরা যাক, আপনার একটি employee_view নামক VIEW আছে, যেখানে employees এবং departments টেবিলের কিছু তথ্য সংযুক্ত করা হয়েছে। আপনি employee_view এ INSERT করতে চান, তবে এটি আসলে employees টেবিলের উপর INSERT করবে।
CREATE OR REPLACE TRIGGER employee_view_insert
INSTEAD OF INSERT ON employee_view
FOR EACH ROW
BEGIN
-- Insert the data into the employees table
INSERT INTO employees (employee_id, employee_name, department_id)
VALUES (:NEW.employee_id, :NEW.employee_name, :NEW.department_id);
END;
এখানে,
employee_view_inserttrigger টিemployee_viewএINSERTহওয়া ডেটাemployeesটেবিলের মধ্যে ইনসার্ট করে।:NEW.employee_id,:NEW.employee_name, এবং:NEW.department_idভিউ থেকে নেওয়া নতুন মান।
ব্যাখ্যা:
এই trigger এর মাধ্যমে, যখন আপনি employee_view তে নতুন employee যুক্ত করতে যাবেন, তখন ডেটা আসলে employees টেবিলের উপর ইনসার্ট হবে। VIEW তে INSERT করার অনুমতি না থাকলেও, INSTEAD OF Trigger এর মাধ্যমে আপনি ঐ পরিবর্তনটি করতে পারবেন।
উদাহরণ ২: UPDATE Operation এর জন্য INSTEAD OF Trigger
ধরা যাক, আপনি একটি employee_view নামক VIEW এ UPDATE করতে চান, কিন্তু ঐ ভিউতে সরাসরি আপডেট করা যাবে না। আপনি একটি INSTEAD OF trigger তৈরি করতে পারেন যা underlying employees টেবিলে আপডেট করবে।
CREATE OR REPLACE TRIGGER employee_view_update
INSTEAD OF UPDATE ON employee_view
FOR EACH ROW
BEGIN
-- Update the corresponding row in the employees table
UPDATE employees
SET employee_name = :NEW.employee_name,
department_id = :NEW.department_id
WHERE employee_id = :OLD.employee_id;
END;
এখানে,
employee_view_updatetrigger টিemployee_viewএUPDATEহওয়া ডেটাemployeesটেবিলের মধ্যে আপডেট করে।:OLD.employee_idপুরনোemployee_id, এবং:NEW.employee_name,:NEW.department_idনতুন মান।
ব্যাখ্যা:
যখন আপনি employee_view তে কোনো UPDATE করবেন, তখন তা আসলে employees টেবিলের উপর UPDATE করবে। INSTEAD OF trigger ব্যবহার করার মাধ্যমে আপনি VIEW এর মাধ্যমে underlying টেবিলগুলোতে পরিবর্তন আনতে পারেন।
উদাহরণ ৩: DELETE Operation এর জন্য INSTEAD OF Trigger
ধরা যাক, আপনার employee_view ভিউতে আপনি DELETE অপারেশন করতে চান, কিন্তু সরাসরি DELETE করা যাবে না। আপনি INSTEAD OF DELETE trigger ব্যবহার করতে পারেন যা underlying টেবিল থেকে ডেটা মুছে ফেলবে।
CREATE OR REPLACE TRIGGER employee_view_delete
INSTEAD OF DELETE ON employee_view
FOR EACH ROW
BEGIN
-- Delete the corresponding row from the employees table
DELETE FROM employees
WHERE employee_id = :OLD.employee_id;
END;
এখানে,
employee_view_deletetrigger টিemployee_viewতেDELETEহওয়া ডেটাemployeesটেবিল থেকে মুছে ফেলবে।:OLD.employee_idহল পুরনোemployee_idযার উপরDELETEঅপারেশন চলছে।
ব্যাখ্যা:
এটি যখন employee_view তে DELETE অপারেশন হবে, তখন underlying employees টেবিল থেকে সংশ্লিষ্ট রেকর্ডটি মুছে ফেলা হবে।
INSTEAD OF Trigger এর সুবিধা
- Complex Views-এ ডেটা আপডেট: যখন
VIEWএর মাধ্যমে ডেটা আপডেট বা ইনসার্ট করার চেষ্টা করা হয় এবং সেই ভিউটির উপর সরাসরি পরিবর্তন করা সম্ভব নয়, তখনINSTEAD OF Triggerব্যবহার করেVIEWএর মাধ্যমে underlying টেবিল বা ডেটাবেস অবজেক্টে পরিবর্তন করতে পারেন। - ভিউগুলোর মধ্যে অটোমেশন: আপনি ভিউগুলোর মধ্যে অটোমেশন এবং ডেটা সুরক্ষা নিশ্চিত করতে পারবেন, যেমন বিভিন্ন টেবিলের ডেটা একত্রিত করে একটি সাধারণ ভিউ তৈরি করা হলেও, তার জন্য ইনসার্ট বা আপডেট করা হবে শুধু একটিমাত্র টেবিলের জন্য।
- ডেটাবেস লজিক লুকানো: ভিউয়ের মাধ্যমে আপনি আপনার ডেটাবেস লজিক লুকিয়ে রাখতে পারেন, ফলে ব্যবহারকারী শুধুমাত্র ভিউটি ব্যবহার করবে এবং underlying টেবিলগুলোর বিষয়ে চিন্তা করতে হবে না।
উপসংহার
INSTEAD OF Trigger VIEW এর সাথে সংযুক্ত অপারেশনগুলিকে মূল টেবিলের মধ্যে বাস্তবায়িত করার জন্য একটি শক্তিশালী পদ্ধতি। এটি ডেটাবেস লজিকের যথাযথ ব্যবস্থাপনা নিশ্চিত করে এবং ভিউগুলোর মাধ্যমে ডেটাবেসের সাথে ইন্টারঅ্যাকশন সহজ করে তোলে। INSTEAD OF triggers অত্যন্ত কার্যকর যখন আপনার কাজের জন্য কমপ্লেক্স ভিউ দরকার হয় এবং ঐ ভিউগুলোর মাধ্যমে ডেটা আপডেট বা মুছে ফেলতে হয়।
Read more