Ist SQL im Grunde eine domänenspezifische Instanz von map + fold + filter?
Es scheint mir, dass die folgende SQL:
SELECT name
FROM fruits
WHERE calories < 100
ist nur syntaktischer Zucker für die folgende Map + Filter + Fold-Operation:
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; });
Ist das Zufall oder gibt es eine solide semantische Äquivalenz, die bewiesen werden kann? Wie ungefähr?
Ich weiß, dass SQL in der Praxis viele Schnickschnack hat, aber im Kern ist es einfach eine Map-Fold-Filter-Operation?
Der folgende Artikel ist relevant: 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
quelle
quelle
Antworten:
Schauen Sie sich LINQ an , das die Grundkonzepte von SQL auf die objektorientierte Programmierung verallgemeinert. Der
Where
Operator ist ein Moor-Standardfilter, derSelect
Operator ist eine Projektion / Karte und so weiter. Alle grundlegenden SQL-Abfrageoperationen werden in LINQ dargestellt und mithilfe von Funktionen höherer Ordnung implementiert. Ja, Sie haben also ein korrektes intuitives Verständnis von SQL.Der große Unterschied zwischen dem Beispiel, das Sie haben, und der Funktionsweise einer relationalen Datenbank besteht darin, dass SQL mit einem sehr begrenzten Satz von Befehlen entworfen wurde. Es ist nicht vollständig und die Datenbankdesigner wissen, was es kann und was nicht, was es für sie viel einfacher macht, das System so zu entwerfen, dass Abfragen in einem weitaus größeren Maße optimiert werden, als dies mit einer einfachen
Map
Aufzählung eines Datensatzes möglich wäre Element für Element.quelle
SQL basiert auf relationaler Algebra und relationaler Tupelrechnung, nicht auf Funktionen höherer Ordnung oder funktionaler Programmierung. Während SELECT, FROM und WHERE analoge Funktionen in anderen Sprachen haben, unterstützt SQL selbst keine verallgemeinerten Funktionen höherer Ordnung, sondern nur die Funktionen "höherer Ordnung", die die Sprache selbst definiert.
Da Sie in SQL keine eigenen benutzerdefinierten Funktionen höherer Ordnung schreiben können, kann mit keiner Autorität gesagt werden, dass die Sprache Funktionen höherer Ordnung unterstützt.
quelle