Verzování a jak správně verzovat

Webster.K
Člen | 212
+
0
-

Zdravím všechny, začínám tvořit nový projekt a půjde o něco jako Wordpress, prostě systém, do kterého se půjde registrovat a psát články, ve své podstatě. To jediné, co mi dělá starost je verzování při různých změnách. Má někdo nápad, jak na to? Jde mi o to, aby v systému vždy byly vidět změny a který uživatel je provedl, popřípadě aby se k nim šlo vrátit. V současné době jediné co mě napadlo je v případě článku v tabulce s článkama vždy při úpravě celý řádek (což jsou víceméně všechny informace o článku) duplikovat a s novým ID vytvořit jeho úpravu s tím, že v tabulce by byl sloupec třeba „předchozí“ kde by bylo ID předchozího stavu. A takto až ke stavu, kdy se dostanu na nulu, což by znamenalo, že předchozí verze neexistuje. Zase naopak abych mohl rychle získat data, existoval by sloupecek „posledni“ kde by bylo true/false, takže bych rychle dostal seznam aktuálně nejnovějších a i historie. A teď mě zajímá váš názor, jak moc toto je velká kravina a jak by se to dalo řešit elegantněji :)

rkor
Člen | 62
+
+2
-

Co třeba rozdělit na dvě tabulky?

Např.:
clanky – id, …
clanky_historie – id_clanky, obsah, datum

A z historie select podle data?

kejlicz
Člen | 201
+
0
-

Asi bych jednoduše uložil u článku, při vzniku nebo aktualizaci, časové razítko a pak jak aktuální bral ten s posledním datumem. jde o tom, kolik toho bude. Pokud nějak hodně, asi bych ty starší verze článků někam oddělil.

Webster.K
Člen | 212
+
0
-

Jde taky o to, ze ty clanky maji jedinecne identifikatory v podobe ID – pouziva v tuhle chvili na prevod nazvu na url, resp format je napr ID-nazev-clanku coz se pouziva jako url a smerovni :/ takze kdyz pridam novou verzi, tak tim ze mam last a before v tabulce, rychle dohledam nejnovejsi podle ID – bohuzel to stoji par cyklu :/ zase na druhou stranu kdyz mam nejnovejsi ID aktualni, tak to cykly nestoji ale zase se porad meni URL adresa a kdyz se tam da starsi ID se stejnym nazvem, otevre to starsi clanek :/ tam by se asi dala dat podminka, ale zase menici se url… Ta tabulka s historii mozna neni uplne spatnej napad, akorad jak ji strukturovat, jako v tabulce clanky mit jen jeho ID/url/nazev? a v tabulce s historii vse ostatni?

TonnyVlcek
Člen | 31
+
0
-

Možná je moje odpověď směřovaná trochu jinam než to co bys chtěl dělat, ale taky je to způsob, který může fungovat docela pěkně:

MySql Audit Tables (víc čtení třeba tady: https://stackoverflow.com/…-audit-table).
V podstatě verzování necháš úplně na databázové vrstvě – napíšeš si trigger, který pokaždý když je provedena změna vyrobí kopii a zaznamená verzi – ten trigger si můžeš nastavit jakkoli budeš potřebovat.

No a v aplikaci potom budeš řešit už jenom zobrazování tech verzí, který budeš tahat z té Audit Table.