O SQL é basicamente uma instância específica de domínio do mapa + dobra + filtro?
Parece-me que o seguinte SQL:
SELECT name
FROM fruits
WHERE calories < 100
é apenas açúcar sintático para a seguinte operação de mapa + filtro + dobra:
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; });
Isso é coincidência ou existe uma equivalência semântica sólida que possa ser comprovada? Como, aproximadamente?
Eu sei que, na prática, o SQL tem muitos sinos e assobios, mas em sua essência é simplesmente uma operação de filtro de dobra de mapa?
O seguinte artigo é 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
fonte
fonte
Respostas:
Dê uma olhada no LINQ , que pega os conceitos básicos por trás do SQL e o generaliza para a programação orientada a objetos. O
Where
operador é um filtro padrão do pântano, oSelect
operador é uma projeção / mapa e assim por diante. Todas as operações básicas de consulta SQL são representadas no LINQ, implementadas usando funções de ordem superior; portanto, você está correto no seu entendimento intuitivo do SQL.A grande diferença entre o exemplo que você tem e a maneira como um banco de dados relacional funciona é que o SQL é projetado com um conjunto muito limitado de comandos em mente. Não está completo em Turing e os projetistas de banco de dados sabem o que pode e o que não pode fazer, o que facilita muito o design do sistema para otimizar as consultas em um grau muito maior do que seria possível com uma simples
Map
enumeração de um conjunto de dados. elemento por elemento.fonte
O SQL é baseado em Álgebra relacional e Cálculo relacional de tupla, não em funções de ordem superior ou em programação funcional. Enquanto SELECT, FROM e WHERE têm funções análogas em outros idiomas, o próprio SQL não suporta funções generalizadas de ordem superior, mas apenas as funções de "ordem superior" que a própria linguagem define.
Como o SQL não permite que você escreva suas próprias funções personalizadas de ordem superior, não se pode dizer com nenhuma autoridade que a linguagem suporta funções de ordem superior.
fonte