Xin chào, hiện tôi đang tìm giải pháp cho vấn đề tương tự, tôi đang giải quyết nó bằng cách chia các bảng của mình thành hai bảng, một bảng điều khiển và một bảng dữ liệu. Bảng điều khiển sẽ chứa khóa chính và tham chiếu vào bảng dữ liệu, bảng dữ liệu sẽ chứa khóa sửa đổi tăng tự động và khóa chính của bảng điều khiển là khóa ngoại.
lấy bảng mục nhập của bạn làm ví dụ
Entries Table
+----+-------+------+--------+--------+
| id | title | text | index1 | index2 |
+----+-------+------+--------+--------+
trở thành
entries entries_data
+----+----------+ +----------+----+--------+------+--------+--------+
| id | revision | | revision | id | title | text | index1 | index2 |
+----+----------+ +----------+----+--------+------+--------+--------+
để truy vấn
select * from entries join entries_data on entries.revision = entries_data.revision;
thay vì cập nhật bảng entry_data, bạn sử dụng câu lệnh chèn và sau đó cập nhật bản sửa đổi của bảng mục bằng bản sửa đổi mới của bảng mục.
Ưu điểm của hệ thống này là bạn có thể chuyển sang các bản sửa đổi khác nhau chỉ đơn giản bằng cách thay đổi thuộc tính sửa đổi trong bảng mục nhập. Điểm bất lợi là bạn cần phải cập nhật các truy vấn của mình. Tôi hiện đang tích hợp nó vào một lớp ORM để các nhà phát triển không phải lo lắng về việc viết SQL. Một ý tưởng khác mà tôi đang thử thách là có một bảng sửa đổi tập trung mà tất cả các bảng dữ liệu đều sử dụng. Điều này sẽ cho phép bạn mô tả trạng thái của cơ sở dữ liệu với một số sửa đổi duy nhất, tương tự như cách hoạt động của số sửa đổi subversion.