Це відбувається з точки зору великих даних. В основному, багато фреймворків (наприклад, Apache Spark) "компенсують" відсутність реляційних операцій, забезпечуючи інтерфейси, подібні до Functor / Monad, і відбувається подібний рух до перетворень котів у SQL (Slick in Scala). Наприклад, нам потрібне природне з'єднання (якщо не бути повторів на індексах) для zip + map(multiply)
стильовогоElementwiseProduct
множення векторів з точки зору SQL, яке можна вважати (але MLib Spark вже має ) у додатках Theory Theory.
Простіше кажучи (наступні приклади є у Scala):
Посилання на підряд приєднання може розглядатися як прикладний функтор (над відсортованою колекцією), що, у свою чергу, дає нам
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)
. Більше того, ми можемо спонукати це до деяких інших приєднань, припускаючи деяку попередню обробку (groupBy
оператор або просто викид, або взагалі - епіморфізм).інші приєднання та відбір можна розглядати як монаду. Наприклад,
WHERE
просто:List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)
->List(1,2,2,4).filter(_ < 3)
Дані самі по собі є лише ADT (також GADT?), що, у свою чергу, схоже на просту категорію Set (або, взагалі кажучи, закриту декартом), тому вона повинна (я вважаю) охоплювати операції на основі набору (завдяки Curry- Сам Говард-Ламбек), а також такі операції, як
RENAME
(принаймні, на практиці).агрегація відповідає
fold/reduce
(катаморфізм)
Отже, що я запитую, чи можна побудувати ізоморфізм між (можливо, підмножиною) теорії категорій та (цілою) реляційною алгеброю чи щось не розкрито? Якщо це працює, яке саме «підмножина» категорій є ізоморфним відносному рефлегебрі?
Ви бачите, що мої власні припущення є досить широкими, тоді як формальні рішення, такі як листування Керрі-Говарда-Ламбека для логіки-котів-лямбда, є більш точними - тому насправді я прошу посилання на виконане дослідження (яке показує прямий зв’язок ) з більшою кількістю прикладів у Scala / Haskell.
Редагувати : прийнята відповідь змусила мене думати, що я зайшов занадто далеко, представляючи приєднання та умови як монада (особливо, використовуючи порожнє значення, яке фактично створює FALSE), я вважаю, що відсилок повинно вистачити хоча б для підмножини релегебри SQL. Монади краще для вищого порядку (гніздування), таких як GROUP BY, яка не входить до релагебри.