Büyük veri perspektifinden geliyor. Temel olarak, birçok çerçeve (Apache Spark gibi), Functor / Monad benzeri arayüzler sağlayarak ilişkisel işlemlerin eksikliğini "telafi eder" ve kedilerden SQL dönüşümlerine (Slick in Scala) benzer bir hareket vardır. Örneğin, Kategori Teorisinin uygulamalarında zip + map(multiply)
(Spark'ın MLib'i zaten var ElementwiseProduct
) olarak düşünülebilen, SQL perspektifinden vektörlerin element bazında çarpımı için doğal birleşmeye (indekslerde tekrarlama olmadığı varsayılırsa) ihtiyacımız var.
Basitçe söylemek gerekirse (aşağıdaki örnekler Scala'dadır):
atıfta bulunulan birleştirme alt kutusu, pratik functor (sıralı koleksiyon) olarak düşünülebilir ve bu da bize şunu verir
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)
. Dahası, bazı önişlemleri varsayarak (groupBy
operatör veya sadece sureksiyon veya genel olarak - bir epimorfizm) varsayalım.diğer birleşimler ve seçimler monad olarak düşünülebilir. Örneğin
WHERE
, sadece:List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)
->List(1,2,2,4).filter(_ < 3)
verilerin kendisi sadece ADT'dir (GADT de mi?), bu da basit bir Set kategorisine benziyor (veya daha genel olarak konuşursak - Kartezyen kapalı), bu yüzden Set tabanlı işlemleri (Curry- Howard-Lambek'in kendisi) ve aynı zamanda
RENAME
(en azından uygulamada) gibi operasyonlar .toplama karşılık
fold/reduce
(katamorfizma)
Yani, sorduğum şey, kategori teorisi ile (bütün) ilişkisel cebir arasında bir izomorfizm kurabilir miyiz? Çalışırsa, kategorilerin tam olarak hangi "altkümesi" relalgebra ile izomorfiktir?
Mantık-kediler-lambda için Curry-Howard-Lambek yazışmaları gibi resmi çözümler daha kesinken , kendi varsayımlarımın oldukça geniş olduğunu görebilirsiniz - bu yüzden, aslında, başarılı bir çalışmaya (doğrudan bir ilişki gösteren) referans istiyorum ) daha fazla örnekle Scala / Haskell.
Düzenleme : kabul edilen cevap beni bir monad (özellikle FALSE etkili bir şekilde başlatan boş bir değer kullanarak) birleştirme ve koşulları temsil çok ileri gitti düşündüm, geri çekilmeleri en azından SQL relalgebra alt kümesi için yeterli olduğunu düşünüyorum. Monadlar, Relalgebra'nın bir parçası olmayan GROUP BY gibi daha üst düzey (yuvalama) şeyler için daha iyidir.