Hai saat ini saya sedang mengerjakan solusi untuk masalah yang sama, saya menyelesaikannya dengan membagi tabel saya menjadi dua, tabel kontrol dan tabel data. Tabel kontrol akan berisi kunci utama dan referensi ke tabel data, tabel data akan berisi kunci revisi kenaikan otomatis dan kunci utama tabel kontrol sebagai kunci asing.
mengambil tabel entri Anda sebagai contoh
Entries Table
+----+-------+------+--------+--------+
| id | title | text | index1 | index2 |
+----+-------+------+--------+--------+
menjadi
entries entries_data
+----+----------+ +----------+----+--------+------+--------+--------+
| id | revision | | revision | id | title | text | index1 | index2 |
+----+----------+ +----------+----+--------+------+--------+--------+
untuk bertanya
select * from entries join entries_data on entries.revision = entries_data.revision;
alih-alih memperbarui tabel entri_data, Anda menggunakan pernyataan sisipan dan kemudian memperbarui revisi tabel entri dengan revisi baru dari tabel entri.
Keuntungan dari sistem ini adalah Anda dapat berpindah ke revisi yang berbeda hanya dengan mengubah properti revisi di dalam tabel entri. Kerugiannya adalah Anda perlu memperbarui pertanyaan Anda. Saat ini saya mengintegrasikan ini ke dalam lapisan ORM sehingga pengembang tidak perlu khawatir tentang menulis SQL. Ide lain yang saya mainkan adalah agar ada tabel revisi terpusat yang digunakan semua tabel data. Ini akan memungkinkan Anda untuk menggambarkan keadaan database dengan satu nomor revisi, mirip dengan cara kerja nomor revisi subversi.