PDA

View Full Version : [SQL]Tabelle 'di back up'


RaouL_BennetH
24-09-2009, 11:59
Ciao a tutti :)

Scusatemi per il titolo poco chiaro ma stamane ho qualche problema neuronico :(

Partendo dal presupposto che quando sono io a disegnare uno schema, preferisco già in fase iniziale non prevedere mai delle cancellazioni fisiche da una tabella. Generalmente alla tabella principale ne associo una in cui setto un campo come attivo oppure no, oppure, per tabelle molto piccole, il campo lo gestisco direttamente dalla tabella stessa. Per es.:



tabella Lavoratori:
id
cognome
valangataDiCampi....

tabella LavoratoriAttivi
lavoratoreId
attivo (vero o falso)

//oppure nel caso di una tabella piccolina
id
cognome
attivo




E quando un record dev'essere cancellato, mi limito a settare a falso il valore nella tabella 'attivi'. In sostanza quindi mi limito sempre ad un update.
Questo perchè anche in presenza di interazione con l'utente prima di cancellare qualcosa... tanta è la smania di cliccare sempre su 'Si' qualsiasi cosa ci sia scritto su una finestra di dialogo che, con questo forse poco elegante sistema, ho messo al sicuro molti record dall'oblio :P


E' ovvio però che questo modo di fare mi crea dei problemini:

1) Ogni inserimento va su almeno due tabelle
2) Ogni interrogazione dev'essere fatta non dimenticandosi le varie relazioni fra le tabelle
3) Spesso per costruire delle viste un pò più complesse devo sempre fare attenzione a dove il campo 'attivo' è vero

Insomma, per cose piccoline, posso anche arrangiarmi...

Quello che vi chiedo è se esistano delle funzioni, magari native dei vari db, che tengano traccia e possano memorizzare le variazioni in modo automatico (una volta create le funzioni ovviamente). In pratica dei log, dai quali poter ripescare anche il contenuto di una cancellazione.

Grazie a tutti :)

RaouL.

vizzz
24-09-2009, 13:08
se il db lo permette potrebbero venirti in aiuto trigger e trigger_function

RaouL_BennetH
24-09-2009, 14:00
se il db lo permette potrebbero venirti in aiuto trigger e trigger_function

Colto il suggerimento a volo, ho creato un trigger 'before delete' sulla tabella che mi interessava. Funziona perfettamente.


Grazie mille :)

RaouL.

P.S.: scusate, nell'entusiasmo ho dimenticato di postare anche il come:



CREATE TRIGGER tabellaTrigger BEFORE DELETE on tabella
FOR EACH ROW
INSERT INTO tabellaBck(campo1, campo2, etc.)
VALUES (OLD.campo1, OLD.campo2, OLD.etc);