Como desarrollador principalmente escribiendo C# He adoptado algunas buenas prácticas al escribir el código C#. Cuando a veces escribo procedimientos almacenados tengo problemas para aplicar esas prácticas al código de procedimiento almacenado.Mejores prácticas de estructuración de procedimientos almacenados
En varias ocasiones he heredado el código de procedimiento almacenado de pesadilla, primero tres o cuatro capas de procedimientos almacenados configurando algunas tablas temporales y sobre todo llamándome entre sí. No se hizo un trabajo real y solo unas pocas líneas de código. Entonces, finalmente, hay una llamada al procedimiento almacenado "final", un gran monstruo de 3000-5000 líneas de código SQL. Ese código generalmente tiene un montón de código que huele a duplicación de código, intrincados flujos de control (también conocidos como spaghetti) y un método que hace demasiadas cosas apiladas una tras otra sin una separación clara donde comienza un pedazo de trabajo y dónde termina (ni siquiera un comentar como un divisor).
También he notado el uso de declaraciones de comentarios comentadas que seleccionan de tablas temporales intermedias. Las selecciones se pueden volver a activar con fines de depuración, pero deben eliminarse antes de cualquier código de llamada esperando un orden específico de los conjuntos de resultados devueltos.
Aparentemente, mis compañeros de equipo también comparten mi falta de buenas prácticas de escritura SQL.
Entonces ... (y aquí viene la verdadera pregunta) ... ¿cuáles son las buenas prácticas para escribir procedimientos almacenados modulares y mantenibles?
Tanto las prácticas caseras como las referencias a libros/blogs son bienvenidas. Métodos y herramientas que ayudan con ciertas tareas.
Permite resumir algunas áreas donde no he encontrado buenas prácticas
- modularización y la encapsulación (se almacenan los procedimientos de comunicación a través de tablas temporales realmente el camino a seguir?)
- en C# utilizo asambleas, clases y métodos decorados con modificadores de acceso para lograr esto.
- Depuración/prueba (mejor que la modificación del objeto de la depuración?)
- herramientas de depuración?
- ¿Debug traces?
- ¿Accesorio de prueba?
- Destacando código de la lógica de flujo de control// data/utilizando el código de la estructura del código
- en C# I refactorizar y salir métodos más pequeñas que hace precisamente una tarea lógica cada uno.
- duplicación Código
Parcialmente me encuentro con SQL Server como DBMS pero DBMS respuestas o respuestas agnósticos señalando características de otros DBMS: es que ayuda en casos anteriores también son bienvenidos.
Para dar algunos antecedentes: La mayoría de los procedimientos almacenados grandes que he encontrado se encuentran en escenarios de informes donde la base es simplemente crear algunos valores de resumen de una tabla grande. Pero a lo largo del camino debe excluir algunos de los valores que se encuentran en alguna tabla de excepciones, agregue algunos de los valores en una tabla de elementos no completada, compare con el año pasado (¿se imagina el código feo que maneja los productos cambiando de departamento? entre años?), etc.
Por estas razones, así como por la imposibilidad de utilizar procedimientos almacenados con SCM, los he evitado para todos los usos más necesarios y obvios (activadores, etc.). Mantenemos la lógica comercial en la capa de negocios (.NET) y utilizamos la base de datos para eso: una base de datos. – gahooa
Idealmente, los procedimientos almacenados no deben llamar a otros procedimientos almacenados. Para eso es la capa BL. Desafortunadamente, ese sentimiento realmente no ayuda si ya tiene una base de datos llena de llamadas SP anidadas. ¿Está buscando consejos sobre cómo hacer que el modelo actual sea más fácil de mantener, o consejos sobre cómo refactorizar su sistema para seguir mejor las mejores prácticas? –
@gahooa Puse tanto como sea posible en .NET también (en parte porque ese es el escenario de mi casa) pero en algunas ocasiones, como cuando heredas una gran base de código o cuando tienes grandes cantidades de datos, estás más o menos atorado con el almacenamiento procedimientos. –