4

我一直在研究正确的关系代数,来自 Christopher Date 的书Database in Depth: Relational Theory for Practitioners。在整本书中,他使用了他和 Hugh Darwen 提出的语言来传达理论——教程D。总的来说,我认为 Tutorial D 是一种非常实用的查询语言,比 SQL 灵活得多,所以我(只是为了好玩)热衷于尝试基于 Tutorial D 编写一个(性能很差,毫无疑问)小 RDBMS,而不是SQL。

意识到这是一项艰巨的任务,即使只是为了做一些基本的事情,我想知道是否有现有的存储系统不代表 SQL 意义上的表,而是表示关系意义上的关系,并且不假设任何特定的查询语言用于访问数据,而只是提供低级函数,如、 、 、productjoinintersect在C 级别,而不是在查询语言级别)。unionproject

我说得有道理吗?:) 基本上我想采用类似的方法并在其前面粘贴一个 Tutorial D(或类似的)查询界面。

在内存中做所有事情真的很容易,但是以一种甚至是中等效率的方式表示磁盘上的数据结构是相当棘手的,并且可能在我没有认真研究的情况下超出我的头脑。

4

3 回答 3

4

通用的基于 SQL 的 RDBMS 使用 SQL 作为用户和数据库引擎之间结构化输入的接口,使用所谓的查询优化器,它接受查询表达式并生成一组执行计划

然后在数据库上执行最优的执行计划;这就是生成结果集的原因。

因此,如果您采用开源 RDBMS 实现并希望对其进行修改以接受不同的查询语言,您要做的就是将您选择的查询语言转换为执行计划。

这并不是说您尝试做的事情很容易。只是它应该是可能的,而不必编写自己的 RDBMS。您需要为您的查询语言编写一个词法分析器和解释器,然后弄清楚如何将解释的查询表达式传输到数据库引擎的优化器,以便它可以生成执行计划,并执行其中最有效的计划。

看看SQLite作为一个紧凑的开源关系数据库引擎。

于 2011-11-02T15:31:51.783 回答
3

Dave Voorhis 的 Rel 已经完成了您似乎想要构建的工作。

http://dbappbuilder.sourceforge.net/Rel.php

当然,除非您的明确目的是尝试为自己构建......

于 2011-11-02T15:41:59.110 回答
0

请注意,教程 D 的前端不会与查询语言无关;)

我的投票也投给了 Rel。

Hugh Darwen 维护着一个与 TTM 相关的项目列表(D 语言规范,Tutorial D 是一种实现),我相信如果他们有任何成果,他很想听听你的努力。

于 2011-11-02T16:15:50.350 回答