关系代数/演算与范畴论之间是否存在关系?


17

我知道了解关系数据库的至少两种不同的理论方法:Codd的关系代数/演算和范畴论。

这两种方法之间有什么关系?它们在某种意义上是等效的吗?是否有介绍性工作解释这两个框架如何解释关系数据库?

背景: 前一阵子,我读过戴维·斯皮瓦克(David Spivak)的“科学家分类理论”,其中花了很多时间讨论如何将分类理论应用于理解关系数据库的理论。但是,对于什么是关系数据库或为什么有用,我几乎没有个人经验,当时我还没有完全理解本书中发现的深刻见解。

但是,最近我一直在学习SQL查询和两个用于数据处理的R包:dplyrdata.table。SQL显然可以表达Codd的关系代数/演算/模型的大部分思想,但不是全部。此外,dplyr的作者Hadley Wickham 明确表示,他的软件包基础的哲学是基于Codd在关系代数上的工作,并且data.table的基本命令与SQL和dplyr中的命令映射得相当好。

我也知道类别理论会影响使用Haskell之类的函数式编程语言的许多程序员。但是,除了Hadley Wickham 针对R 的purrr软件包,Apache SparkScala编写的事实以及与MapReduce相关的技术外,我还没有真正意识到功能编程可用于数据处理或数据科学。

所有这些都向我暗示类别理论和Codd的关系代数/演算之间应该存在某种联系,但是我从未听说过有人明确指出这种联系或解释其如何构成流行数据处理中的设计决策。和关系数据库技术。所以我也怀疑我可能完全错了。

编辑:显然,大卫·斯皮瓦克(David Spivak)致力于“ 函子查询语言(FQL) ”。如果存在,这听起来可能是这种理论联系的一种应用。

注意:我不确定“关系结构”是否适合讨论关系数据库或关系代数/演算。这篇Wikipedia文章建议它们可能是连接的,但最终我不知道“关系结构”是什么意思。请随时重新标记。


2
您是否看过Tannen和Buneman的著作,例如“查询语言设计的结构化方法”
reinierpost

@reinierpost我还没有,但是我会看看。
Chill2Macht

Answers:


12

分类查询语言的方法有点利基,但我认为这是一个非常有趣的利基!

这方面的两个关键人物是彼得· 布尼曼(Peter Buneman)托斯滕·格鲁斯特Torsten Grust)。显然,他们并没有完成所有工作,但是,如果您从他们的论文开始并找出引文图,您将获得对该领域的相当不错的报道。

他们工作的主要观察结果是,由于可以将关系视为一组元组,因此幂集函子可以解释为将元组类型视为该元组上的关系类型。然后,powerset函子形成一个monad的事实意味着您可以使用Philip Wadler的monad理解语法启发的思想,为具有丰富方程式理论的查询提供分类启发的演算。

确实,Buneman等人的查询系统Kleisli得名于一个事实,即单子有时被称为“ Kleisli三元组”。

Grust的博士学位论文“ 理解查询”详细阐明了这些想法,包括使用monad态射来建模聚合算子(如sumcount)。Grust和他的小组还建立了一个名为Ferry的系统,该系统研究了如何将数据库集成到编程语言中。

PX×PÿPX×ÿμPPXPX

这可能是有关查询语言的分类方法的主要工作流。

David Spivak的一个新想法(不幸的是,它并没有得到我认为应有的重视),他的工作是使用简单集合对数据库进行建模-请参见Simplicial Databases。中心创新是,简单结构允许显式地对包括表之间的关系的整个数据库模式进行建模(例如,外键系统),并且这可以为模式更新操作赋予语义。

与标准查询语言的另一种差异是受限逻辑编程语言,例如Datalog,可以将其理解为关系代数加上定点运算符。不动点允许表达诸如传递闭包查询之类的内容,因此也可以基于基于Datalog的Datomic功能查询语言之类的新数据库。我的博士生Michael Arntzenius和我研究了Datalog的语义,并提出了一个功能类似物,我们称为Datafun,它在坐姿和半格的类别方面有很好的分类解释。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.