Có vẻ như bạn đang cố triển khai Cơ sở dữ liệu thời gian . Hỗ trợ tạm thời là một trong những bổ sung chính cho tiêu chuẩn ANSI / ISO SQL:2011. MySQL (giống như hầu hết các RDBMS) tụt hậu so với tiêu chuẩn. Hãy coi Cơ sở dữ liệu tạm thời là DBMS tương đương với CVS / SVN / Git.
Ngược lại, cơ sở dữ liệu truyền thống mà chúng tôi sử dụng không có các tính năng tạm thời có thể được gọi là Cơ sở dữ liệu hiện tại .
Trong Cơ sở dữ liệu hiện tại , nếu bạn cố gắng thực hiện hỗ trợ tạm thời, bạn có thể thất bại theo nhiều cách với các cách tiếp cận khác nhau:
-
Phương pháp một bảng. Khi cần sửa đổi, bạn thực hiện
UPDATEs
trên hồ sơ ban đầu của bạn và trừ khi bạn có một số loại logic kiểm toán / kích hoạt cây nhà lá vườn, dấu vết lịch sử sẽ không có. Ngay cả khi bạn có nhật ký kiểm tra / thay đổi, bạn sẽ phải thực hiện một số thao tác đào bới xấu xí để tạo lại lịch sử thay đổi. -
Phương pháp tiếp cận hai bảng. Thay vì thực hiện sửa đổi tại chỗ, bạn chia dữ liệu của mình thành hai bảng, một bảng chứa các bản ghi gốc / gốc (ví dụ:đặt chỗ) và một bảng khác cho các thay đổi / sửa đổi / deltas của bạn. Sau đó, ít nhất bạn có dữ liệu ban đầu của mình được bảo toàn, nhưng một lần nữa bạn phải viết logic phức tạp để xem dữ liệu gốc với các sửa đổi được xếp lớp trên. Nó thậm chí còn tồi tệ hơn nếu bạn chỉ muốn một số của các sửa đổi được áp dụng.
-
Phương pháp tiếp cận bảng kết quả được tính toán trước . Bạn giữ 3 bảng trở lên:các bản ghi cơ sở, các sửa đổi và cũng là một bảng cố gắng luôn có kết quả (luôn cập nhật cơ sở + các sửa đổi). Chúc bạn may mắn khi viết được các trình kích hoạt và quy trình để thực hiện phép tính này bất cứ khi nào bạn thực hiện
INSERTs
và Thiên đường sẽ giúp bạn nếu mộtUPDATEs
hoặcDELETE
là cần thiết. Thiết lập rất mong manh và có thể xảy ra tình trạng không đồng bộ, chẳng hạn như deadlock &rollback. Nếu bạn không thực hiện điều này trong DB với các trình kích hoạt / thủ tục, bạn có thể cố gắng thực hiện phép tính kết quả nó trong mã ứng dụng, nhưng chúc may mắn với điều đó - và nó có thể trở nên tồi tệ với người tiêu dùng đa luồng. Và bạn vẫn không thể dễ dàng truy cập vào các kết quả chỉ có một số các sửa đổi được áp dụng.
Kết luận: Nếu bạn không bị giới hạn ở MySQL, bạn thực sự nên cân nhắc sử dụng DB có hỗ trợ tạm thời. Nếu không, bạn sẽ triển khai lại bánh xe.