Hej arbetar för närvarande på att lösa liknande problem, jag löser det genom att dela upp mina tabeller i två, en kontrolltabell och en datatabell. Kontrolltabellen kommer att innehålla en primärnyckel och referens till datatabellen, datatabellen kommer att innehålla revisionsnyckel för automatisk ökning och kontrolltabellens primärnyckel som en främmande nyckel.
ta din inmatningstabell som ett exempel
Entries Table
+----+-------+------+--------+--------+
| id | title | text | index1 | index2 |
+----+-------+------+--------+--------+
blir
entries entries_data
+----+----------+ +----------+----+--------+------+--------+--------+
| id | revision | | revision | id | title | text | index1 | index2 |
+----+----------+ +----------+----+--------+------+--------+--------+
för att fråga
select * from entries join entries_data on entries.revision = entries_data.revision;
istället för att uppdatera tabellen entries_data använder du en insert-sats och uppdaterar sedan ingångstabellens revision med den nya revisionen av entries-tabellen.
Fördelen med detta system är att du kan flytta till olika versioner genom att helt enkelt ändra revisionsegenskapen i inmatningstabellen. Nackdelen är att du behöver uppdatera dina frågor. Jag håller för närvarande på att integrera detta i ett ORM-lager så att utvecklarna inte behöver oroa sig för att skriva SQL ändå. En annan idé jag leker med är att det ska finnas en centraliserad revisionstabell som alla datatabeller använder. Detta skulle tillåta dig att beskriva tillståndet för databasen med ett enda versionsnummer, liknande hur subversionsversionsnummer fungerar.