sql >> Database teknologi >  >> RDS >> Mysql

Bevaring af sideændringshistorik. Lidt ligesom SO gør for revisioner

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.



  1. Fremskynder et stort antal mysql-opdateringer og -indsættelser

  2. Kopiér kolonneværdi fra én tabel til en anden matchende id - SQLite

  3. Er der en Entity Framework 7 Database-First POCO Generator?

  4. Hvornår skal du overveje Solr