程序设计:问一个涉及到数学原理的问题

发布于 2022-06-16 11:47:00 字数 888 浏览 329 评论 5

我最近想写一个数据库的实现,当然,就我一个人,要达到工业标准是不可能的,只能编一个模型。我想分三步走。
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语句串的函数)

这些想法是否正确?希望大家谈谈自己的看法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

三人与歌 2022-06-24 20:03:07

关于自动机的问题,全都不记得了。不过rollback的问题能看到的唯一解决方案就是使用日志。否则是不可能得到足够的信息以便回滚的。

星光不落少年眉 2022-06-24 20:02:41

Celetium兄不要生气,我的意思是说我提的问题跟oop关系不大,另外鄙人参见工作只有两年半,才疏学浅,还请Celetium兄以及各位同仁多多指教。

鹤仙姿 2022-06-24 17:49:14

我非常 不 同意你的意见!!!
按你这么说,那还可以说:如果一个软件汇编实现不了,那么C,C++,java也实现不了,如果一个软件机器语言实现不了,那么汇编,C,C++,JAVA也。。。这都是相当于废话,一个低级语言当然比高级语言涵盖的指令要广!oop不是一种技术手段,是一种思想!照你这么说实际能力就是掌握机器语言的能力!象你这样只考虑实现,不考虑重用、不考虑维护的实在不是什么高明之士!!!!

花开半夏魅人心 2022-06-23 21:23:29

感谢Celetium的回复!我昨天晚上才从老家回来,已经十几天没有上网了。
我有一个感觉,就是现在国内谈软件,管理层都谈cmm之类,技术人员则谈oop,而不注重实际能力的提高,我对oop的看法,引用周星驰的《国产007》上的一句台词,“其实,它也是一个风筒”。如果一个软件用c实现不了,那么用c++或是java也实现不了。
不知大家是否同意我的看法?

娇纵 2022-06-20 11:24:06

设计模式里好几个模式都挺合您用的,可以看看,然后试试!
不要用纯C来写了,虽然效率上比C++高10%左右

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文