Hola, hace unos días entre en discusión con un amigo sobre que es mejor y mas seguro en la capa de acceso a datos.
La solución que implante hace algunos meses en cuanto a la abstracción de la base de datos es usar Doctrine y con ello reducia tiempo de aprendizaje de los distintos gestores de Bases de Datos y ademas tenia la misma sentencia SQL para cualquiera de las bases de datos que soporta doctrine. Ademas de contar con las ventajas de un ORM.
Mi amigo implemento otra solución, el trabaja en java asi que supongo que se hizo una capa de abstracción de datos, con clases para las BD que quiere trabajar.
Aunque no tiene la misma sentencia para los gestores usa mucho los procedimientos almacenados y entonces solo hace llamadas desde java a esos procedimientos y se basa en algo en lo que estamos de acuerdo al usar Procedimientos almacenados y es que las sentencias se ejecutan mas rápido en el servidor de base de datos, desde la interpretación de la consulta, el cacheo y la devolución del resultado.
Ademas de eso tengo entendido que se añade una cuota extra se seguridad si solo se usan procedures, ya que desde el código no habrá referencias a las tablas solo llamadas a procedimientos y la recepción de datos.
Pero hay una desventaja de usar los procedimientos. Se tiene que implementar cada procedimiento en todos los gestores de bases de datos en los que se piensa trabajar.
Ahora piendo que hay buenas razones para implementar los procedures, si se tiene un escenario de miles de consultas del mismo tipo en una base de datos con miles de registros, creo que se ahorran muchos recursos al usar los procedimientos almacenados, y reducir el volumen de datos que se envian desde el servidor a la maquina del cliente.
Ustedes que piensan, que es mejor usar?
Segundo, en doctrine se pueden hacer llamadas a los procedimientos almacenados.