sql >> Base de Datos >  >> RDS >> Database

Unidades Funcionales


Introducción

Hay dos escuelas de pensamiento sobre la realización de cálculos en su base de datos:las personas que piensan que es genial y las personas que están equivocadas. ¡Esto no quiere decir que el mundo de las funciones, los procedimientos almacenados, las columnas generadas o calculadas y los disparadores sea todo color de rosa! Estas herramientas están lejos de ser infalibles, y las implementaciones mal consideradas pueden funcionar mal, traumatizar a sus mantenedores y más, lo que explica de alguna manera la existencia de controversia.

Pero las bases de datos son, por definición, muy buenas para procesar y manipular información, y la mayoría de ellas ponen ese mismo control y poder a disposición de sus usuarios (SQLite y MS Access en menor grado). Los programas de procesamiento de datos externos comienzan con el pie derecho al tener que extraer información de la base de datos, a menudo a través de una red, antes de que puedan hacer algo. Y donde los programas de bases de datos pueden aprovechar al máximo las operaciones de conjuntos nativos, la indexación, las tablas temporales y otros frutos de medio siglo de evolución de las bases de datos, los programas externos de cualquier complejidad tienden a implicar cierto nivel de reinvención de ruedas. Entonces, ¿por qué no poner la base de datos a trabajar?



Esta es la razón por la que no ¡quieres programar tu base de datos!

  • La funcionalidad de la base de datos tiende a volverse invisible, especialmente los disparadores. Esta debilidad aumenta aproximadamente con el tamaño de los equipos y/o aplicaciones que interactúan con la base de datos, ya que menos personas recuerdan o conocen la programación interna de la base de datos. La documentación ayuda, pero solo hasta cierto punto.
  • SQL es un lenguaje creado específicamente para manipular conjuntos de datos. No es especialmente bueno en cosas que no están manipulando conjuntos de datos, y es menos bueno cuanto más complicadas se vuelven esas otras cosas.
  • Las capacidades de RDBMS y los dialectos de SQL difieren. Las columnas generadas simples son ampliamente compatibles, pero trasladar una lógica de base de datos más compleja a otras tiendas requiere tiempo y esfuerzo como mínimo.
  • Las actualizaciones del esquema de la base de datos suelen ser más complicadas que las actualizaciones de la aplicación. La lógica que cambia rápidamente se mantiene mejor en otro lugar, aunque puede valer la pena revisarla una vez que las cosas se estabilicen.
  • Administrar programas de base de datos no es tan sencillo como cabría esperar. Muchas herramientas de migración de esquemas hacen poco o nada por la organización, lo que lleva a diferencias en expansión y revisiones de código onerosas (los gráficos de dependencia de sqitch y la reelaboración de objetos individuales lo convierten en una excepción notable, y migra busca eludir el problema por completo). En las pruebas, los marcos como pgTAP y utPLSQL mejoran las pruebas de integración de caja negra, pero también representan un compromiso adicional de soporte y mantenimiento.
  • Con una base de código externa establecida, cualquier cambio estructural tiende a ser tanto laborioso como arriesgado.

Por otro lado, para aquellas tareas a las que se adapta, SQL ofrece velocidad, concisión, durabilidad y la oportunidad de "canonizar" los flujos de trabajo automatizados. El modelado de datos es más que sujetar entidades como insectos a un cartón, y la distinción entre datos en movimiento y datos en reposo es complicada. El descanso es realmente un movimiento más lento en un grado más fino; la información siempre fluye de aquí para allá, y la programabilidad de la base de datos es una herramienta poderosa para administrar y dirigir esos flujos.

Algunos motores de bases de datos dividen la diferencia entre SQL y otros lenguajes de programación al acomodar también esos otros lenguajes de programación. SQL Server admite funciones escritas en cualquier lenguaje .NET Framework; Oracle tiene procedimientos almacenados en Java; PostgreSQL permite extensiones con C y es programable por el usuario en Python, Perl y Tcl, con complementos que agregan scripts de shell, R, JavaScript y más. Completando los sospechosos habituales, es SQL o nada para MySQL y MariaDB, MS Access es solo programable en VBA, y SQLite no es programable por el usuario en absoluto.

El uso de lenguajes que no sean SQL es una opción si SQL es inadecuado para alguna tarea o si desea reutilizar otro código, pero no solucionará los otros problemas que hacen que la programación de bases de datos sea una espada de muchos filos. En todo caso, recurrir a estos complica aún más la implementación y la interoperabilidad. Advertencia scriptor:que el escritor tenga cuidado.



Funciones vs Procedimientos