Newsgroup: it.comp.software.database
Titolo: inserimento tupla mediante trigger

Salve a tutti.
Vorrei inserire (magari usando un trigger, ma non so se e' giusto) una
riga in una tabella di un database MySQL con queste modalita':
ho una tabella in cui devo segnare un valore in euro e una data. Se
poi questo valore in euro e' negativo, devo inserire automaticamente
nella tabella, con la data del mese successivo, lo stesso valore in un
altro campo della stessa tabella.
In pratica ho questa tabella:
 
data      cred. iva precedente      liquid iva
===============================
01-03                 0                            100
01-04                 0                            -30 (valore
negativo, devo inserire una nuova riga)
*01-05               30                             xxx   *questa riga
va inserita automaticamente
 
Il mio problema pero' e' per gli "effetti collaterali".
Una volta inserita automaticamente, se poi il tizio che inserisce
sbaglia, la seconda riga puo' venire cancellata, ma la terza rimane!
Oppure se sbaglia la cifra e "liquid iva" e' invece positivo, la riga
non andava inserita proprio!
Come posso fare per evitare questi effetti? il trigger non e'
indicato?
Ed e' possibile trovare una soluzione?
Non posso cambiare la logica dietro questo inserimento perche' mi e'
stato chiesto espressamente di fare cosi'.
Grazie a chiunque vorra' aiutarmi.
 
 

 stato chiesto espressamente di fare cosi'.
 
Hai due possibilità:
La prima, come hai pensato tu, è quella di usare i trigger.
Ovviamente non dovrai gestire solo l'inserimento, ma anche la 
cancellazione e la modifica di una riga.
La seconda possibilità è quella di gestire la logica applicativa, 
nell'applicativo.
Non dai informazioni sull'architettura, che fondamentale per scegliere 
dove mettere chi a fare cosa...
un saluto
 
-- 
Emanuele Desideri
 
 

 Il mio problema pero' e' per gli "effetti collaterali".
 
1) in generale concordo con Emanuele, queste cose si gestiscono in codice, tranne casi selezionati.
 
2) Quale e' il motivo per cui non ricorri ad una transazione?


Il sistema sara' un database MySQL, con un server web Apache+PHP, su
un server Linux.
 
Le transazioni sarebbero una bellissima idea, pero' resta che se
l'operatore si accorge DOPO di aver sbagliato, non risolvo nulla.
Cioe' voglio dire:
il tizio inserisce le fatture, ecc ecc... e (mettiamo che metta le
transazioni) committa.
Il giorno dopo si accorge che gli mancava una fattura, e il risultato
cambia, quel valore particolare da positivo passa a negativo. Come la
recupero quella riga inserita automaticamente?
Forse potrei mettere un flag, ricordarmi il risultato prima di essere
modificato, e se il risultato comportava l'inserimento, andare a
cercare una riga "flaggata" con quell'importo e cancellarla. Che ne
dite?
 
 

 recupero quella riga inserita automaticamente?
 
Vedo come alcune cose oramai mi siano talmente consuete da essere 
automatiche, deformazione professionale.
 
Per me e' ovvio che a fronte di ciascuno delle tre operazioni 
(inserimento, modifica e cancellazione) avrai/dovrai avere tre pezzi di 
codice (che puo' benissimo essere annegato nei trigger se ne ricorrano i 
motivi di utilizzo), che compiono le operazioni da eseguirsi nei tre casi.
 
E sia nel primo caso, cosi' come nel secondo e nel terzo, il rapporto 
tra la riga inserita chiamamola "principale" e quella "secondaria" deve 
essere determinato e determinabile nella tua testa prima che nel DB o 
nel suo disegno.
 
Se cosi' non e' hai un problema.
 
In altre parole devi trovare una relazione (non necessariamente una 
relazione DB, anzi) tra i due "oggetti" che poi trasformerai in una 
relazione DB oppure in un pezzettino di codice.