Es kommt aus der Big-Data-Perspektive. Grundsätzlich "kompensieren" viele Frameworks (wie Apache Spark) den Mangel an relationalen Operationen, indem sie Functor / Monad-ähnliche Schnittstellen bereitstellen, und es gibt eine ähnliche Tendenz zu Cat-to-SQL-Konvertierungen (Slick in Scala). Zum Beispiel benötigen wir für die elementweise Multiplikation von Vektoren aus der SQL-Perspektive eine natürliche Verknüpfung (vorausgesetzt, es werden keine Wiederholungen für Indizes angenommen), die in den Anwendungen der Kategorietheorie als zip + map(multiply)
(in der MLib von Spark jedoch bereits ElementwiseProduct
) betrachtet werden kann .
Einfach gesagt (folgende Beispiele sind in Scala):
Der referenzierte Unterfall von join kann als anwendungsbezogener Funktor (über sortierte Sammlung) betrachtet werden, der wiederum Folgendes ergibt
zip
:List(1,2,3).ap(List(2,4,8).map(a => (b: Int) => a * b))
->(List(1,2,3) zip List(2,4,8)).map(x => x._1 * x._2)
. Darüber hinaus können wir es zu einigen anderen Verknüpfungen veranlassen, wobei eine gewisse Vorverarbeitung vorausgesetzt wird (groupBy
Operator oder nur Surjektion oder allgemein - ein Epimorphismus).Andere Verknüpfungen und Auswahlen können als Monade betrachtet werden. Zum Beispiel
WHERE
ist nur:List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)
->List(1,2,2,4).filter(_ < 3)
Daten selbst sind nur ADT (GADT auch?), was wiederum wie eine einfache Set-Kategorie (oder allgemeiner gesagt - kartesisch geschlossen) aussieht, also sollte es (ich nehme an) set-basierte Operationen abdecken (aufgrund von Curry- Howard-Lambek selbst) und auch Operationen wie
RENAME
(zumindest in der Praxis).Aggregation entspricht
fold/reduce
(Katamorphismus)
Also, was ich frage ist, können wir einen Isomorphismus zwischen (vielleicht einer Teilmenge von) Kategorietheorie und (der ganzen) relationalen Algebra aufbauen oder gibt es etwas, das aufgedeckt ist? Wenn es funktioniert, welche exakte "Teilmenge" von Kategorien ist isomorph zur Relalgebra?
Sie können sehen, dass meine eigenen Annahmen ziemlich weit gefasst sind, während formale Lösungen wie die Curry-Howard-Lambek-Korrespondenz für Logik-Katzen-Lambda präziser sind - also bitte ich tatsächlich um einen Verweis auf eine durchgeführte Studie (die einen direkten Zusammenhang zeigt) ) mit weiteren Beispielen in Scala / Haskell.
Bearbeiten : Die akzeptierte Antwort ließ mich denken, dass ich zu weit gegangen bin, um Verknüpfungen und Bedingungen als Monade darzustellen (insbesondere unter Verwendung eines leeren Werts, der effektiv FALSE instanziiert). Ich denke, Pullbacks sollten zumindest für die relalgebra-Teilmenge von SQL ausreichen. Monaden sind besser für höherwertige (verschachtelte) Dinge wie GROUP BY, die nicht Teil der Relalgebra sind.