Tôi không chắc có một "cách tiếp cận tốt nhất", có quá nhiều biến số cần xem xét, bao gồm cả việc bạn đang đi đến đâu trên con đường phát triển.
Đã trải qua cả giải pháp kiểm tra dựa trên mã và db-trigger, tôi đã liệt kê một số nhận xét bên dưới; Tôi hy vọng bạn có thể thấy hiện tại bạn đang ở đâu (về mặt phát triển) có thể ảnh hưởng đến những vấn đề này:
- Nếu bạn cần lập bản đồ người dùng đã thay đổi dữ liệu (mà bạn thường làm) thì trình kích hoạt db sẽ cần lấy thông tin này bằng cách nào đó. Không phải là không thể, nhưng nhiều công việc hơn và một số cách để tiếp cận điều này (người dùng db thực thi truy vấn, cột người dùng phổ biến trong mỗi bảng, v.v.)
- Nếu bạn sử dụng trình kích hoạt db và bạn dựa vào số lượng hàng bị ảnh hưởng được trả về từ các truy vấn, thì trình kích hoạt kiểm tra của bạn cần phải tắt tính năng này hoặc mã hiện tại của bạn được sửa đổi để giải thích cho chúng.
- Trình kích hoạt db IMHO cung cấp bảo mật hơn và cung cấp một con đường dễ dàng hơn để kiểm tra tự động hóa, tuy nhiên, chúng không phải là tuyệt đối, vì bất kỳ ai có quyền truy cập thích hợp đều có thể vô hiệu hóa trình kích hoạt, sửa đổi dữ liệu và sau đó bật lại chúng. Nói cách khác, đảm bảo quyền truy cập bảo mật db của bạn được chặt chẽ.
- Có một bảng duy nhất cho lịch sử không phải là một cách tồi để thực hiện, mặc dù bạn sẽ có nhiều việc phải làm (và dữ liệu để lưu trữ) nếu bạn đang kiểm tra lịch sử cho nhiều bảng, đặc biệt là khi cần xây dựng lại quá trình kiểm tra. Bạn cũng phải xem xét vấn đề khóa nếu có nhiều bảng đang cố gắng ghi vào một bảng kiểm tra.
- Có một bảng lịch sử kiểm tra cho mỗi bảng là một tùy chọn khác. Bạn chỉ cần vô hiệu hóa từng cột trong bảng kiểm tra cũng như lưu trữ ngày và thời gian của hành động (chèn / cập nhật / xóa) và người dùng được liên kết với hành động đó.
- Nếu bạn sử dụng tùy chọn bảng duy nhất, trừ khi bạn có nhiều thời gian cho việc này, đừng quá ưa thích chỉ cố gắng kiểm tra các cập nhật hoặc xóa, mặc dù có thể bạn muốn tránh các lần chèn (vì hầu hết ứng dụng thực hiện việc này thường xuyên hơn là cập nhật hoặc xóa), việc tạo lại lịch sử kiểm tra sẽ mất một chút công sức.
- Nếu máy chủ hoặc dữ liệu của bạn trải dài trên nhiều múi giờ, thì hãy cân nhắc sử dụng loại ngày giờ thích hợp để có thể lưu trữ và xây dựng lại tiến trình, tức là lưu trữ ngày diễn ra sự kiện kiểm tra theo giờ UTC cũng như bao gồm chênh lệch múi giờ.
- Các bảng kiểm tra này có thể rất lớn, vì vậy hãy có chiến lược nếu chúng bắt đầu ảnh hưởng đến hiệu suất. Các tùy chọn bao gồm phân vùng bảng trên các đĩa khác nhau, lưu trữ, v.v. về cơ bản hãy nghĩ về điều này ngay bây giờ và không phải khi nó trở thành vấn đề :)