มันมาจากมุมมองข้อมูลขนาดใหญ่ โดยทั่วไปเฟรมเวิร์กจำนวนมาก (เช่น Apache Spark) "ชดเชย" ขาดการดำเนินการเชิงสัมพันธ์ด้วยการจัดหาอินเทอร์เฟซเหมือน Functor / Monad และมีการเคลื่อนไหวที่คล้ายกันต่อการแปลง cat-to-SQL (Slick in Scala) ตัวอย่างเช่นเราต้องการการเข้าร่วมที่เป็นธรรมชาติ (สมมติว่าไม่มีการซ้ำซ้อนกับดัชนี) สำหรับการคูณเวกเตอร์องค์ประกอบที่ชาญฉลาดจากมุมมอง SQL ซึ่งอาจถือได้ว่าเป็นzip + map(multiply)
(Spark's MLib แต่มีอยู่แล้วElementwiseProduct
)ในแอปพลิเคชันของทฤษฎีหมวดหมู่
เพียงแค่พูด (ตัวอย่างต่อไปนี้อยู่ใน Scala):
subcase อ้างอิงของเข้าร่วมอาจจะคิดว่าเป็น functor applicative (คอลเลกชันเรียงมากกว่า) ซึ่งในทางกลับกันมันจะช่วยให้เรา
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-category แบบง่าย ๆ (หรือมากกว่านั้นคือ Cartesian-closed) ดังนั้นจึงควร (ฉันคิดว่า) ครอบคลุมการทำงานของ Set-based (เนื่องจาก Curry- Howard-Lambek ตัวเอง) และการดำเนินการเช่น
RENAME
(อย่างน้อยในทางปฏิบัติ)การรวมที่สอดคล้องกับ
fold/reduce
(catamorphism)
ดังนั้นสิ่งที่ฉันถามคือเราสามารถสร้างมอร์ฟิซึ่มส์ระหว่างทฤษฎีหมวดหมู่ (อาจเป็นส่วนย่อย) และพีชคณิตเชิงสัมพันธ์ (ทั้ง) หรือมีอะไรบางอย่างเปิดเผย หากใช้งานได้หมวด "เซตย่อย" ที่แน่นอนคือ isomorphic ไปยัง relalgebra?
คุณจะเห็นว่าข้อสันนิษฐานของฉันค่อนข้างกว้างในขณะที่วิธีแก้ปัญหาอย่างเป็นทางการเช่นการติดต่อกันของCurry-Howard-Lambek สำหรับตรรกะ -cat-lambdaนั้นแม่นยำมากขึ้น - จริง ๆ แล้วฉันขออ้างอิงการศึกษาที่สำเร็จ (ซึ่งแสดงความสัมพันธ์โดยตรง ) พร้อมตัวอย่างเพิ่มเติมใน Scala / Haskell
แก้ไข : คำตอบที่ได้รับการยอมรับทำให้ฉันคิดว่าฉันไปไกลเกินกว่าที่จะแสดงการรวมและเงื่อนไขในฐานะ monad (โดยเฉพาะการใช้ค่าว่างที่ทำให้อินสแตนซ์ของ FALSE มีประสิทธิภาพ) ฉันคิดว่า pullbacks Monads ดีกว่าสำหรับการสั่งซื้อ (การทำรัง) ที่สูงขึ้นเช่น GROUP BY ซึ่งไม่ได้เป็นส่วนหนึ่งของ relalgebra