Wnas foro
Esta pregunta me la plantee hace un buen tiempo: "que es recommendable?", una transaccion por ibquery o una transaaccion por todas... ibquery, ibsql...
La poca expereciencia en el mundo de la programacion de delphi con interbase y debo suponer con otros lenguajes y motores de base de datos cliente servidor me ha enseñado:Que el uso de las transacciones es a buen criterio del programador (segun la necesidad), te doy un ejemplo y saca una conclusion de ello.
Debo suponer que conoces ya el uso de los componentes ibx y al menos algunos conceptos en la programacion de ellos...
Supongamos que tenemos dos tablas: una es la Clientes y la otra la de Abonos, lo justo y normal es que exista un registro en Clientes y cero, uno o varios registros en la tabla abonos por cada cliente.
Código PHP:
tabla Clientes
codclie Cargo Abono
====================
00001 100.23 33.00
00002 123.63 10.00
00003 78.68 32.00
00004 74.00 22.00
tabla Abonos
codcli recibo Abono fecha
===============================
00001 FG001252 10.00 12/12/2004
00001 FG001253 11.00 13/12/2004
00001 FG001254 12.00 15/12/2004
00002 FG001255 10.00 12/12/2004
00003 FG001256 11.00 12/12/2004
00003 FG001257 10.00 14/12/2004
00003 FG001258 11.00 16/12/2004
00004 FG001259 12.00 18/12/2004
00004 FG001260 10.00 19/12/2004
Si observas en la tabla cliente: la columna abono es la suma de la columna abono de la tabla Abonos ;-)
Imaginemos la actualizacion de estas tablas....
Código PHP:
1.- dos ibquery.
2.- una transaccion que sera compartida para los dos ibquerys.
3.- inicializo la transaccion.
4.- inserto un registro con nuevos datos en abonos.
5.- actualizo el campo abono de la tabla clientes sumando el monto
existente mas el nuevo abono de la tabla abonos.
6.- aplico la transaccion.
Con este metodo de una sola transaccion me aseguro que se confirme los datos tanto para la tabla clientes y la tabla abonos.... si sale algo mal en la actualizacion de la tablas la transaccion se deshace ;-) y las dos tablas quedan como estaban.
Si hubiera sido dos transsaciones una para cada tabla????
Imaginate que la primera transsacion se confirme osea la de clientes y por alguna razon del destino en la segunda tabla de abonos ocurre algun error: (error de unique, clave foranea...cualquier error)...ah??, como quedan las tablas??... respuesta: solo la tabla clientes confirmada la transaccion y la segunda "rollback", transaccion deshecha. y tus tablas no quedarian consistentes (la suma de abono en la tabla abonos no reflejaria lo que indica en abono de la tabla clientes).
Entoces en este caso se sugiere usar una sola transaccion... ahora otro dira pero mejor usa un procedure para tu actualizacion con su respectiva transacion----tienes razon, pero esto es un ejemplo que se me ocurrio para explicar el uso de las trasacciones
Bueno, no soy profesor, espero haberme hecho entender: eso depende de tu necesidad, una de las ideas del uso de las transaciones es la consistencia extra de tus datos...(o todo o nada)
Your friend,
StartKill
Lima-Perú