Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ventajas de usar procedimientos almacenados (https://www.clubdelphi.com/foros/showthread.php?t=78078)

AzidRain 18-03-2012 18:26:09

Ventajas de usar procedimientos almacenados
 
Resulta que estamos haciendo algunos cambios a un sistema en producción algo grande y que opera en varias sucursales de uno de nuestros clientes. Los cambios implican que al momento de emitir una factura sucedan algunas otras cosas en las tablas adicionales a las que ya hace el sistema. Este sistema está en producción desde el 2006 y como comprenderán tiene en su haber varios parches de diversa índole. Debido a que las modificaciones son a nivel de tablas, optamos por sugerencia de uno de nuestros ingenieros en utilizar procedimientos almacenados y triggers para no tener que tocar el código Delphi que ya tenemos y hacer que la propagación de los ajustes sea prácticamente instantánea en todas las sucursales.

Hemos hecho pruebas y resulta bastante más práctico hacerlo usando esta opción pero quería preguntarle a quienes ya hacen uso extensivo de los procedimientos almacenados que otras ventajas y desventajas tiene utilizarlos.

Una de las que me gustaron bastante es que de esta manera también tenemos la ventaja de poder usar cualquier lenguaje de programación pero no me gusta mucho el tener que meter lógica de negocio dentro de la BD.

A ver que opinan

Casimiro Notevi 18-03-2012 19:50:14

Además de lo que has comentado, algo primordial de los "stored procedures" y de los "triggers" es que al ejecutarse en el servidor, liberan a la red y los clientes de un trabajo importante.
Desde luego, yo soy partidario de poner en la BD todo lo que pueda hacer ella, ya que facilita mucho también el trabajo de desarrollo de cualquier aplicación, imagina un proceso que ahora se decide que tenga que hacer algo con otra tabla, si lo hacemos en el código del programa habrá que copiar una nueva versión a todos los clientes con las molestias (y contratiempos) que puede ocasionar, por ejemplo, que uno se quede sin actualizar. Sin embargo, si se hace en la BD, nadie se enteraría y todos seguirían trabajando como siempre.
Por supuesto, hay que tener muy claro qué cosas pueden ir en la BD, no todo vale.

newtron 19-03-2012 09:09:33

Totalmente de acuerdo con casimiro. Yo soy partidario también de dejar que la base de datos haga el máximo de trabajo posible, esto repercute en dar más agilidad a la aplicación y más facilidad al desarrollador que se despreocupa de esas tareas haga lo que haga en cualquier parte del programa lo cual redunda en un menor porcentaje de problemas.

El único problema sería que si cambiaras de base de datos casi con toda seguridad tendrías que adaptar los procedimientos y los triggers a la nueva base de datos pero no creo que ese sea un caso habitual.

Saludos

fjcg02 19-03-2012 09:56:02

Ventajas.
Todas las que puedas imaginarte.
Recomendación: que los triggers y procedimientos almacenados sean lo más atómicos posibles, sobre todo cuando sean de actualización. Queiro decir que si una modificación en un registro de una tabla desencadena varias actualizaciones, que cada actualización se dispare en los triggers de cada tabla.

Deventajas.
Alto grado de acoplamiento. Qué quiere decir esto. Que si una aplicación te piden que corra en otro motor de BBDD, tendrás que reescribir todo el código de los trigger y store procedures, y a veces eso, no es fácil.

Saludos

Hispanohablante 19-03-2012 19:03:44

En mi caso considero todas las ventajas y desventajas mencionadas.

Cita:

Empezado por AzidRain (Mensaje 427912)
no me gusta mucho el tener que meter lógica de negocio dentro de la BD

Comparto esto, pero sólo cuando usar un lenguaje externo al de la base de datos signifique reducir en buena medida la complejidad de un proceso. Por dar un ejemplo, en ocasiones es mejor usar Delphi para realizar liosos cálculos de facturación que hacerlo bajo SQL o alguna de sus variantes.

El coste de mantenimiento del código no debe ser desestimado. Un código fuente bien escrito en procedimientos almacenados puede resultar más delicado o difícil de seguir que un código fuente bien escrito en Object Pascal.

Tema aparte, siendo este un foro en español, dejo la sugerencia de escribir disparador cuando queremos decir trigger, de la misma forma en que decimos "este procedimiento almacenado es bueno" en lugar de "este stored procedure es bueno". Así, evitando mezclar voces de diferentes idiomas cuando no hay necesidad de ello, protegemos el nuestro.

Saludos cordiales.

AzidRain 20-03-2012 00:57:02

Finalmente decantamos por continuar metiendo todo lo que valga la pena en la BD. La mayóría son cálculos simples o actualizaciones en cascada. Dado que es un sistema que ha venido creciendo de a poco, hemos avanzado a saltos al programar directamente en la BD en lugar de tener que estar actualizando a todo el mundo.

Gracias por los aportes


La franja horaria es GMT +2. Ahora son las 00:09:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi