usar proc. almacenados como interfaz para base de datos

Alvaro Herrera alvherre en alvh.no-ip.org
Mar Nov 27 14:22:28 CLST 2007


rodrigo ahumada escribió:

> resulta que en el lugar donde trabajo, se utiliza base de datos de una
> manera bien especial, como log de eventos. Las cosas que se le piden a
> la base de datos estan relativa% bien definidas, pero se trabaja con
> ella usando sentencias sql cocinadas a mano dentro de los programas.
> 
> mi pregunta es:
> 
> es buena idea hacer uso de procedimientos almacenados como interfaz
> para la base de datos?
> 
> es decir, buscar todas las sentencias sql que se usan el los
> programas, y asigna un procedimiento almacenado que las ejecute.

Probablemente la ganancia no sea mucha.  Una idea mas practica puede ser
eliminar las sentencias SQL de la aplicacion y ponerlas en una capa
intermedia, al nivel mas bajo que sea posible.  De este modo si algun
dia te quieres cambiar de motor puedes hacerlo con solo reescribir la
capa intermedia, sin cambiar la aplicacion.  Idem si quieres hacer
cambios de modelo de tablas.

Otra idea es usar vistas (CREATE VIEW) para encapsular las consultas al
lado del servidor, de manera que la capa intermedia sea mas "delgada".
De esa forma el modelo de datos queda en 4 capas: aplicacion, biblioteca
de acceso, vistas, tablas.  Eso te da mas libertad para cambiar las
tablas, y ademas te permite que la biblioteca de acceso sea mas facil de
escribir.  Si tienes aplicaciones en mas de un lenguaje (ej. Perl, PHP y
C) entonces no tienes que reescribir todo cada vez, sino que la mayor
parte está en las vistas.

La desventaja de usar proc. almacenados es que de todas maneras tienes
que tener en la aplicacion el conocimiento de como se invocan los SPs en
la base de datos que estas usando.  Por ej. en Postgres tienes que hacer
"SELECT * FROM nombre_proc(args)".  En otros haces "CALL nombre_proc()".
Etc.  Tener que cambiar la aplicacion por todas partes para corregir
eso, es un desastre; con lo cual resulta que _de todos modos_ necesitas
una capa intermedia.

-- 
Alvaro Herrera                 http://www.amazon.com/gp/registry/DXLWNGRJD34J
"The problem with the facetime model is not just that it's demoralizing, but
that the people pretending to work interrupt the ones actually working."
                                                           (Paul Graham)


Más información sobre la lista de distribución Linux