Verzování a jak správně verzovat
- Webster.K
- Člen | 212
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 :)
- Webster.K
- Člen | 212
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
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.