Bastante largo. ver Resumen al pie.
RDBMS
Un RDBMS significa sistema de gestión de bases de datos relacionales. Es un sistema para administrar una base de datos relacional. Los datos se almacenan allí. Los datos. No dice lógica de negocios.
Procesos de negocio
¿Qué significa realmente la lógica de negocios? Para mí, es una descripción de los procesos comerciales en términos lógicos.
Los procesos son aquellas actividades comerciales que ocurren regularmente, lo suficiente como para que ya no sean ad hoc. Estos son diferentes para cada negocio.
Permítanme ponerme mi límite de negocios y explicar qué significa negocio aquí. Para algunos, esto puede ser una sorpresa.
Negocio
Los negocios son la suma de las actividades realizadas para lograr la creación de valor, y más específicamente el valor que se puede negociar. Esto podría significar hacer cosechadoras, emparedados de atún o proporcionar servicios bancarios. En la mayoría de los países del mundo, incluso en los sistemas no capitalistas, a las personas les gusta obtener el mayor valor por su dinero, y por lo tanto, hay competencia entre los diferentes proveedores de estos bienes y servicios valiosos. La competencia generalmente depende del precio, la calidad y la disponibilidad.
Desvío rápido: necesita 40 millones de remaches en 2 días, no va a ordenar a un tipo en Internet con una cuenta de PayPal, sin importar cuánto más barato sea su precio que el de su proveedor normal.
Conocimiento del proceso
Como puede imaginar, los procesos involucrados en la creación de este "valor" viven principalmente en los jefes ejecutivos. Algo de eso se pone en papel y se usa como políticas y procedimientos de la compañía. Algo de eso vive en las cabezas de los abogados corporativos. Mucho de eso vive en la cabeza de las personas que dirigen las divisiones, departamentos, equipos y los que manejan las máquinas, las cajas registradoras, los hornos, los camiones. Un pequeño subconjunto de eso reduce los requisitos comerciales para el software, y un subconjunto aún más pequeño es preciso cuando se implementa en los sistemas informáticos.
Al final, la lógica empresarial que se ve en el código no es la que ejecuta una empresa, es la que ejecuta la aplicación para la empresa. Los cerebros reales dentro de las personas reales mantienen los procesos comerciales reales, y no tienen problemas para entender que el proceso en su cerebro es más preciso que el proceso en la computadora. Por otro lado, probablemente no podría ejecutar el negocio si todo lo que tuviera fueran las políticas y procedimientos de la mayoría de las corporaciones. Muy a menudo estos son extremadamente inexactos, a pesar de los esfuerzos hercúleos.
Entonces, al final, es la lógica de la aplicación la que está codificada en el software. Y la gente quiere poner eso en la base de datos, porque los vendedores del sistema de administración de bases de datos han hecho afirmaciones grandiosas.
Lógica de aplicación
Yo digo que no. Digo que la lógica de la aplicación permanece dentro de la aplicación. Los datos van a la base de datos, de una manera muy normalizada, y luego se envían ETL al datawarehouse para informar, perforar, acumular, pivotar y cubicar.
Datos
También digo que los datos sobreviven a la aplicación, por lo que el esfuerzo de normalización de datos no debe ser específico de la aplicación, ni siquiera específico de la empresa, sino que debe ser general de la empresa. ¿Almacena códigos de estado? Debe usar INCITS 38: 2009 (http://www.census.gov/geo/www/ansi/statetables.html) porque es portátil en todas las empresas. Esto también facilita que múltiples aplicaciones manipulen los datos.
NoSQL?
Si trata la base de datos como parte del código de la aplicación, desde el diseño de las tablas hasta los desencadenantes, los procedimientos almacenados y los formatos de datos, esencialmente está utilizando la base de datos empresarial como un BerkleyDB glorificado, que es una estructura de archivos planos glorificada, que en realidad solo son listas persistentes. Esto es esencialmente lo que NoSQL está haciendo: volver a las raíces, pero hacerlo de manera multiproceso, persistente y tolerante a fallas.
Código actual
No, debe tratar la base de datos como un depósito común de datos para múltiples aplicaciones, tanto actuales como futuras. Ahora llegamos al quid de mi argumento. Los procesos comerciales cambian con los caprichos del mercado, la política y la moda. Muy a menudo cambian más rápido de lo que los codificadores pueden gestionar con lenguajes de grado informático (Java, C #, C ++, etc.) y terminan siendo escritos en VBA en hojas de cálculo de Excel en el departamento de contabilidad o marketing. (Y solo si no se puede expresar en vlookups elegantes ...)
Degradación de la base de datos
Los datos no cambian mucho si están bien organizados. La lógica empresarial cambia muy rápido. Al poner la lógica de negocios en la base de datos, hace que la base de datos sea menos valiosa, ya que se volverá obsoleta e inexacta antes.
Resumen
Los datos deben sobrevivir a la aplicación porque los procesos comerciales viven en la aplicación y los procesos comerciales cambian con mucha más frecuencia. Incluir la lógica de negocios en la base de datos es malo por su longevidad y valor general.
Consideración
He hecho mi parte de dba-ing y he leído las respuestas en dba.se pero, con toda honestidad, de lo que están hablando es de problemas de integridad de datos y problemas de rendimiento. Estoy completamente de acuerdo en que las personas que tocan datos corporativos deben saber lo que están haciendo, ya sea dba o programador o analista senior de SAS con acceso de lectura / escritura.
También noté que recomiendan que los codificadores conozcan SQL. Estoy de acuerdo. Es un lenguaje de programación de computadoras, así que no veo por qué los programadores de computadoras no quieren saberlo.
Más tarde, después de pensarlo
Creo que el término medio es hacer una API, y hacer que esa API administre el flujo de datos de un lado a otro. Si no puede permitir que las aplicaciones se conecten directamente a las tablas, al menos puede hacer que el mecanismo de acceso esté en los idiomas modernos.