[ mish_ns @ 19.04.2012. 06:40 ] @
Pozdrav svima...
Koristim VB.NET i mySQL u izradi jedne aplikacije.
Interesuje me kako uraditi UNDO operaciju nad mysql bazom iz .NET-a.
Da li treba izbrisan podatak pamtiti u nekoj backup tabeli ili...

Takođe me interesuje nešto u vezi replikacije baze...
Kako se podešava, koji su bitni parametri i slično...

Hvala
Miloš
[ aca andrijevic @ 19.04.2012. 08:04 ] @
Citat:
mish_ns: Pozdrav svima...
Koristim VB.NET i mySQL u izradi jedne aplikacije.
Interesuje me kako uraditi UNDO operaciju nad mysql bazom iz .NET-a.
Da li treba izbrisan podatak pamtiti u nekoj backup tabeli ili...



START TRANSACTION, COMMIT, and ROLLBACK Syntax
[ mish_ns @ 19.04.2012. 08:09 ] @
Hvala Aco...

Ovo mi je jasno, ali kako da kada korisnik slučajno obriše neke podatke iz tabele, omogućim putem Button-a Undo, da ih vrati u odgovarajuću tabelu?
[ Dejan Carić @ 19.04.2012. 09:10 ] @
Jednom kada uradiš uradiš commit ne možeš da radiš nikakav undo. Jedino da uradiš restore baze.
Jedno od rešenja ti je da u tabeli setuješ neki flag umesto da fizički izbrišeš red u bazi:

Code:

PERSON
======
ID
FIRST_NAME
LAST_NAME
...
IS_DELETED

I onda kod brisanja umesto delete izvrši update naredbu.
[ mish_ns @ 19.04.2012. 09:55 ] @
Da to je moguće rešenje...
Hvala na odgovoru...
[ Shadowed @ 19.04.2012. 10:37 ] @
Drugo resenje je da imas history tabelu i trigger (ne znam da li mysql ima iste) koji ce puniti history tabelu na svaku promenu. Posle mozes da vratis bilo koje stanje. Ovo naravno ima svoj problem sto se tice prostora koji ce zauzimati takva baza kao i to da bi nastala zbrka sa relacijama ako ih imas a verovatno imas.
Treca opcija je da napravis apstrakciju i ne radis undo na nivou baze nego na nivou aplikacije pa da u aplikaciji cuvas stara stanja i napravis logiku kako da ih vracas.
Sve u svemu, nimalo jednostavna stvar.
[ mish_ns @ 19.04.2012. 10:45 ] @
Hvala i tebi Shadowed...
Sada mi pade na pamet da bih mogao imati pomoćnu tabelu koja bi pamtila poslednje tri izbrisane stavke...
Pošto sa trigerima nisam puno radio, pa ne znam da li bi mogao triger - before insert, recimo da prepozna ako ima više od tri stavke u tabeli da ih izbriše?
Kako to može da se uradi?
[ ravni @ 19.04.2012. 11:38 ] @
Nema potrebe da komplikujes sa 3 ili nekim drugim brojem stavki. Za svaku tabelu imas history tabelu, i kada brises ili menjas red, selis ga trigerom u history tabelu.

A onda ako se bas pojavi problem da su u history tabelama milioni redova, mozes napraviti job koji ce jednom nedeljno (ili kad vec) cistiti redove starije od X dana.
[ mish_ns @ 19.04.2012. 11:41 ] @
Ok...Jel imate možda primer za jedan takav triger?
[ dragancesu @ 19.04.2012. 17:31 ] @
Citat:
Da li treba izbrisan podatak pamtiti u nekoj backup tabeli ili...

Ovo mi je jasno, ali kako da kada korisnik slučajno obriše neke podatke iz tabele, omogućim putem Button-a Undo, da ih vrati u odgovarajuću tabelu?


Zavisi koliko ti je vazno, bar sto se tice onog prvog.

Ovo drugo ima osnova u praksi, da se zna sta je menjano ili obrisao. Pre brisanja prvo sacuvas, ili pre menjanja sacuvas prethodne vrednosti. Ali vracanje nikako ne na dugme jer to nema smisla, nego na zahtev. S druge strane vazne podatke zastiti od brisanja i menjanja.

Ako slucajno obrise, slucajno ce ponovo da ih unese. Podaci ne nestaju slucajno, kompjuter ne gresi nego covek.

[ ravni @ 20.04.2012. 08:17 ] @
Citat:
mish_ns: Ok...Jel imate možda primer za jedan takav triger?
Evo jedne implementacije pa vidi da li nesto mozes da iskoristis.