Estoy usando PetaPoco micro-ORM. De hecho, es muy fácil y seguro trabajar con bases de datos utilizando herramientas ORM, pero lo único que odio es el código adicional. Solía poner la mayor parte del código en la base de datos y usar todas las características de RDBMS, como procedimientos almacenados, disparadores, etc., que está diseñado para manejar mejor.
Quiero saber cuándo no usar ORM sobre procedimientos almacenados / disparadores y viceversa.
Respuestas:
Los ORM (mapeo relacional de objetos) no son mutuamente excluyentes con los procedimientos almacenados. La mayoría de los ORM pueden utilizar procedimientos almacenados. La mayoría de los ORM generan procedimientos almacenados si así lo elige. Por lo tanto, el problema no es tampoco.
Los ORM pueden generar SQL inaceptable (en términos de rendimiento) y es posible que a veces desee anular ese SQL con SQL hecho a mano. Una de las formas de lograr esto es mediante el uso de SP (procedimientos almacenados).
En DotNet, no use procedimientos almacenados si:
Si no está familiarizado con los procedimientos almacenados (no es su caso, pero se incluye para completar).
Si no desea introducir una capa de complejidad y versificación en su proyecto.
Está creando una aplicación que debería funcionar con diferentes bases de datos o que tendría que replicarse en varios servidores de bases de datos (esta última restricción puede aplicarse solo a algunas bases de datos).
Tenga en cuenta que los desencadenantes no se pueden comparar con los ORM. Los disparadores realizan funciones que es mejor que no estén en el código de su aplicación (como el registro o la sincronización de datos en bases de datos).
Algunas personas prefieren el uso de procedimientos almacenados en lugar de SQL en el código por diferentes razones, como la seguridad (por ejemplo, para evitar la inyección de SQL) y por su velocidad reclamada. Sin embargo, esto es algo discutible y necesita una discusión detallada.
Si su ORM no puede generar Procedimientos almacenados, y tiene que escribir un sistema grande, entonces necesita ponderar la codificación manual adicional según su caso.
fuente
Los ORM a menudo suponen que la base de datos existe para servir el ORM. Pero, por lo general, la base de datos existe para servir a la empresa, que podría tener cientos y cientos de aplicaciones escritas en varios idiomas.
Pero es solo un caso de "ORM vs. Procedimientos almacenados" si está utilizando un ORM que no puede llamar a un procedimiento almacenado. De lo contrario, se trata de decidir dónde codificar la lógica empresarial.
Dondequiera que codifique la lógica de negocios, su trabajo es asegurarse de que la base de datos cambie de un estado consistente a otro, independientemente de la aplicación que realice el cambio . Así que realmente solo tiene dos opciones prácticas: codificarlo una vez en la base de datos o codificarlo una vez en una capa de acceso a datos "impenetrable".
Tenga cuidado con la interfaz de línea de comandos dbms si utiliza un DAL "impenetrable".
fuente
Consulta simple -> ORM
Consulta compleja -> Procedimiento almacenado
fuente
El disparador se debe utilizar como invariable de registro o constar de reglas comerciales vitales, en mi humilde opinión.
Los problemas de las ormas:
fuente
Discrepar. La consulta ORM solo es más simple si conoce ORM mejor que SQL. ORM resulta en mucho más código, mucho más difícil de mantener IMO. Las únicas personas que se benefician de ORM son los accionistas de la compañía que vende el ORM (por ejemplo, Microsoft).
fuente