sql >> Databasteknik >  >> RDS >> Mysql

Att behålla sidans ändringshistorik. Lite som SO gör för revisioner

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.



  1. Hur fixar man "postgres.h"-filen som inte hittas?

  2. SQL Server - Vad händer när en rad i en tabell uppdateras?

  3. MySQL, DELETE Fråga med en Join

  4. php-formulär:kan inte uppdatera databasen, fråga med multiple join