sql >> Databáze >  >> RDS >> Mysql

Uchovávání historie změn stránky. Trochu jako SO pro revize

Ahoj, v současné době pracuji na řešení podobného problému, řeším to rozdělením svých tabulek na dvě, kontrolní tabulku a datovou tabulku. Řídicí tabulka bude obsahovat primární klíč a odkaz na datovou tabulku, datová tabulka bude obsahovat klíč automatické inkrementace revize a primární klíč řídicí tabulky jako cizí klíč.

vezměte si jako příklad tabulku vašich záznamů

Entries Table
+----+-------+------+--------+--------+
| id | title | text | index1 | index2 |
+----+-------+------+--------+--------+

se stává

entries             entries_data
+----+----------+   +----------+----+--------+------+--------+--------+
| id | revision |   | revision | id |  title | text | index1 | index2 |
+----+----------+   +----------+----+--------+------+--------+--------+

dotazovat

select * from entries join entries_data on entries.revision = entries_data.revision;

místo aktualizace tabulky entries_data použijete příkaz insert a poté aktualizujete revizi tabulky záznamů novou revizí tabulky záznamů.

Výhodou tohoto systému je, že se můžete přesunout k různým revizím jednoduše změnou vlastnosti revize v tabulce záznamů. Nevýhodou je nutnost aktualizovat své dotazy. V současné době to integruji do vrstvy ORM, takže se vývojáři stejně nemusí starat o psaní SQL. Další myšlenkou, se kterou si pohrávám, je, aby existovala centralizovaná tabulka revizí, kterou používají všechny datové tabulky. To by vám umožnilo popsat stav databáze jediným číslem revize, podobně jako fungují čísla revizí subversion.



  1. Jak zachovat připojení k databázi na webovém serveru python

  2. seznam schémat s velikostmi (relativní a absolutní) v databázi PostgreSQL

  3. MySQL MIN/MAX vrací správnou hodnotu, ale ne související informace o záznamu

  4. ORA-00922:chybějící nebo neplatná možnost při provádění příkazu set long 100000 v oracle