RECUPERACIÓN DE OTRAS RESPUESTAS
Aquí hay un resumen rápido de lo que otros han dicho aquí antes.
Política de la empresa profesional:
- Permite rastrear las dependencias entre los objetos de la base de datos y la visión general de cómo los cambios planificados afectan el esquema;
- El equipo de DBA puede revisar y controlar los derechos de acceso a las aplicaciones;
- El equipo de DBA puede predecir el impacto en el rendimiento de los cambios;
- Desacopla la base de datos del código de la aplicación;
- Teoría de la ventana rota ... lo que significa que así es como organizan su código, y romper la consistencia hará que la infraestructura sea más difícil de comprender para los recién llegados, lo que hará que respeten y luchen por una calidad menor;
- Obtiene su cheque de pago para hacer lo que se le pidió que hiciera. Esta es una política de la empresa y en este momento no tiene la autoridad para cambiarla, por lo tanto, es mejor vivir con ella.
Política de la empresa contra:
- Esta mentalidad de la compañía es muy rígida y dogmática, y la política hace que el trabajo del desarrollador sea innecesariamente engorroso. Desafortunadamente, vea el último punto en la sección Pros;
- Como se refiere a back2dos diciendo "Para cada consulta realizada en la base de datos, debe buscar el procedimiento almacenado" , una política de solo sprocs a menudo da como resultado la duplicación de código, porque diferentes desarrolladores no tienen idea de qué sprocs podrían reutilizarse para su problema en mano;
- Además, irónicamente, lo contrario al caso anterior también crea problemas, cuando alguna aplicación posee un sproc, luego otra lo reutiliza, luego la primera lo actualiza sin saber quién más comenzó a confiar en él. Los DBA realizan un seguimiento de las dependencias no más allá de las paredes de la sala de servidores de DB, así que no esperes que les importe qué aplicación depende de qué fuera de eso. Si los equipos de aplicación no lo rastrean entre ellos, ese es su problema, los DBA están cubiertos.
AQUELLOS 2 CENTOS
En primer lugar, muchas respuestas aquí usan la palabra estándar . La práctica de prohibir consultas directas y solo permitir sprocs no se denomina estándar. Es una política (ver la respuesta de jzd ).
En segundo lugar, específico para su problema: mi principal argumento en contra de una política tan restrictiva de usar exclusivamente procedimientos almacenados sería el lenguaje SQL en sí mismo , y no necesariamente la infraestructura de repositorio de lógica de negocios centralizada que promueve (aunque también tiene sus contraargumentos) .
SQL es un lenguaje bastante rígido y no composable, con un poder expresivo bastante limitado . Esto significa que llegará a un callejón sin salida muy temprano con respecto a la reutilización del código . Una de las razones de esta rigidez es que no hay medios para pasar funciones de primera clase de ninguna manera (como con los lenguajes OOP que usan polimorfismo), lo que limita significativamente la componibilidad . Lo más cercano que puede llegar a eso en potencia expresiva es escribiendo consultas SQL dinámicas construidas utilizando la concatenación de cadenas. No es una buena cosa. Las consultas dinámicas anulan algunos de los puntos en la sección "pros", como las dependencias de seguimiento entre objetos de base de datos, y generalmente tienen un rendimiento peor, son propensos a errores, son difíciles de depurar y aumentanriesgo de ataques de inyección SQL . Desafortunadamente, con SQL encontrará que no puede llegar muy lejos extrayendo lógica reutilizable común entre sprocs sin golpear la pared y verse obligado a recurrir a consultas ejecutadas dinámicamente.
ACTUALIZACIÓN: Otra gran limitación de los procedimientos almacenados, además de la función de primera clase, es el paso y la devolución de tipos de datos compuestos como argumentos, ya sean listas, conjuntos, registros o pares clave-valor. Esto también perjudica la compostibilidad.
Finalmente, no estoy necesariamente de acuerdo con uno de los puntos pro anteriores, el "desacoplamiento de la base de datos de la aplicación" de Jorge : el principio principal que creo que se aplica aquí es preferir estructuras de datos primitivas con un gran conjunto de operaciones comunes reutilizables y componibles, en lugar de trabajar con API personalizadas . Los Sprocs son tales API personalizadas aquí, que se interponen entre el usuario y los datos relacionales primitivos para consultarlos utilizando primitivas comunes de manipulación de datos componibles ( seleccionar, unir, dónde, agrupar por, etc.) Ahora SQL en sí no es la opción ideal para ser el DSL para las primitivas de manipulación de datos componibles, debido a la rigidez mencionada anteriormente, pero con una elección de lenguaje más sensible (como .NET Linq ... o Lisp / Clojure!) Podría ejecutar su lógica contra una lista simple de la misma manera que contra un conjunto de resultados DB. Obviamente, eso lo hace fácilmente comprobable, lo cual es una buena cosa. Digo que prefiera que su almacén de datos sea tonto, simple y primitivo, de modo que se pueda tropezar con CSV simples. Como puede ver, este modelo también desacopla DB de la aplicación, solo que dibuja la línea en un nivel inferior de abstracción.
¿Qué hacer a continuación?
No está un poco relacionado con la pregunta, pero le animo a que le eche un vistazo a Datomic , que tiene un enfoque interesantemente novedoso para almacenar y consultar datos, en línea con algunas de las observaciones anteriores. (Obviamente, me refiero a mirarlo estrictamente fuera del entorno de trabajo primero ... definitivamente NO vaya a la oficina del CTO al día siguiente y diga "Hola chicos, reescribí algunos de sus sprocs en Datomic y los implementé en este brillante servidor de productos en allí, ¡es realmente genial echar un vistazo! " Es posible que no aprecien la emoción completamente comprensible;)