Stored Procedure এবং Trigger ডাটাবেসের মধ্যে অটোমেশন এবং লজিক প্রক্রিয়াকে সহজতর করার জন্য ব্যবহৃত হয়। তারা বিশেষ ধরনের SQL স্ক্রিপ্ট যা ডাটাবেসে সেভ করা হয় এবং বিভিন্ন শর্তে অথবা একটি নির্দিষ্ট ইভেন্টে এক্সিকিউট হয়। চলুন, তাদের বাস্তব উদাহরণ দেখি।
১. Stored Procedure
Stored Procedure হলো একটি প্রি-কম্পাইলড SQL কোডের সেট যা ডাটাবেসে সংরক্ষিত থাকে এবং যখন প্রয়োজন হয় তখন কল করা হয়। এটি পুনরায় ব্যবহারযোগ্য এবং ডাটাবেসে লজিক পরিচালনা করতে সহায়তা করে।
বাস্তব উদাহরণ:
ধরা যাক, আপনার একটি orders টেবিল আছে যেখানে আপনি গ্রাহকের অর্ডারের মোট মূল্য এবং ডিসকাউন্ট হিসাব করতে চান। এই কাজটি স্বয়ংক্রিয় করতে একটি Stored Procedure তৈরি করা যায়।
orders টেবিল:
| order_id | customer_id | order_amount | discount |
|---|---|---|---|
| 1 | 101 | 500 | 0 |
| 2 | 102 | 1000 | 0 |
Stored Procedure:
DELIMITER
DELIMITER ;
Stored Procedure কল করা:
CALL CalculateDiscount(101);
এই Stored Procedure customer_id অনুযায়ী মোট অর্ডার পরিমাণ বের করবে এবং সেই অনুযায়ী ডিসকাউন্ট প্রযোজ্য করবে। যদি গ্রাহকের মোট অর্ডার 1000 এর বেশি হয়, তবে 10% ডিসকাউন্ট দেওয়া হবে।
২. Trigger
Trigger একটি ডাটাবেস অবজেক্ট যা নির্দিষ্ট ইভেন্টে স্বয়ংক্রিয়ভাবে চলতে শুরু করে, যেমন একটি রেকর্ড ইনসার্ট, আপডেট বা ডিলিট করা হলে। Trigger সাধারণত ডাটাবেসের নিরাপত্তা বা ডেটা ইন্টিগ্রিটি নিশ্চিত করতে ব্যবহৃত হয়।
বাস্তব উদাহরণ:
ধরা যাক, আপনার একটি employees টেবিল আছে যেখানে কর্মচারীদের তথ্য রাখা হয় এবং আপনি চান যে, যখন একটি কর্মচারীর salary আপডেট হয়, তখন একটি audit_log টেবিলেও সেই পরিবর্তন লগ করা হোক।
employees টেবিল:
| employee_id | name | salary |
|---|---|---|
| 1 | Alice | 50000 |
| 2 | Bob | 60000 |
audit_log টেবিল:
| log_id | employee_id | action | old_salary | new_salary | timestamp |
|---|---|---|---|---|---|
| 1 | 1 | Salary Update | NULL | 50000 | 2024-11-01 10:00:00 |
| 2 | 2 | Salary Update | NULL | 60000 | 2024-11-01 11:00:00 |
Trigger তৈরি করা:
CREATE TRIGGER SalaryUpdateTrigger
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
-- যদি salary পরিবর্তিত হয়, তাহলে audit_log এ নতুন রেকর্ড যোগ করা হবে
IF OLD.salary != NEW.salary THEN
INSERT INTO audit_log (employee_id, action, old_salary, new_salary, timestamp)
VALUES (NEW.employee_id, 'Salary Update', OLD.salary, NEW.salary, NOW());
END IF;
END;
Trigger ব্যাখ্যা:
- Trigger Type:
AFTER UPDATE— এটিemployeesটেবিলের update অপারেশন সম্পন্ন হওয়ার পরে কার্যকর হবে। - Condition:
IF OLD.salary != NEW.salary— অর্থাৎ, যদি পুরনো এবং নতুন স্যালারি আলাদা হয়, তখনaudit_logটেবিলে নতুন একটি রেকর্ড সন্নিবেশ করা হবে। - Action: স্যালারি পরিবর্তনের তথ্য
audit_logটেবিলে সন্নিবেশ করা।
Trigger কার্যক্রম:
- আপনি যখন
employeesটেবিলে একটি স্যালারি আপডেট করবেন:
UPDATE employees SET salary = 55000 WHERE employee_id = 1;
- তখন
audit_logটেবিলে এই পরিবর্তনটি লগ হবে:
| log_id | employee_id | action | old_salary | new_salary | timestamp |
|---|---|---|---|---|---|
| 1 | 1 | Salary Update | 50000 | 55000 | 2024-11-01 12:00:00 |
সারাংশ
Stored Procedure এবং Trigger ডাটাবেসের কার্যকারিতা এবং অটোমেশন উন্নত করতে ব্যবহৃত হয়:
- Stored Procedure: এটি SQL কোডের একটি প্যাকেজ যা একাধিক SQL স্টেটমেন্ট একসাথে রান করায়। এটি পুনঃব্যবহারযোগ্য এবং বিশেষ কাজের জন্য ব্যবহার করা যায়।
- Trigger: এটি একটি স্বয়ংক্রিয় SQL স্ক্রিপ্ট যা নির্দিষ্ট ডাটাবেস ইভেন্ট (যেমন ইনসার্ট, আপডেট, ডিলিট) ঘটলে চলতে শুরু করে।
দুটি টুলই ডাটাবেসের কার্যক্রম সহজতর করে এবং ডেটার ইন্টিগ্রিটি বজায় রাখার জন্য অত্যন্ত উপকারী।
Read more