Snapshot DB je v multiuživatelském prostředí cypovina. V prvé řadě bych se snažil zamyslet, k čemu vlastně to UNDO má být. Před implementací obecného undo je dobré se zamyslet, zda přidání několika operací, které "navrátí" hodnotu zpět, není to pravé ořechové. Třeba už pouhé undo na počítadle se může jevit poměrně hodně problematicky a pokud je při jeho implementaci na úrovni SQL použita seqence, tak ono undo čisté IMHO udělat nepůjde vůbec. A to se ani nebavím o tom, že už mohl být někde na pozadí spuštěn nějaký proces, který vezme aktuální stav DB a provede nějaké výpočty. Nebo že se automaticky vystaví objednávky, faktury, uhradí příkazy k úhradě atd.
Problémem návratů zpět v procesech se zabývají tzv. Business transakce a je to celá věda. Sám jsem se podílel na tvorbě BTP ( http://www.oasis-open.org/committees/business-transactions/ ) a její implementace v Systinetu. Není to žádná sranda. I proto jsme vytvořili úplně nový systém na správu business procesů, ale to je teď vedlejší. Takže po pár letech praxe mohu doporučit jenom jediné - jde-li to řešit aplikačně, udělej to. Nejde-li to řešit aplikačně, má vůbec smysl něco takového dělat? Pokud to aplikačně řešit nejde a smysl to má, schválně sem popiš přesný důvod, proč tomu tak je. Moc by mne to zajímalo. -- Oto 'tapik' Buchta, [email protected], http://tapikuv.blogspot.com
