- 论坛徽章:
- 0
|
我最近想写一个数据库的实现,当然,就我一个人,要达到工业标准是不可能的,只能编一个模型。我想分三步走。
1。实现关系代数,成果就是实现关系代数的一个函数库,实现嵌入式开发
2。sql解释/执行程序,相当于操作系统的shell
3。网络接口
现在,在进行1的时候我遇到了一个问题,就是实现这一层的功能,不能与sql等价。因为sql操作不仅仅是包含关系运算,还包括数据处理,比如
[update table1
set col1=co1+1
where col2>;0
要想用函数实现,我想到的只能这样:
已经实现了选择和投影关系运算select_project(表名,属性集,逻辑表达式)的情况下,还要编一个数据处理函数void inc_col1(),update函数的接口是这样的:
int update(void (* data_processor)(), 表名,属性集,逻辑表达式)
这样确实实现了功能,但是我觉得有几点不足:
1。复用度不高,无法被sql解释/执行程序有效复用,sql解释/执行程序几乎要重新独立编写。
2。我曾经认为,事务回滚可以用逆运算来实现,比如我举的上面那个例子,但是,大多数情况下,无法用逆运算实现,比如insert,delete就无法用逆运算实现。还有,即使理论上存在逆运算,也无法智能求得逆运算动作,只能由调用者给出(比如上面的例子,其逆运算是col1=co1-1),这还是逆运算比较简单的情况。
我想出现以上如此不合协现象的原因,第一是我可能走了歪路,第二是函数的表示能力比sql语句弱,函数可能相当于线性的确定有限自动机,而sql语句可能是上下文无关文法对应的处理机。(注意我这里说得函数不是指类似于处理sql语句串的函数)
这些想法是否正确?希望大家谈谈自己的看法。 |
|