¿SQL es básicamente una instancia específica de dominio de map + fold + filter?
Me parece que el siguiente SQL:
SELECT name
FROM fruits
WHERE calories < 100
es solo azúcar sintáctico para la siguiente operación de mapa + filtro + plegado:
var fruits = [{id : 1, name: 'orange', calories : 100},
{id : 2, name : 'banana', calories : 150},
{id : 3, name: 'apple', calories : '50'}];
fruits.map(function(fruit) { return { name : fruit.name, calories : fruit.calories })
.filter(function(obj) { return obj.calories < 100 })
.reduce(function (accumulator, obj) { accumulator + "\n" + val.name; });
¿Es una coincidencia o hay una sólida equivalencia semántica que se puede probar? ¿Cómo, más o menos?
Sé que en la práctica, SQL tiene muchas campanas y silbatos, pero en el fondo ¿es simplemente una operación de filtro de plegado de mapa?
El siguiente artículo es relevante: http://blogs.msdn.com/b/doriancorompt/archive/2013/01/21/bringing-the-querying-power-of-sql-to-javascript.aspx
functional-programming
sql
dsl
Sridhar Sarnobat
fuente
fuente
Respuestas:
Eche un vistazo a LINQ , que toma los conceptos básicos detrás de SQL y lo generaliza a la programación orientada a objetos. El
Where
operador es un filtro estándar de pantano, elSelect
operador es una proyección / mapa, y así sucesivamente. Todas las operaciones básicas de consulta SQL están representadas en LINQ, implementadas usando funciones de orden superior, por lo que sí, tiene razón en su comprensión intuitiva de SQL.La gran diferencia entre el ejemplo que tiene y la forma en que funciona una base de datos relacional es que SQL está diseñado con un conjunto muy limitado de comandos en mente. No es completo para Turing y los diseñadores de bases de datos saben lo que pueden y no pueden hacer, lo que les facilita mucho diseñar el sistema para optimizar las consultas en un grado mucho mayor de lo que sería posible con una simple
Map
enumeración de un conjunto de datos. elemento por elemento.fuente
SQL se basa en álgebra relacional y cálculo relacional de tuplas, no en funciones de orden superior o programación funcional. Si bien SELECT, FROM y WHERE tienen funciones análogas en otros lenguajes, el propio SQL no admite funciones generalizadas de orden superior, sino solo aquellas funciones de "orden superior" que el propio lenguaje define.
Dado que SQL no le permite escribir sus propias funciones personalizadas de orden superior, no se puede decir con ninguna autoridad que el lenguaje admite funciones de orden superior.
fuente