*2004年左右写的资料,在这里留个底!
ODBC与BDE是两种不同的数据库引擎!前者为MicroSoft集成到Windows中,后者为Borland公司随同其开发工具(Delphi,Cbuilder,Kylix)安装的。ODBC其意义为开放式数据链路(大致如此),BDE为Borland Database Engine的缩写,意为Borland数据库引擎。BDE相对ODBC而言没有任何优势,且已成为落日黄花,其已停止升级。而ODBC也并非就此一统天下,随着各种不同开发工具的出现,为了大家间可以通过一种标准协议而访问不同的数据库,先后出现了DAO,OLE
DB,ADO等.其前还有MicroSoft专为VB设计的MS JET,最新的为适应网络传送及更大范围内的兼容而开发出的XML(确切的讲它应当是一种标签代码).总之不同数据库引擎都是为了让应用程序以统一的形式访问数据库,而无论数据库的组织形式如何.
ADO的应用相对于其它DE而言是较为广泛的,其为MicroSoft开发的,存在于Windows系统中(较早系统需安装Ado Pack Pack为Package缩写,即为补丁).Delphi自5.0开发支持ADO,ADO在效率上高于ODBC及BDE,且更为稳定,其主要基于OLE(Object Linked-Emmbed! 对象的链接与嵌入 在Word中插入Excel表并视同在Excel中编辑就是这一技术的典型应用.此后逐渐发展为DCOM及COM+的分布式应用).
ADO在Delphi的使用主要集中于几个ADO控件.在Delphi控件面板上有一ADO项,其下主要包括ADOConnection,ADODataSet,ADOQuery,ADOTable,ADOStoreProcedure,ADOCommand等控件,如果去除前面的ADO一词,同Data Access中的控件是相似的.其实Borland在引入ADO时就已考虑如何让使用DataBase,Query等BDE控件的程序员快速掌握ADO开发(而不是原始ADO,Delphi中的ADO是经过封装的ADO,当然在效率上是有一定的损耗的,相对易用性还是值得的).在几个控件中ADOCommand是效率最高的一个!
在ADO中主要是ADOConnection取代了DataBase的功能,而其中也包括了ODBC及OLDEB等..在窗体上放置一ADOConnection并双击之,在下图中:
点击Build.Show出如下窗体:
其中各项不必都要理解.如果使用SQL Server可以直接使用图中所选一项.
选定Server名,设定用户及密码,选择使用的数据库就可以完成设定了.
ADO也可以访问ODBC的.注意一点ADO与ODBC的基理并不相同,两者在底层实现是有天壤之别的.ADO对大数据流的支持是极佳的.
在数据库程序设计时,尽量减少同Server通讯时间,特别是取数据及写数据的时间,最好使用一批一批提交的方式,而非一笔一笔的提交.这一点可以使用Datase.Post,及ADOConnection.BeginTrans及ADOConnection.CommitTrans实现.在Query设定CachedUpdates属性设为True.
ADO的用性较Data Access中控件还有许多的特殊之处,但要完成的操作是相同,只是实现方式不同.如果单纯在程序员的角度上考虑就不需要了解系统如何完成的操作,只要理清我们要完成什么操作.
数据库操作主要是一.控制类的 建表建库,删表删库,修改表体中栏位信息(包括删除,修改及插入). 二.操作类的 取(写)记录,修改,删除及插入记录.查找,条件查询类(就是一般的语句加一个Where),简单的数据运算(汇总Sum,求均Avg等)没了,调用存储过程(就跟写一条查询语句一样,并且还要简单). 在前端就是这些了.余下就是将数据库好好包装一下,加入View,Trigger(触发器),StoreProcedure之类的控件.写一个存储过程的功能就要考量Cursor(游标)的应用.我们在编写数据库程序时常常会有一个效率的问题,如何让数据处理更为快速.(如何稳定是算法设计上的问题)在这一点上,很多人都忽略了数据库本身强大的数据处理功能,如果有一种应用程式可以将数据处理的功能做的很好,那它就可以是一种数据库服务器.无论SQL
Server还是Oracle都集成了强大的数据处理功能.甚至是各种API可供程序员自行编写低阶的代码,以提高服务器的应用.所以我们有理由相信数据库已经为我们设计了整套的解决方案,我们完全可以将更多的工作交给数据库完成.
我来介绍几个典型应用,A公司的人考以前处理考勤及薪资有时处理一天以上,可能都没有结果,而另一家B公司却可快速的处理,三千多人的薪资资料不到5分钟就可以完成,其中就是前者使用前端计算,一笔笔提交,后者采用存储过程计算.以三千人而言,前者的流程是取出资料,计算这个人本月资料,然后写入数据库.不计计算时间(计算时还要取数据),就要和数据库通讯至少至少3000*2次,而后者只是调用存储过程,加入一些参数,将由此组成的语句传给数据库就好,通讯次数一次.一般系统的限制点都在I/O上,而仅此就有6000倍的差距.
原因就在于对数据库的应用上.
在A写数据库程式时,总有一点,我们需要在提交时(Query的BeforePost事件中)对一些相关数据做处理.比如提交一个人的请假单时,我们要同时将统计人数加一.我们要一个人做离职处理时,也即删除这人记录时,需要同时删除这个人的其他相关资料(比如出勤,保险等).另一类可能较多出现,就是某人的工号或卡号更改了,如果表体组织的不好就要在多个表中做改号的工作.类似这样的操作我们都可以使用Trigger完成,从而省去了在前端先判断,再处理过程,首先省去了大量的可能也是重复的处理动作,也同时降低了I/O成本.
另一应用是有关开表的.表体的组织越符合范式越好.这一点我十分认同.一般我们做到二级范式2NR就可以了,可以省去不少麻烦,不至于时常在两表间处理,也兼顾了效率.上面所提人员改号一事都是这一点的正面例证.我们需要将表体组织的简洁高效,就要争取符合较高级的范式.但并没人限制我们表体数目,数据的存储只要不是冗余,就符合要求.同样假设存在这样一个需求(可能较少出现),我们在经常需要查询一些人数或汇总之类的统计资料,如何单开一表,并加入合适的Triger处理以保证数据的有效性,如此这般,我们便不用周而复始的做汇总统计.这只一方面,在许多情况数据库的有效组织将为程序的开发大开方便之门,并能有效提高系统的健壮性,稳定性及高效的要求,减少前端处理操作,真正实现瘦客户端的要求(Thin-Client).虽然计算的运算速度不断提高,但其要处理的数据也将越来越多.
所以,在软件公司中应设立数据库专职程序员,以致力数据库的优化.
另外我简要提一下开发文档.开发文档作为系统开发过程记录,是日后系统升级及技术支持的重要资料.所以一定做好开发记录,比如年月日,完成(修正)了什么功能,什么方式,代码所在单元.写代码时要尽量加入充足的注释,按CMMI2的要求不应少于1/4,其实这也没有必要,只要充足,可以表时下面代码的意义就可以了.
最后我再提一下PSP及TSP.软件开发作为一种产业,正渐变为一种流水线式的生产,大项目的导入,流程监管都有详细的规范.这其中最基本的就是PSP及TSP.PSP Personal Software Plan(也有另一种提法),它是指个人软件计划.是软体工程师自身提高的一环,它主要是一种表格,表明你的工作排程.如什么时候完成什么工作,分为几个步骤,各步骤实现目标及预计时间.当完成各步骤时填入实际完成时间.
TSP Team Software Plan.小组软件计划. 小组协作是一个项目成功的关键.一个开发小组涉及的人员都要有良好的协作精神.这一点如果体现在工作是就是多沟通,多交流.(在规模稍大一点的公司,这一含义就更为严苛了,或者说是一种制度).
以上都是一些概念性的东西.心里有底就好.
后面所提文档及TSP,PSP都是软件工程的一部分.软件工程是门重要的学问,非常有必要研究应用.