No he realizado el mapeo funcional-relacional, per se, pero he utilizado técnicas de programación funcional para acelerar el acceso a un RDBMS.
Es bastante común que comenzar con un conjunto de datos, hacer algún cálculo complejo en él, y almacenar los resultados, donde los resultados son un subconjunto del original con valores adicionales, por ejemplo. El enfoque imperativo dicta que usted almacena su conjunto de datos inicial con columnas NULL adicionales, haga su cálculo y luego actualice los registros con los valores calculados.
parece razonable. Pero el problema con eso es que puede ser muy lento.Si su cálculo requiere otra instrucción SQL además de la consulta de actualización en sí, o incluso debe hacerse en el código de la aplicación, literalmente tiene que (re) buscar los registros que está cambiando después del cálculo para almacenar los resultados en las filas correctas .
Puede evitar esto simplemente creando una nueva tabla para resultados. De esta manera, siempre puede insertar en lugar de actualizar. Usted termina teniendo otra mesa, duplicando las claves, pero ya no necesita desperdiciar espacio en las columnas que almacenan NULL –, solo almacena lo que tiene. Luego, une tus resultados en tu selección final.
I (ab) utilizaron un RDBMS de esta manera y terminó escribiendo sentencias SQL que se veía sobre todo como esto ...
create table temp_foo_1 as select ...;
create table temp_foo_2 as select ...;
...
create table foo_results as
select * from temp_foo_n inner join temp_foo_1 ... inner join temp_foo_2 ...;
Lo que esto está haciendo en esencia es la creación de un grupo de fijaciones inmutables. Lo bueno, sin embargo, es que puedes trabajar en conjuntos completos a la vez. Te recuerda algunos idiomas que te permiten trabajar con matrices, como Matlab.
Imagino que esto también permitiría el paralelismo mucho más fácil.
Una ventaja adicional es que los tipos de columnas para las tablas creadas de esta manera no tienen que especificarse porque se deducen de las columnas de las que se seleccionan.
En realidad, ¿esto realmente tiene sentido? La programación funcional no proporciona ninguna forma estándar de modelado de datos que pueda compararse en cierta medida con el modelado de datos relacionales o OO. Así que pedir un "mapeo" en mi humilde opinión no es una pregunta significativa. Uno podría preguntar si tendría sentido agregar conceptos funcionales a un SGBDR, de hecho, SQL ya tiene algunos conceptos funcionales. –