Sử dụng trình kích hoạt ở đây chỉ là một rắc rối.
Hơn nữa, lựa chọn sử dụng bộ lập lịch có lẽ không phải là ý tưởng tốt nhất vì các công việc được lên lịch chỉ có thể xem dữ liệu đã cam kết. Vì vậy, bạn đang cam kết trong trình kích hoạt đưa logic giao dịch ra khỏi cửa sổ hoặc các thay đổi đối với bảng bị trì hoãn cho đến khi kết thúc giao dịch.
Bạn nên:
-
Các thủ tục sử dụng. Câu trả lời đơn giản nhất. Khi bạn có nhiều ứng dụng, chúng không nên thực hiện logic DML / businees trực tiếp, chúng phải luôn làm điều đó với các thủ tục để tất cả chúng chạy cùng một mã. Cấm DML trực tiếp với các khoản tài trợ hoặc lượt xem. Bạn có thể cần phải buộc sử dụng các thủ tục thông qua
INSTEAD OF
kích hoạt các lượt xem (chỉ xem xét điều này nếu bạn không thể sửa đổi ứng dụng). -
Có thể còn tốt hơn các thủ tục trong trường hợp của bạn:sử dụng lược đồ không chứa dữ liệu trùng lặp. Bạn không muốn lưu trữ dữ liệu dư thừa:điều này làm cho việc phát triển ứng dụng trở nên phức tạp hơn mức cần thiết. Về hiệu suất, nguồn lực và năng lượng, cách tốt nhất để giải quyết vấn đề là khi bạn nhận ra rằng nhiệm vụ đó là không cần thiết.
Từ mô tả về mô hình của bạn, đây là các cột mà bạn có thể xóa:
- task.duration_in_days
- task.end_date
- task.needs_recomputation
- subtask.start_date
- subtask.end_date
task
bảng sẽ chỉ chứa ngày bắt đầu và mỗi nhiệm vụ con sẽ chỉ lưu trữ thời lượng của nó. Khi bạn cần thông tin tổng hợp, hãy sử dụng các phép nối. Bạn có thể sử dụng các chế độ xem để cho phép các ứng dụng truy cập dữ liệu một cách minh bạch. -
Sử dụng giải pháp thay đổi trình kích hoạt sử dụng các biến gói để xác định các hàng đã sửa đổi với
BEFORE
vàAFTER
trình kích hoạt câu lệnh. Rõ ràng là điều này sẽ liên quan đến rất nhiều mã sẽ khó viết, kiểm tra và bảo trì, vì vậy bạn nên sử dụng các tùy chọn (1) và (2) bất cứ khi nào có thể.