我知道了解关系数据库的至少两种不同的理论方法:Codd的关系代数/演算和范畴论。
这两种方法之间有什么关系?它们在某种意义上是等效的吗?是否有介绍性工作解释这两个框架如何解释关系数据库?
背景: 前一阵子,我读过戴维·斯皮瓦克(David Spivak)的“科学家分类理论”,其中花了很多时间讨论如何将分类理论应用于理解关系数据库的理论。但是,对于什么是关系数据库或为什么有用,我几乎没有个人经验,当时我还没有完全理解本书中发现的深刻见解。
但是,最近我一直在学习SQL查询和两个用于数据处理的R包:dplyr和data.table。SQL显然可以表达Codd的关系代数/演算/模型的大部分思想,但不是全部。此外,dplyr的作者Hadley Wickham 明确表示,他的软件包基础的哲学是基于Codd在关系代数上的工作,并且data.table的基本命令与SQL和dplyr中的命令映射得相当好。
我也知道类别理论会影响使用Haskell之类的函数式编程语言的许多程序员。但是,除了Hadley Wickham 针对R 的purrr软件包,Apache Spark用Scala编写的事实以及与MapReduce相关的技术外,我还没有真正意识到功能编程可用于数据处理或数据科学。
所有这些都向我暗示类别理论和Codd的关系代数/演算之间应该存在某种联系,但是我从未听说过有人明确指出这种联系或解释其如何构成流行数据处理中的设计决策。和关系数据库技术。所以我也怀疑我可能完全错了。
编辑:显然,大卫·斯皮瓦克(David Spivak)致力于“ 函子查询语言(FQL) ”。如果存在,这听起来可能是这种理论联系的一种应用。
注意:我不确定“关系结构”是否适合讨论关系数据库或关系代数/演算。这篇Wikipedia文章建议它们可能是连接的,但最终我不知道“关系结构”是什么意思。请随时重新标记。