Hej arbejder i øjeblikket på løsning af lignende problem, jeg løser det ved at dele mine tabeller op i to, en kontroltabel og en datatabel. Kontroltabellen vil indeholde en primær nøgle og reference til datatabellen, datatabellen vil indeholde automatisk inkrement revisionsnøgle og kontroltabellens primære nøgle som en fremmednøgle.
tage din indtastningstabel som eksempel
Entries Table
+----+-------+------+--------+--------+
| id | title | text | index1 | index2 |
+----+-------+------+--------+--------+
bliver
entries entries_data
+----+----------+ +----------+----+--------+------+--------+--------+
| id | revision | | revision | id | title | text | index1 | index2 |
+----+----------+ +----------+----+--------+------+--------+--------+
for at forespørge
select * from entries join entries_data on entries.revision = entries_data.revision;
i stedet for at opdatere entries_data-tabellen bruger du en insert-sætning og opdaterer derefter post-tabellens revision med den nye revision af entries-tabellen.
Fordelen ved dette system er, at du kan flytte til forskellige revisioner blot ved at ændre revisionsegenskaben i indtastningstabellen. Ulempen er, at du skal opdatere dine forespørgsler. Jeg er i øjeblikket ved at integrere dette i et ORM-lag, så udviklerne skal alligevel ikke bekymre sig om at skrive SQL. En anden idé, jeg leger med, er, at der skal være en centraliseret revisionstabel, som alle datatabellerne bruger. Dette vil give dig mulighed for at beskrive databasens tilstand med et enkelt revisionsnummer, svarende til hvordan subversion revisionsnumre fungerer.