Digitaro adalah perusahaan fintech yang menerapkan sistem insentif otomatis berbasis jam kerja dan performa. Sistem mereka sangat tergantung pada trigger dan stored procedure yang kompleks, dengan skenario sebagai berikut:
- Tabel employee memiliki kolom: ssn, name, salary, bonus, total_hours_project, dan performance_grade.
- Tabel works_on memiliki kolom: essn, project_id, hours.
- Setiap kali jam kerja dimasukkan, total_hours_project diperbarui otomatis.
- Jika total_hours_project > 200, maka bonus otomatis diberikan sebesar 20% dari gaji pokok.
- Jika performance_grade diubah menjadi "A", maka stored procedure akan memanggil prosedur pemberian bonus tambahan.
- Terdapat trigger untuk menolak semua insert/update yang menyebabkan salary + bonus > 1.5 * (salary supervisor).
Jika terdapat tiga trigger:
- Trigger X: AFTER INSERT ON works_on ➝ Update total_hours_project
- Trigger Y: AFTER UPDATE ON employee.total_hours_project ➝ Jalankan give_bonus() jika jam > 200
- Trigger Z: BEFORE INSERT ON works_on ➝ Cek apakah jam yang ditambahkan valid (jam ≤ 12), kalau tidak raise exception
Apa yang mungkin terjadi jika ada query:
INSERT INTO works_on VALUES ('123', 'P5', 15);