Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->Linux程序设计 ->正文

锋线上的冲杀——论Linux数据库大比拚

来源: 作者: 时间:2007-04-11 点击: [收藏] [投稿]

几乎所有的约束都不见了,并且NUMERIC和CHARACTER VARYING分别由MONEY和TEXT代替。

在mSQL的监视程序中有令人沮丧的不足:它似乎不能接受从标准输入输入SQL脚本,这样, 需要剪切/粘贴代码。mSQL也讨厌分号;最终我只能一个一个地输入命令并用\g(“go”斜杠命令)终止每条命令 。

实现测试客户

为了比较3个数据库管理器,我决定为执行在bookstore数据库上的交易的目的用C写了一个测试客户。结果,我实现了一些操作,它们能比较API。为了性能比较,我随后充分实现了它们,并且把一个非交互式模式加入客户程序,因此它能自己运行,产生随意的数据且随机执行交易。

我决定了在样品数据库上实现下列行动:

增加一本新书: INSERT INTO BOOK (...) VALUES (...); 
删除一本存在的书: DELETE FROM BOOK WHERE ARTICLE_NO=...; 
增加一个顾客: INSERT INTO CUSTOMER (...) VALUES (...); 
删除一个顾客: DELETE FROM CUSTOMER WHERE CUSTOMER_NO=...; 
订书的一个顾客: INSERT INTO BOOKORDER (...) VALUES (...); 
INSERT INTO ORDER_POSITION (...) VALUES (...);; 
评估一本书的一个顾客: INSERT INTO RATING (...) VALUES (...); 
改变一份订单的状态: UPDATE BOOKORDER SET STATUS=... WHERE ORDER_NO=...;
 

然后,能生成下列报表:

书籍列表: SELECT * FROM BOOK; 
顾客列表: SELECT * FROM CUSTOMER; 
正在投递的交货表,按状态排序: SELECT * FROM BOOKORDER ORDER BY STATUS; 
书籍的利润额,最后有平均值: SELECT RETAIL_PRICE-WHOLESALE_PRICE FROM BOOK; 
SELECT AVG(RETAIL_PRICE-WHOLESALE_PRICE) FROM BOOK; 
书评、评级和为一本书的平均评级: SELECT * FROM RATING WHERE ARTICLE_NO=...; 
SELECT AVG(SCORE) FROM RATING WHERE ARTICLE_NO=...;

把客户带入PostgreSQL的生活

关于用C编程PostgreSQL的好处是你能使用嵌入式SQL。(而且,至少我喜欢它)它不是很好地文档化,但是ESQL预处理器ecpg运行并能产生PostgreSQL接口代码就好。Sql 的定式思维方法有时妨碍了我;但是,开发客户程序并不是很难的。

我说过“不是很好地文档化”吗?那是一个保守说法。否则PostgreSQL完整的HTML 文档在这方面非常缺乏。我从书本得到的ESQL知识是初级的,而且联机文档没帮助太多,因此我不得不自己了解怎么样由ecpg把C的变量强制转换为NUMERIC值--还有其他东西,而且,ESQL预处理器不是很详细,且无论何时它碰到任何小错误,总是似乎完全释放出来,这对任何从事又长期准备的项目的人来说把是一个持久战。



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:Linux入门普及读物 解读Linux编程库   下一篇:Linux系统套接字编程中存在的五个隐患

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号