De hecho, existen múltiples sistemas que unifican la base de datos y el lenguaje de programación en un solo entorno.
Smalltalk es probablemente el más cercano a lo que usted describe. Los objetos en la memoria se conservan en una "imagen", por lo que el entorno del lenguaje se puede utilizar una base de datos (objeto) de fábrica. Y la mayoría del lenguaje moderno tiene algún tipo de mecanismo de persistencia incorporado, lo que significa que los objetos en el entorno del lenguaje pueden persistirse y consultarse utilizando el lenguaje mismo.
Esto es muy conveniente para aplicaciones de un solo usuario. Pero el enfoque no escalará a múltiples usuarios, ya que necesitarán compartir el mismo espacio de memoria, lo que obviamente pone un límite a la cantidad de usuarios. Una solución escalable requiere un servidor de base de datos separado que gestione la concurrencia. Incluso entonces, hay múltiples bases de datos NoSql que se integran con un entorno de lenguaje específico y le permiten persistir y consultar objetos en el lenguaje mismo.
Desde el lado relacional de las cosas, tenemos lenguajes como T-SQL, que es un lenguaje de programación completo que es un superconjunto de SQL, por lo que las consultas y DML se pueden mezclar con lógica de procedimiento compleja arbitraria. Se han creado aplicaciones comerciales complejas utilizando T-SQL, por lo que esto es factible, pero la tendencia actual es la lógica empresarial de procedimiento fuera de la base de datos.
En estos casos, es muy elegante y conveniente tener la base de datos integrada con el lenguaje de programación y evitar el "desajuste de impedancia". Entonces, ¿por qué las personas todavía usan bases de datos relacionales separadas del entorno de programación e intentan conectarse con algún ORM-kludge?
Resulta que hay una serie de ventajas de tener datos y consultas separados de cualquier lenguaje y entorno de programación específico.
- Independencia de datos. En la mayoría de las organizaciones, múltiples aplicaciones acceden a los datos. Una tienda puede tener una base de datos utilizada por la interfaz web, por una herramienta de atención al cliente, un motor de informes, etc. Los datos en sí mismos suelen ser de larga duración, mientras que las aplicaciones van y vienen. El acoplamiento de los datos a un entorno de programación específico sería un bloqueo a un entorno de programación específico. Pero los lenguajes de programación van y vienen, mientras que los datos viven para siempre.
- Consulta ad hoc. Es extremadamente conveniente poder abrir una solicitud de base de datos y escribir una consulta. Si las consultas estuvieran estrechamente acopladas al entorno de programación, esta sería una tarea de programación y solo los desarrolladores podrían hacerlo.
- Evitar el bloqueo. Como SQL es un estándar, varios proveedores pueden proporcionar sistemas de administración de bases de datos que son más o menos intercambiables. Esto evita el bloqueo del proveedor y facilita la comparación de productos.
- Bajo acoplamiento. Tener una interfaz bien definida entre la capa de aplicación y la base de datos hace posible ajustar y optimizar la base de datos independientemente de la lógica de la aplicación.
- Interfaz compartida Dado que la interfaz de la base de datos es independiente de la lógica de la aplicación, se pueden utilizar herramientas estándar para la creación de perfiles, la replicación, el análisis, etc.