Triggers হল ডেটাবেসের অবজারভেবল অবস্থা বা ডেটাবেসের মধ্যে কিছু নির্দিষ্ট পরিবর্তন ঘটলেই স্বয়ংক্রিয়ভাবে কার্যকর হওয়া প্রোগ্রাম। উদাহরণস্বরূপ, আপনি একটি ট্রিগার সেট করতে পারেন যা ডেটাবেসে একটি নতুন রেকর্ড ইনসার্ট হলে বা কোনো রেকর্ড আপডেট হলে কিছু নির্দিষ্ট কাজ সম্পাদন করবে।
Apache Derby ডেটাবেসে Triggers তৈরি ও ব্যবহার করার জন্য SQL কুয়েরি ব্যবহৃত হয়, যেখানে BEFORE বা AFTER কিওয়ার্ড দ্বারা ট্রিগারের টাইপ নির্ধারণ করা হয়।
Trigger এর প্রধান টাইপ
- BEFORE Trigger: একটি নির্দিষ্ট অপারেশন (যেমন
INSERT,UPDATE, বাDELETE) হওয়ার আগেই ট্রিগারটি কার্যকর হয়। এই ধরনের ট্রিগার ডেটা পরিবর্তনের আগে কিছু যাচাই বা পরিবর্তন করতে ব্যবহৃত হয়। - AFTER Trigger: একটি নির্দিষ্ট অপারেশন হওয়ার পর ট্রিগারটি কার্যকর হয়। এই ধরনের ট্রিগার ডেটা পরিবর্তনের পরে কিছু অতিরিক্ত অপারেশন বা অডিটিং কাজ করতে ব্যবহৃত হয়।
Trigger তৈরি করার সিনট্যাক্স
Trigger তৈরি করার সাধারণ সিনট্যাক্স:
CREATE TRIGGER trigger_name
trigger_time trigger_event
ON table_name
[FOR EACH ROW]
[WHEN condition]
BEGIN
-- Trigger action (SQL statements)
END;
trigger_name: ট্রিগারের নাম।trigger_time:BEFOREবাAFTER– ট্রিগারটি কোন সময় কার্যকর হবে।trigger_event:INSERT,UPDATE, বাDELETE– ট্রিগারটি কোন অপারেশন ঘটলে কার্যকর হবে।table_name: টেবিলের নাম যেখানে ট্রিগারটি প্রযোজ্য হবে।condition: (ঐচ্ছিক) – ট্রিগারটি একটি নির্দিষ্ট শর্তে চালানোর জন্য।trigger action: ট্রিগারের কাজ যা SQL স্টেটমেন্ট দ্বারা নির্ধারিত হয়।
Example 1: BEFORE Trigger
ধরা যাক, আমাদের একটি টেবিল রয়েছে যেটি employees নামে পরিচিত। আমরা একটি BEFORE INSERT Trigger তৈরি করতে চাই, যাতে ইনসার্ট করার আগে কোনো salary কলামের মান চেক করা হয় এবং তা ০ এর কম না হয়।
CREATE TRIGGER check_salary_before_insert
BEFORE INSERT
ON employees
FOR EACH ROW
WHEN (NEW.salary < 0)
BEGIN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Salary cannot be negative';
END;
এই ট্রিগারটি তখনই কাজ করবে যখন নতুন রেকর্ড ইনসার্ট করার আগে salary এর মান নেতিবাচক (negative) হবে, এবং তখন একটি ত্রুটি বার্তা প্রদর্শিত হবে।
Example 2: AFTER Trigger
ধরা যাক, একটি sales টেবিল রয়েছে, এবং আমরা একটি AFTER INSERT Trigger তৈরি করতে চাই যাতে, যখনই নতুন কোনো বিক্রয়ের তথ্য ইনসার্ট করা হয়, তখন সেলস রিপোর্ট টেবিল আপডেট হয়।
CREATE TRIGGER update_sales_report_after_insert
AFTER INSERT
ON sales
FOR EACH ROW
BEGIN
UPDATE sales_report
SET total_sales = total_sales + NEW.amount
WHERE report_date = CURRENT_DATE;
END;
এই ট্রিগারটি তখনই কার্যকর হবে যখন নতুন বিক্রয়ের রেকর্ড ইনসার্ট করা হবে এবং এটি sales_report টেবিলের total_sales কলাম আপডেট করবে, যেখানে রিপোর্টের তারিখটি বর্তমান তারিখের সমান হবে।
Example 3: AFTER UPDATE Trigger
ধরা যাক, একটি students টেবিল রয়েছে, এবং আমরা একটি AFTER UPDATE Trigger তৈরি করতে চাই, যাতে student_score কলামের মান আপডেট করার পর একটি লগ টেবিল এ পরিবর্তনটি রেকর্ড করা হয়।
CREATE TRIGGER log_score_update_after_update
AFTER UPDATE
ON students
FOR EACH ROW
WHEN (NEW.score <> OLD.score)
BEGIN
INSERT INTO score_log (student_id, old_score, new_score, update_time)
VALUES (NEW.id, OLD.score, NEW.score, CURRENT_TIMESTAMP);
END;
এই ট্রিগারটি তখনই কার্যকর হবে যখন কোনো ছাত্রের স্কোর আপডেট হবে এবং এটি সেই পরিবর্তনটি score_log টেবিলে লগ করবে।
Trigger এর সীমাবদ্ধতা
- Trigger Nesting: Derby তে ট্রিগারগুলোর মধ্যে nested triggers (একটি ট্রিগার অন্য ট্রিগারকে কল করা) সমর্থিত নয়।
- Complex Operations: Derby তে ট্রিগারগুলোর মধ্যে খুব জটিল অপারেশন বা লুপিং সমর্থন করা কঠিন হতে পারে। সাধারণত, ট্রিগারগুলোর জন্য সহজ অপারেশন ব্যবহার করার পরামর্শ দেওয়া হয়।
- Concurrency Control: যদিও ট্রিগারগুলি অনেক সময় কার্যকরী হয়, তবে একাধিক ট্রানজেকশন যদি একসাথে একই ডেটাবেসে কাজ করে, তবে লকিং সমস্যাগুলি সৃষ্টি হতে পারে।
উপসংহার
Apache Derby তে ট্রিগার তৈরি করা একটি শক্তিশালী ফিচার যা ডেটাবেসের কার্যক্রমকে স্বয়ংক্রিয়ভাবে পরিচালনা করতে সাহায্য করে। এটি বিভিন্ন ডেটাবেস অপারেশন যেমন INSERT, UPDATE, এবং DELETE এর সাথে সংযুক্ত করা যেতে পারে। ট্রিগার ব্যবহার করে আপনি ডেটাবেসের অবস্থা সঠিকভাবে ম্যানেজ করতে এবং ডেটাবেসে কোনো পরিবর্তন ঘটলে তা কার্যকরভাবে ট্র্যাক করতে পারেন।