时间:2023-02-11 22:33:56
引言:寻求写作上的突破?我们特意为您精选了12篇数据库技术论文范文,希望这些范文能够成为您写作时的参考,帮助您的文章更加丰富和深入。
1.1教学内容分析
学习《数据库技术》课程前学习者已经学习了《计算机技术基础》、《C语言》和《数据结构》等先行课程,“概念结构设计”教学内容安排上是在数据库基本概念、关系数据库、SQL语言和关系数据理论之后,“概念结构设计”部分包括概念结构设计的概念、方法与步骤、数据抽象和视图的集成。本部分内容的重点是概念结构设计的方法。难点是根据具体系统内容的描述设计基本E-R图。
1.2学习者动机分析
“概念结构设计”较抽象,学习者需要从复杂的实际应用中找出数据库设计中的关键因素,学习者尚不知该内容在整个数据库设计中的重要作用,鉴于此内容的难度较大,易使学习者知难而退,对学习者学习的积极性产生负面影响。
2动机策略设计及实施
2.1课程导入
2.1.1教学内容
将49名学习者分为5个小组,利用课前时间每组分别分析淘宝、京东、当当网、1号店、天猫的网上购物流程,并分组进行调查汇报。提出问题:你分析系统中的商品有哪些属性?订单包括哪些内容?订单与客户和商品之间的联系及涉及的实体有哪些?订单有哪些状态?知识回顾:实体、属性和联系的概念,选课E-R模型实例。
2.1.2动机策略应用
注意策略:通过问题引入,让学习者主动思考,引起学习者有意注意。相关策略:通过知识回顾,帮助学习者建立已有的E-R模型与概念结构模型设计之间的联系,建立脚手架从而降低新知识学习难度。自信策略:选取学习者们熟知的购物网站为例,增强学习者信心。
2.2课堂教学
2.2.1教学内容
基础任务:定义购物网站生成订单的事件,通过E-R模型进行概念结构设计。汇总各小组提交的设计结果,总结学习者的概念结构模型设计,如图1所示。来源:黑龙江省哲学社会科学研究规划项目(16EDE07)和哈尔滨师范大学深化教育教学综合改革项目(X2015-2-003)的研究成果。提高任务:上述模型中当客户提交订单但未购买商品将减少商品的库存,如何解决这一问题呢?请学习者思考并提出问题解决办法。教师提示可将多对多的联系拆分为两个一对多的联系,根据订单的状态通过程序确定是否实际减少库存。按照之前分配的小组安排学习者讨论并提出新的设计方案,学习者讨论是教师到各组进行引导和巡视[2]。讨论:经过学习者讨论,分析新概念模型设计的合理性。小组汇报并由教师汇总修改后如图2所示。
2.2.2动机策略
注意策略:教师播放课前录制的网上购物过程的动画,引起学习者注意。自信策略:教师按照基础和提高两类任务进行分层布置,利于搭建脚手架、激发学习者自主思考,增强自信。
3评价
学习者对各自小组设计的E-R模型进行评价,小组间进行设计结果互评,教师对每个模型的设计过程、小组合作情况和设计结果进行总结性评价。满意和自信策略:学习者经过深入思考进行互评,体验设计被认可和逐步求精带来的喜悦。教师的点评认可其设计结果提高学习者信心。
4结论
通过该方法的学习,学习者在练习和期末考试中能够熟练准确的对复杂的需求通过E-R模型进行概念结构设计,因此,ARCS模型应用于《数据库技术》教学有助于激发学习者学习动机,提高学习效果。
作者:韩玲玲 单位:哈尔滨师范大学
1我省水文数据库现状概述
水文资料是水利工程的基础,为了达到准确快速地提供水文资料,资料的科学存储是个关键问题。当前水文资料主要包括:降雨量、蒸发量、水位、流量、含沙量等内容。数据库是现今企业数据存储的主要方式,应用数据库技术来存储水文观测资料就形成了水文数据库。在水文数据库中数据以表的形式存储,这些表的名称、表中每列的名称、数据类型等称为表结构。
广东省水文数据库由1991年开始建设,到1998年建成验收,至今每年都加人新的整编数据。水文数据库的建立改变了水文资料以纸介质存储数据的方式,使资料的存储进人磁介质的时代,以电子版本的方式提供数据极大方便了数据的查询和使用,为水情专用数据库、三防指挥系统、流域水信息与管理等许多水利信息化项目提供了方便,在实际生产应用中发挥了重要作用。
水文数据库使用SQL SERVER 2000做数据库管理系统,表结构经历了由1. 0版本到3. 0版本的演变过程。3. 0版本是一个比较成熟的版本,历经十年的应用,在水文数据存储的标准化方面做出了重要贡献,但在长期的应用中3. 0版本也发现了一些不足之处,于是部水文局组织有关专家在3. 0的基础上修订形成了4. 0版本。从而使我省水文数据库从3, 0版本到4. 0版本的升级成为现实需要解决的问题。
2水文数据库表结构3. 0与4. 0的对比
水文数据库表结构3. 0主要存在的问题有:①时间维的处理不合理;②一些表表列数太多;③一些有用数据没有建表存储;④没有字典表。
表结构4. 0针对以上缺点做了改善,首先使用时间数据类型( DT类型)统一时间维的表示,如:逐日平均水位表3. 0表结构如表1;逐日平均水位表4. 0表结构如表2。
对比表1、表2可见日平均水位3. 0表结构有66列,而4. 0表结构只有4列,3. 0表结构的时间维中年份、月份、各日在列中表示,4. 0表结构中的时间维统一在一列中表示,这样极大方便了SQL语句的编写,而且时间集中到一列上表示有利于随后的数据分析工作。其次,一个表包含太多的列时,说明这个表缺乏内聚,它试图存放来自几类实体的数据,使用垂直分割将一些列移到另一个表中,可以减少表的规模,改善性能。如:表结构3. 0把月、旬、年的数据放在同一表中,导致一个表中有上百的表列,而4. 0把月、旬、年的数据分开到三个表中存放,改善了性能。再次表结构4. 0增加和修改了一些表,使得存储的内容得到扩充,存储更加合理高效。如增加了关系线表来存储水位流量关系,修改了实测大断面表等。最后表结构4. 0增加了字典表类,这样有利于元数据的描述和使用。
3表结构升级实现技术
3.1表结构升级转换需要解决的问题
表结构的升级可能会涉及很多问题,主要要解决的问题有:
1)新表的建立。新表的建立主要讨论新表结构的合理性,确保新表的设立是正确的。
2)数据质量控制,要控制从旧库到新库转移数据时出现的数据转换错误。新库中错误的数据可能来自于旧库中的错误,也可能来自于转换程序的错误或考虑不周。应该确保新库的数据质量比旧库有所提高。
3)功能恢复,主要是参照完整性、方法(存储过程、存储函数、触发器)、外部程序的恢复。水文数据库是多应用数据库,有许多外部程序对其进行访问,数据库升级人员对这些程序几乎是不能控制的,在这种情况下数据库的修改必然对外部访问系统造成影响,解决的方法有二:一是进行功能恢复,升级人员与应用程序开发者协作,修改应用程序使其能适应新的数据库表结构;二是设立过渡期,在这其间使新老数据库同时运行,原来的应用程序继续使用老库,新应用使用新库。通常会结合使用上述两种方法,即进行部分功能恢复同时设立过渡期。
4)数据加载策略,由于水文数据量较大,而且每年都有新增数据,所以数据加载要有增量加载功能。同时,在过渡期间如果数据的增、删、改比较频繁,应该保持新旧库内容的同步。
3. 2升级转换的过程
在生产环境中安全的数据库升级转换流程如图1:
验证数据库是否需要升级转换是综合考虑转化所获得的价值与投人之比,以确定是否需要这样的转换,是否开销过大。水文部门的数据源很多,如基础水文数据库、水情专用数据库等。升级人员要确定各种数据所放的位置才能引用。数据库的转换是一个重复的过程,每次形成一个新表都要经过建表、编写数据转换加载及同步代码、数据加载、结果测试这样一个过程,只有测试无误了才进人下一个新表的建立,这种采取每次一小步的办法容易降低实现程序的复杂性,容易发现转换错误所在。所有新表测试通过后才可以使用。
3. 3实现方法
首先对SL324-2005《基础水文数据库表结构及标识符标准》(即表结构4. 0 )进行分析以验证转化的必要性,由于存放测验数据的表类是常用的表类,而且测验数据格式比较固定,表结构比较完善,所以优先转换该类表,方法如下:
使用SQL SERVER企业管理器创建新表结构,如图2。
使用T一SQL语言编写数据转换与加载程序,如:使用语句(Insert into HY YRZ F select STCD, YR,YRAVZ,YRAVR,YRMXZ,YRMXR,YRMXMD,YRMNZ,YRMNR , YRMNMD from ZMYST where YR = 2007)就可以把表结构3. 0水位月年统计表中2007年的数据增量加载到4. 0的年水位表中。
如果转换过程中有类型转化、数据格式检测等质量控制要求,则需要用比较复杂的程序段来完成。如:降雨量摘录表的T一SQL转换程序如下:
声明变量@sled , @ yr , @ and , @ bghrmt , @ edhrmt ,
@p , @ prm存储查询数据
声明变量@ bgdt, @ eddt存储转换后的时间数据
创建游标my_ cursorl关联到降雨量摘录表prex
通过游标读一条记录到变童@sled , @ yr , @ and , @
bghrmt,@edhrmt,@P,@prm中
WHILE@@fetch status=0)
Begin
处理降雨量结束时间、
if@edhrmt=2400)
begin
处理降雨结束时间为24:00的情况
end
else
if@edhrmt
begin
处理摘录时段跨日的情况
end
else
摘录时段无跨日的情况
处理降雨量开始时间、
插人数据、
insert into hy_prex_ b values(@sled,@bgdt,@eddt,@P,@prm )
取下一条记录
end另外,可使用触发器保持旧表和新表的同步增删,这样当数据加人到旧表或从旧表中删除数据的时候就通过触发器在新表中作相应的修改,如:对3. 0中降雨量摘录表写插人触发器,插人相应记录的T一SQL程序如下:
Create trigger prex insert On PREX For insert as
同时写删除触发器,删除相应记录的T一SQL程序如下:
Create trigger prex delete On PREX For delete as
这样就维护了旧表到新表的同步更新。
3. 4成果
1.Oracle。Oracle是一个最早商品化的关系型数据库管理系统,也是应用广泛、功能强大的数据库管理系统。Oracle作为一个通用的数据库管理系统,不仅具有完整的数据管理功能,还是一个分布式数据库系统,支持各种分布式功能。Oracle使用PL/SQL语言执行各种操作,具有可开放性、可移植性、可伸缩性等功能。
2.Sybase。最新版本的SybaseAdaptiveServer与以前的版本相比,具有更丰富的功能设置,Sybase比较强大的地方在于它对资源的低占有率上。在这一方面,Sybase15还引入了新的“专利查询过程技术”,显示了增强的性能和降低的硬件资源消耗。
3.MicrosoftSQLServer。MicrosoftSQLServer是一种典型的关系型数据库管理系统,可以在许多操作系统上运行,它使用Transact-SQL语言完成数据操作。由于MicrosoftSQLServer是开放式的系统,其它系统可以与它进行完好的交互操作。
4.MicrosoftOffice。作为MicrosoftOffice组件之一的MicrosoftAccess是在Windows环境下非常流行的桌面型数据库管理系统。Access既拥有用户界面(VB可以用来开发用户界面);也拥有逻辑、流程处理,即VBA语言(VB也可以用来做逻辑处理);又可以存储数据,即在“表”中存储数据。使用MicrosoftAccess无需编写任何代码,只需通过直观的可视化操作就可以完成大部分数据管理任务。在MicrosoftAccess数据库中,包括许多组成数据库的基本要素。这些要素是存储信息的表、显示人机交互界面的窗体、有效检索数据的查询、信息输出载体的报表、提高应用效率的宏、功能强大的模块工具等。
5.VisualFoxPro。VisualFoxPro是Microsoft公司VisualStudio系列开发产品之一,简称VFP是Xbase数据库家族的成员,可以运行于Windows9X/2000和WindowsNT平台的32位的数据库开发系统。VisualFoxPro提供了一个功能强大的集成化开发环境,采用可视化和面向对象的程序设计方法,使数据管理和应用程序的开发更加简便。VisualFoxPro是数据库管理软件,可实现数据与应用程序独立。
二、如何选择适合自己的数据库软件
1.按性能应从以下几个方面予以考虑:
(1)构造数据库的难易程度;(2)程序开发的难易程度;(3)数据库管理系统的性能分析;(4)对分布式应用的支持;(5)并行处理能力;(6)可移植性和可扩展性;(7)数据完整性约束;(8)并发控制功能;(9)容错能力;(10)安全性控制;(11)支持汉字处理能力。
2.按需求来选择
选择一个数据库的主要理由就是它的功能是否可以很好地支持你的应用程序。人们通常使用数据库来完成的任务有:支持Web、事务处理、文本搜索,有的情况下复制也是一个重要的要求。在事务处理方面,Oracle看上去更有领先优势,接下来是微软的SQLServer。没有一个开源数据库具有可以与Oracle相媲美的事务处理功能。
3.按易用性和管理来选择;
4.按支持性来选择;
5.按成本因素来选择。
三、结论
Oracle是商业数据库的代表,具有非常丰富的功能、广泛的平台支持和大量的附加功能。目前Access更常用一些,Access不是一种存储格式,是一种软件。ACCESS这个软件本身就具有开发者使用的界面和适合于“最终用户”的界面。但学习FoxPro可为学型数据库管理软件大典基础。微软的SQLServer只可以运行在其Windows操作系统平台上。不过由于Windows操作系统的广泛普及,缺乏对其他系统的支持并没有阻挡SQLServer的市场份额的增长。SQLServer是真正的中大型数据库,VFP是桌面数据库,使用方便、易学,但实际上牺牲了真正数据库的一些功能,如安全性;此外,VFP既是数据库又是编程语言(开发工具)。SQLServer是中大型数据库,VFP是带有自身数据库的编程语言。
总体来说,选择什么样的数据库要看你的应用程序的需要。如果它是以阅读数据库为主的Web应用,MySQL无疑是最佳选择。而如果需要那些事务处理和复杂的数据库功能,那么可选择Oracle和微软的SQLServer。如果你需要一些商业数据库的高级功,但又不想支付授权费用,那么可以考虑PostgreSQL或Ingres。对于嵌入式数据库应用,MySQL和Sybase所占有的系统资源最少。总之,最适合的才是最好的!
参考文献:
[1]刘守根.数据库管理系统的现状和发展方向初探.内江科技,2006,(2).
[2]陈业斌.分布式数据库管理系统的设计与实现.安徽工业大学学报(自然科学版),2005,(3).
[3]姬志刚.计算机、网络与信息社会.科技咨询导报,2006,(20).
[4]薛向阳.数据库管理系统的开发与程序的设计.渭南师范学院学报,2005,(2)
2、概念结构设计
概念结构也称为概念模型,是对用户所提供的原始数据进行综合,抽象出数据库系统所要研究的数据,将现实世界中的事物及其联系,转换成信息世界中的实体及其联系。概念结构设计必须将需求分析得到的用户数据和需求抽象为反映用户观点的概念模型,是用户与数据库人员之间进行交流的工具,其主要表现形式为E-R模型图。图中矩形框表示实体集;菱形框表示实体集之间的联系。
3、逻辑结构设计
逻辑结构设计主要任务是综合考虑关系型DBMS的性能和所设计模拟系统的功能复杂程度,将概念结构转换为逻辑模式,即各个关系模式的结构设计,包括各关系模式的名称、每一关系模式中各属性的名称、数据类型和取值范围等内容。将E-R模型转换成初始的关系模型,然后分析每一个关系模式的合理性,通过关系模式的规范化消除其中不合理模式。E-R模型中的实体和联系经过规范化处理转换为关系模式如下:(1)学员(学号、姓名、担任角色、性别、企业代码),学员通过学号标识。(2)门店(门店编码、容积、最低购买价、最低租赁价、等级、信息化程度、企业代码、获取时间、获取方式、金额),门店通过门店编码标识。(3)模拟企业(企业代码、登录密码、名称、人数),模拟企业通过企业代码标识。(4)商品(商品代码、名称、采购价、容积需求、采购提前期),商品通过商品代码标识。(5)客户订单(订单编码、需求商品、数量、账期、企业代码、市场代码、签约时间、售价、其他要求),客户订单通过订单编码标识。(6)市场(市场代码、类别、开发时间、开发资金),市场通过市场代码标识。(7)现金流量表(编号、时间、收支类别、项目名称、金额),现金流量表通过编号标识。(8)市场开发(市场代码、企业代码、时间、金额),市场开发通过市场代码和企业代码组合标识。(9)采购(企业代码、商品代码、时间、数量),采购通过商品代码和企业代码组合标识。(10)配货(企业代码、商品代码、门店编码、时间、数量、定价),配货通过商品代码、门店编码和企业代码组合标识。
4、数据库实现
4.1建立存储过程由于使用的是关系型数据库,数据处理都是通过SQL语言完成的,其中有大量数据的插入、更新与删除,甚至还需要进行大量的运算,所以直接提交SQL语句并让DBMS进行编译再执行的话,处理的效率较低,而建立存储过程是一种有效解决手段。存储过程是一种存储在数据库服务器上的SQL操作[3],这样很多数据处理流程都在后台以存储过程的方式来实现,即有利于提高系统的运行效率,又可提高系统的可维护性和可扩展性。
4.2设计索引在模拟经营中各模拟企业经常性的要查询公共信息,而且这种查询的时间性非常明显,所以设计索引可以显而易见的优化系统性能,对所有用于时间排序的列创建索引,可以避免整表扫描或访问。在不改变表物理结构的情况下,直接访问特定的数据列以减少数据存取时间;把数据分散到不同的页面上,可以分散插入的数据;主键自动建立了唯一索引,能确保数据的唯一性。
2计算机数据库的恢复技术探析
2.1恢复技术的内涵
数据库的恢复技术,又称“修复技艺”,是指当计算机数据库系统存在故障而引起数据丢失等现象时再次对毁损、丢失的数据信息进行修复的操作技术。为降低由于操作不当等人为因素以及系统本身的缘故而造成损失的可能性,同时也是出于减少客户自身损失的考虑,所以进行数据库系统的恢复备份必不可少。
2.2恢复技术的基本形式
数据库的恢复技术主要可以按照普通恢复、全盘恢复、邮件恢复和批日志恢复等进行归类。首先,普通恢复就是说在数据修复环节,对之前已经备份完毕的数据信息进行简要补充,或者采用经过远程控制的分步备份方式对数据进行简单修复的形式。由于未涉及到使用者之前的日志文档等的备份,所以它并不是对所有数据的完全恢复。其次,全盘恢复的形式。这种形式是当进行数据库的恢复操作时,涉及到了整个计算机数据库中的备份数据以及使用者处理个人事务的备份文档等。因此,这种恢复手段即便可能耗费大量的功夫,但其可以使电脑数据库中发生的损失降到最低;另外,它也可以使计算机恢复到之前某个还原点的状态。还有,就是批日志恢复的形式。此恢复技术形式最大的优势就在于:它可以降低恢复数据时所占用的储存空间,相比之下,其操作步骤也比普通恢复和全盘恢复更为简便。邮件恢复要求相关处理人员必须具备良好的实际操作能力,它也是一项针对管理者的技术性的恢复形式。除此之外,务必要维护好所需处理的数据信息,更有效地提高数据恢复的安全性、科学性。
2.3恢复技术的主要方法
计算机数据库主要的修复方式可分为转储并建立相关日志、依照实际情况进行判断解决两种。第一,转储并建立相关日志文档。它要求带有一定的周期性并循环拷贝数据库中的全部数据,然后再把所备份的信息储存到其他介质中。因其简易的操作方法,这种数据库的修复方法一直以来都是最为常见的一种。第二,根据具体状况进行操作处理。如果计算机数据库存在着某些问题或故障,可以依照以下两种情况做出判断、进行处理。一,假设计算机数据库因受到的损坏过于严重而无法继续使用,这时候就应当启用一张新磁盘,并在其中拷贝一份实时数据,之后再借助日志库的重做处理进行新数据库数据的更新操作。这样不光能够恢复到之前的样子,同时又令现有的数据库数据得到更新升级;二,若是数据库未遭到损坏或程度较轻的话,再或者只是其中某几项数据不再可依赖的话,是完全没有必要拷贝已存档的数据库内容的,只要通过日志库中撤销处理的执行便能够那些没有考虑好便做出的改动,进而让数据库恢复到正常的工作状态。
ODBC(OpenDataBaseConnectivity,开放数据库连接)是微软开放服务结构中有关数据库的一个组成部分。它建立了一组规范,并提供了一组应用程序调用接口。用这样一组接口建立的应用程序,对数据库的操作不依赖于任何数据库管理系统,不直接与任何DBMS打交道,由此可实现应用程序对不同DBMS的共享。数据库操作的“数据源”对应用程序是透明的,所有的数据库操作由对应DBMS的ODBC驱动程序(ODBCDriver)完成。有了ODBC驱动程序,数据源就变得十分广泛,它可以是本机的某种数据库格式的文件(如本机DOS目录下的Access文
件*.mdb),也可以是远程数据库文件(如MicrosoftSQLServer);它可以是目前已知的某种DBMS格式,也可以是一种全新的数据库格式。总之,它取决于提供了什么数据库类型的驱动程序。
VisualC++中的ODBC主要是实现基于Windows的关系数据库的应用的共享。
二、ODBC管理器
在ODBC中,数据源是一个重要的概念,它是数据库位置和数据库类型等连接信息的总和。数据源在使用前必须通过ODBC管理器(Administrator)进行登录。在登录数据源时,要搞清数据源名(Datasourcename)、数据库文件名(Databasename)和数据表格名(Tablename)这三者的概念和相互关系:数据源实际是一种数据连接的抽象,数据源名是登录时赋予的“连接”的名称,以供应用程序使用,至于该数据源下连接的是哪一个数据库,则由数据库文件名指出(如Access2.0forMSOffics中的.mdb文件);一个数据库文件中可以包括若干个数据表格(table)和其他内容。在关系@@09A05900.GIF;图1ODBC层次关系图数据库中,数据是以二维表格的方式存在于数据库@@文件中,应用程序最终的操作目标即是这些表格中的行(row记录)和列(columns字段)数据。对于foxprow数据源,数据库文件名是“路径名”,而该路径下的所有数据文件(*.dbf)都属于该“数据库文件”名下的数据表格(table)。
ODBC管理器被装在ControlPanel里(ODBCINST.CPL)。通过该工具可以增添、修改或删除数据源,也用来增添、删除ODBC驱动程序,ODBC管理器把数据源和它们的连接信息保存在ODBC.INI、ODBCINST.INI和ODBCISAM.INI中。当需要共享应用程序时,只需按新的数据文件的类型和位置重新登录即可。
三、ODBC应用程序接口
ODBCAPI是一组标准的ODBC函数库,除了一般的数据库操作函数外,还包括一组函数(如SQLExec或SQLExecdirect)能够内嵌标准SQL查询语句。SQL(StructuredQueryLanguage结构化查询语言)是一种存取关系型数据库的标准语言,能够定义、查询、修改和控制数据,简单的语句能够作用于整个数据表格,具有很强的功能。
同Windows3.1SDK中API类似,ODBCAPI也是基于句柄(handle)进行操作的。API函数按功能可分为以下几类:
·数据源连接函数,设置/获取有关信息的函数;
·准备/提交执行SQL查询语句的函数和获得数据的函数;
·终止函数和异常处理函数。
上述函数的顺序也表示了进行数据库操作的一般顺序。两个问题需要特别说明,一是数据类型问题:数据源中的数据所具有的数据类型称为SQL数据类型,这些数据类型在其数据源中可能比较特殊,不一定和ODBCSQL数据类型存储方式一致,驱动程序把这些数据类型同ODBCSQL数据类型进行相互转换,每一个ODBCSQL数据类型都相当于一个ODBCC语言数据类型;二是函数的调用级别问题,并不是每一个ODBC驱动程序都支持所有的ODBCAPI函数调用,在应用程序中,可以调用有关函数获取驱动程序以支持层次方面的信息。
四、ODBC应用编程
在VisualC++中,MFC(MicrosoftFoundationClass基本类库)是经过对Windows应用程序中各个部件进行类的抽象而建立的一组预定义的类,如窗口基类(CWnd)、各种窗口派生类等等,这些类在应用程序中可直接使用,不需要重新定义。在MFC中,也为ODBC预定义了几个类,其中主要的是数据库类(CDatabase)和记录集合类(CRecoredset)。这两个类既有联系又有区别,在应用程序中,可以分别使用,也可以同时使用,每一类也可以同时存在多个对象。CDatabase的每一个对象代表了一个数据源的连接,CRecordset的每一个对象代表了从一
个数据表中按预定的查询条件获得的记录的集合,一般说来,前者适宜于对数据源下的某个数据表格进行整体操作,后者用于对所选的记录集合进行处理。
同Windows类与SDKAPI函数的关系一样,CDatabase类与ODBCAPI函数也有类似的关系,但CDatabase类中并不包含所有的ODBCAPI函数,大部分操作功能仍须直接调用ODBCAPI函数,如目录功能函数,用于获得数据源下的数据表格信息,如表格名,字段名等。
在应用编程时,一般使用CDatabase和CRecordset的派生类。假设派生类分别为CUserdb和CUserset,而在应用类CUserClass中,使用了一个CUserdb对象(m-db)和一个Cuserset对象(m-recset),图2给出了用户应用类与ODBC类的相互关系示意图。
@@09A05901.GIF;图2CDatabaseCRecordset类与应用类及数据源关系图@@
1.m-db连接数据源
m-db在完成定义构造后,要调用CDatabase的打开(Open)函数以进行数据源的实际连接:
m-db.Open(lpszDSN,bExclusive,bReadOnly,lpszConnect);
打开函数需要输入四个参数。lpszDSN:要连接的数据源的名字,如果lpszDSN=NULL且lpszConnect中也没有指明数据源名,则该调用会自动出现一个对话框列出所有可用的数据源(名),让用户选择。bExclusive:只支持“假”(False)值,表示为共享(share)方式连接。因此,应用程序在运行前,一定要装入share.exe或在Windows的system.ini中装入vshare.386。ReadOnly:指明数据源操作方式是“只读”还是可以修改。lpszConnect:指明连接字符串,包括数据源名、用户标识码、口令等信息。该字符串必须以“ODBC;”开头,表示该连接是与一个ODBC数据源的连接(考虑以后版本支持非ODBC数据源)。
m-db打开后,其指针可以传给m-recset作为其数据源。m-db关闭后,将关闭所有CRecordset对它的连接,m-db也可以重新打开。
2.m-db操作数据
数据源打开后,即可对数据库文件中的数据表格进行操作,操作以调用SQL语句方式进行,可直接通过ODBCAPI函数,或者CDatabase类成员函数ExecuteSQL。数据表名在SQL语句中指定,如下语句则在所在的数据源中的clerk表中插入一个记录,记录的name字段值为"chen"。
m-db.ExecuteSQL("insertintoclerk(name)value(’chen’)");3.m-recset连接数据m-recset在构造时,可传入一个CDatabase对象指针,作为m-recset的数据源,当为NULL时,必须重载CRecordset的函数GetDefaultConnect,以提供数据源连接字符串(相当于m-db.Open中的lpszConnect)。如下则表示连接名为COMPANY的数据源(当传入了合法的CDatabase对象指针时,该函数将不被调用)。
CStringCUserset::GetDefaultConnect()
{
return"ODBC;DSN=COMPANY;";
}4.m-recset选取记录和字段
m-recset在调用打开函数时,即获得了符合条件的一组记录,条件语句在Open函数中的lpszSQL中给出,如果lpszSQL为NULL,则必须重载CRecordset的函数以提供该语句。该语句是一个SELECT语句,带或不带where和orderby子句(如果不带,where和Orderby的条件也可在CRecordset的两个预定义成员变量m-strFilter和m-strSort中给出)。lpszSQL也可以只是一个数据表名(table-name),也可以是对内嵌在数据库文件中的查询程序的调用语句。所选择的一系列字段名,在成员函数DoFieldExchange中由一系列RFX-函数指定。RFX-(RecordFieldExchange)函数,使字段和成员变量一一建立类型对应关系。另外,m-strFilter中也可以带变量参数(用"?"表示,如"fieldl>=?ANDfield2<=?"),参数与成员变量的对应关系也在DoFieldExchange中由RFX-函数指定(串中的"?"将被参数变量值逐一替换)。
voidCUserset::DoFieldExchange(CFieldExchange*pFX)
{
pFX->SetFieldType(CFieldExchange::outputColumn);
/*以下为字段连接*/
RFX-???(pFX,"field1",m-var1);
RFX-???(pFX,"field2",m-var2);
...
RFX-???(pFX,"fieldn",m-varn);
pFX->SetFieldType(CFieldExchange::param);
/*以下为参数连接*/
RFX-???(pFX,field1,m-param1);
RFX-???(pFX,field2,m-param2);
...
}其中,???为ODBCSQL数据类型名,如RFX-Double,RFX-Text等。
综合上述,选取记录和字段实际是由下列语句完成:
SELECTrfx-field-listFROMtable-name[WHEREm-strFilter][ORDERBYm-strSort]
字段变量和参数变量的个数一定要在调用打开函数前(如构造函数中)准确地赋值给成员变量m-nFields和m-nParams。m-recset在打开后的任何时候调用Requery()函数,将根据新的查询条件(例如修改了参数变量值)重新选取记录。
5.m-recset操作数据
记录集合生成后,其当前记录的各字段值被保存在前述的各字段变量中,如果调用CRecordset的滚动(scroll)函数,如MoveFirst(),MoveNext(),MovePrev(),MoveLast()等,字段变量的值将自动跟随“当前”记录的位置的变化而变化。IsBOF(),IsEOF()用于判别是否移动到记录的头或尾。
数据操作主要包括删除(Delete),添加(AddNew)和更改(Edit),一般流程为:
if(m-recset.CanUpdate())/*是否允许修改*/
{
if(m-db.CanTransact())/*是否支持“批”处理*/
{
m-db.BeginTrans();
m-recset.AddNew();
/*修改字段变量值*/
...
m-recset.Update();
m-mitTrans();
if(catcherror)
m-db.RollBack();
}
}
对于AddNew和Edit,修改字段变量后一定要调用函数Update(),否则更新将丢失,而Delete操作则不必进行字段值修改和调用Update()。
上述的CDatabase的四个函数是ODBC为保证数据操作的可靠性而提供的“批”处理函数,即在BeginTrans和CommitTrans之间的数据修改如果出现任何异常,可通过函数RoolBack来恢复所做的修改。
在多用户系统使用时,每一个数据源可以被多个用户的多个任务连接,不同的任务可同时修改相同的数据源。ODBC提供了两种数据表更新的同步机制(在m-recset.Open函数中指定),“静态”的(snapshot)和动态的(dynaset)。前者是一组静态的记录集合,当建立后不会改变,除了反应自己的添加/删除外,不反应别的用户的修改,除非调用了Requery重新建立。后者是一组动态的记录集合,自己或别的用户所作的修改随时反应到集合中来(当然也可用Requery重建),以保持记录与数据源的同步。在应用中,应根据需要确定使用哪一种方式。
2数据库自动分片设计
管理系统在运行中会产生大量的写操作,进而带来频繁的磁盘I/O操作,在大数据下,最好采用将数据库分布在多台服务器上,即分片[7]。本文采用Auto-Sharding(自动分片)及Replic-Set(复本集)相结合的方式来减轻单个数据库服务器的负载,即在每台Server上各自运行一个实例,组成一个Replic-Set,最后再各运行一个实例,组成ConfigServer。直接执行Addshard操作即可增加分片以缓解服务器的压力,实现动态扩展。分片的实现重点在于片键设计。本文将保存天线参数信息的集合声明了一个复合片键{Lacci:1,Day:1}。当来自不同的小区(可以根据Lacci进行判断)向集群系统插入数据时,可以预计到在大部分情况下,同一小区的数据会落在单个块或片上。
3数据库查询的实现
数据查询功能为本数据库设计的重要功能之一。数据库将小区信息、天线参数等相关的数据信息根据用户的要求,以界面或报表的形式全部或部分的显示给用户。基于本数据库的设计,用户通过数据查询菜单进入相应查询界面,获取小区信息、终端信息及告警信息等。实现“天线工程参数查询”功能的工作流程如图3所示。为了实现小区天线参数查询功能,客户端需要向数据库发送2次请求,用户根据需求,向控制器发送查询请求,控制器处理查询命令,对相应的小区进行信息查询,待小区返回信息后,将用户的查询命令发送至对应小区,根据需求读取有用信息,并返回给用户。跟关系型数据库相比,由于省去了大量的多表连接操作,实际上查询的效率要高于基于关系型数据库的多表连接查询。查询工作的SQL语句如下。
4数据库备份与恢复
数据安全在数据库设计中有很重要的地位。在各种意外情况下,如计算机硬件故障等,对数据库进行备份和恢复能够保障数据的完整性和安全性,使得数据损失降到最小[8]。本数据库设计的备份选用的是副本集的方式[7]:在主节点上进行操作,写入的数据被一步地同步到所有的从节点上,并从主节点或从节点上读取数据,如果主节点由于某些原因断线,会自动将一个从节点提升为主节点。在查询分析器中运用SQL语句完成数据库的备份和恢复。在数据库管理界面中,用户通过数据库备份与恢复功能进行相应操作,确保数据的正确行和完整性。
1.公共网关接口CGI(CommonGatewayInterface)
CGI是较早实现的技术。适用于多种服务器平台,如UNIX、WINDOWS等,但CGI的开发成本高、维护困难、功能有限、不具备事务处理功能、占用服务器资源较多。
2.INTERNET数据库连接器IDC(InternetDatabaseConnector)
IDC集成在ISAPI(InternetServerAPI)中,充分利用了DLL技术,易扩充,但编程较CGI更为复杂,只适用于小型数据库系统。
3.先进数据库连接器ADC(AdvanceDatabaseConnector)
ADC提供了ActiveXControl来访问数据库,它的主要特点是数据查询由用户端浏览器执行,因而需将服务器端数据库中的部分记录下载到用户端,系统开销较大、响应慢,只适用于特别频繁的数据库查询操作。
4.JAVA/JDBC语言编程
JAVA语言是一种面向对象、易移植、多线程控制的语言,可通过JDBC去连接数据库。用JAVA/JDBC编写的软件可移植性强,适用于多种操作系统,但其执行效率和执行速度还不理想,目前无法建立高效、高速的应用。
5.动态服务器页面ASP(ActiveServerPage)
ASP是微软公司最新推出的WEB应用开发技术,着重于处理动态网页和WEB数据库的开发,编程灵活、简洁,具有较高的性能,是目前访问WEB数据库的最佳选择。
二.ASP简介
1.ASP访问数据库的原理
ASP是服务器端的脚本执行环境,可用来产生和执行动态的高性能的WEB服务器程序。
当用户使用浏览器请求ASP主页时,WEB服务器响应,调用ASP引擎来执行ASP文件,并解释其中的脚本语言(JScript或VBScript),通过ODBC连接数据库,由数据库访问组件ADO(ActiveXDataObjects)完成数据库操作,最后ASP生成包含有数据查询结果的HTML主页返回用户端显示。
由于ASP在服务器端运行,运行结果以HTML主页形式返回用户浏览器,因而ASP源程序不会泄密,增加了系统的安全保密性。此外,ASP是面向对象的脚本环境,用户可自行增加ActiveX组件来扩充其功能,拓展应用范围。
2.ASP页面的结构:
ASP的程序代码简单、通用,文件名由.asp结尾,ASP文件通常由四部分构成:
1)标准的HTML标记:所有的HTML标记均可使用。
2)ASP语法命令:位于<%%>标签内的ASP代码。
3)服务器端的include语句:可用#include语句调入其它ASP代码,增强了编程的灵活性。
4)脚本语言:ASP自带JScript和VBScript两种脚本语言,增加了ASP的编程功能,用户也可安装其它脚本语言,如Perl、Rexx等。
3.ASP的运行环境
目前ASP可运行在三种环境下。
1)WINDOWSNTserver4.0运行IIS3.0(InternetInformationServer)以上。
2)WINDOWSNTworkstation4.0运行PeerWebServer3.0以上。
3)WINDOWS95/98运行PWS(PersonalWebServer)。
其中以NTserver上的IIS功能最强,提供了对ASP的全面支持,是创建高速、稳定的ASP主页的最佳选择。
4.ASP的内建对象
ASP提供了六个内建对象,供用户直接调用:
1)Application对象:负责管理所有会话信息,可用来在指定的应用程序的所有用户之间共享信息。
2)Session对象:存贮特定用户的会话信息,只被该用户访问,当用户在不同WEB页面跳转时,Session中的变量在用户整个会话过程中一直保存。Session对象需cookie支持。
3)Request对象:从用户端取得信息传递给服务器,是ASP读取用户输入的主要方法。
4)Response对象:服务器将输出内容发送到用户端。
5)Server对象:提供对服务器有关方法和属性的访问。
6)ObjectContext对象:IIS4.0新增的对象,用来进行事务处理。此项功能需得到MTS(MicrosoftTranscationServer)管理的支持。
5.ASP的主要内置组件:
1)AdRotator组件:用来按指定计划在同一页上自动轮换显示广告,用于WWW上日益重要的广告服务。
2)BrowserCapabilities组件:确定访问WEB站点的用户浏览器的功能数据,包括类型、性能、版本等。
3)DatabaseAccess组件:提供ADO(ActiveXDataObjects)来访问支持ODBC的数据库。
4)FileAccess组件:提供对服务器端文件的读写功能。
5)ContentLinking组件:生成WEB页内容列表,并将各页顺序连接,用于制作导航条。
此外,还可安装Myinfo、Counters、ContentRotator、PageCount等组件,用户也可自行编制Actiive组件,以提高系统的实用性。
6.DatabaseAccess组件ADO
WWW上很重要的应用是访问WEB数据库,用ASP访问WEB数据库时,必须使用ADO组件,ADO是ASP内置的ActiveX服务器组件(ActiveXServerComponent),通过在WEB服务器上设置ODBC和OLEDB可连接多种数据库:如SYBASE、ORACLE、INFORMIX、SQLSERVER、ACCESS、VFP等,是对目前微软所支持的数据库进行操作的最有效和最简单直接的方法。
ADO组件主要提供了以下七个对象和四个集合来访问数据库。
1)Connection对象:建立与后台数据库的连接。
2)Command对象:执行SQL指令,访问数据库。
3)Parameters对象和Parameters集合:为Command对象提供数据和参数。
4)RecordSet对象:存放访问数据库后的数据信息,是最经常使用的对象。
5)Field对象和Field集合:提供对RecordSet中当前记录的各个字段进行访问的功能。
6)Property对象和Properties集合:提供有关信息,供Connection、Command、RecordSet、Field对象使用。
7)Error对象和Errors集合:提供访问数据库时的错误信息。
三.ASP访问数据库步骤
在ASP中,使用ADO组件访问后台数据库,可通过以下步骤进行:
1.定义数据源
在WEB服务器上打开“控制面板”,选中“ODBC”,在“系统DSN”下选“添加”,选定你希望的数据库种类、名称、位置等。本文定义“SQLSERVER”,数据源为“HT”,数据库名称为“HTDATA”,脚本语言采用Jscript。
2,使用ADO组件查询WEB数据库
1)调用Server.CreateObject方法取得“ADODB.Connection”的实例,再使用Open方法打开数据库:
conn=Server.CreateObject(“ADODB.Connection”)
conn.Open(“HT”)
2)指定要执行的SQL命令
连接数据库后,可对数据库操作,如查询,修改,删除等,这些都是通过SQL指令来完成的,如要在数据表signaltab中查询代码中含有“X”的记录
sqlStr=“select*fromsignaltabwherecodelike‘%X%’”
rs=conn.Execute(sqlStr)
3)使用RecordSet属性和方法,并显示结果
为了更精确地跟踪数据,要用RecordSet组件创建包含数据的游标,游标就是储存在内存中的数据。
rs=Server.CreateObject(“ADODB.RecordSet”)
rs.Open(sqlStr,conn,1,A)
注:A=1读取
A=3新增、修改、删除
在RecordSet组件中,常用的属性和方法有:
rs.Fields.Count:RecordSet对象的字段数。
rs(i).Name:第i个字段的名称,i为0至rs.Fields.Count-1
rs(i):第i个字段的数据,i为0至rs.Fields.Count-1
rs("字段名"):指定字段的数据。
rs.Record.Count:游标中的数据记录总数。
rs.EOF:是否最后一条记录。
rs.MoveFirst:指向第一条记录。
rs.MoveLast:指向最后一条记录。
rs.MovePrev:指向上一条记录。
rs.MoveNext:指向下一条记录。
rs.GetRows:将数据放入数组中。
rs.Properties.Count:ADO的ResultSet或Connection的属性个数。
rs.Properties(item).Name:ADO的ResultSet或Connection的名称。
rs.Properties:ADO的ResultSet或Connection的值。
rs.close():关闭连接。
4)关闭数据库
conn.close()
四.查询WEB数据库举例
下面这段示例程序是访问SQLSERVER数据库的signaltab表,表中有三个字段:code(代码字段,字符型,3位),class(分类字段,字符型,10位),memo(备注字段,字符型,20位)。程序中数据源DSN:HT、用户名:client、口令:passwd。
屏幕输入页面input.asp
对于计算机软件系统而言,数据库作为其中的核心内容,需要得到人们的重点关注。在数据库设计的过程中,需要通过对软件工程的定义分析,实现对不同软件工程项目的认识及理解,满足数据库编程的基本需求,从而有效避免了数据资源浪费现象的发生。在软件设计中,设计人员需要提高对软件数据库编程的重视,通过对数据库资源的综合性分析,避免数据库出现使用性能不高的问题,解决数据故障限制因素。对于不良的数据库而言,其后期系统的维护频率会不断增多,从而造成了计算机软件维修中资源浪费的现象。
1.2提高计算机软件系统运行速度
在计算机系统设计及分析中,需要通过对软件系统的运用,实现对程序功能的稳定发挥,为数据资源的系统运行提供有效支持。而且,在高性能数据软件系统运用中,可以通过对计算机系统的操作分析,进行准确、快速的信息传输,全面提高软件系统的运行速度。同时,在计算机软件系统使用的过程中,通过对数据库资源的拓展分析,可以为用户提供便利性的服务支持,减少数据资源浪费现象的发生。通過计算机软件数据库的构建,可以实现对数据库资源的合理革新,从而为数据资源的储存软件系统的管理提供有效支持。
2计算机软件工程中的数据库建立
开展计算机软件工程建设过程中,首先要针对数据库系统进行完善,设计构建基础的框架,计算机软件通常是在网络环境下运行使用的,因此在建设期间,也要考虑是否存在影响因素,通过各个系统之间的相互配合,来实现软件功能,数据库中的信息安全性也能够得到保障。对于软件工程中针对数据库编程管理问题,在建立初期要有明确的使用方向,完成基础框架设计后需要针对功能方面采取完善措施,不断的补充其中的功能,并提升软件自身防御能力,这样即使是在网络运行使用环境下,也能最大限度的避免受到病毒攻击,确保数据信息安全,同时数据库中信息的更新速率也能够达到使用需求标准。数据库建立是基于编程技术基础上来开展的,对于一些技术性问题,通过功能之间的协调使用,可以更好的避免出现技术性问题,同时在软件工程投入使用后最大限度的利用数据库资源,在网络环境中也能够实现软件的自动更新检测。建立过程中要选择适合的程序汇编语言,通过语言来完成功能框架编写,选择适合的汇编语言,针对不同的功能模块也可以做出区分,这样可以更好的帮助提升设计效果。
3对数据库文件的应用
3.1面向对象的数据库存储模式选择
数据库存储模式选择,需要在分区后进行,存储功能中可能会出现不同程度的功能隐患问题。这种数据库存储模式选择也是对用户访问权限的定义,在软件使用过程中,为确保内部重要信息的安全性,会对用户的访问权限进行定义,这样不同级别的用户所能够登陆到的界面也存在差异,数据库信息也都得到安全保障。基于文件类型选择基础上所进行的文件访问,也更高效合理,实现上述功能在程序编写期间要重点设计,根据所存储的信息类型来对数据库做出选择,避免出现更深层次的问题,并帮助合理优化资源,利用过程中达到更理想的效果。不同资源在使用时需要根据所接收到的指令来调动数据库内部信息,实现资源利用方面的优化。
3.2数据库文件的加密保护
文件加密保护主要是针对基础信息来进行的,这部分信息关系到使用者的个人隐私,一旦泄露会造成严重的影响,因此在所开展的数据库文件加密保护中,要根据不同信息的重要程度来设置等级,采用登陆口令以及密码加密的形式来进行保护,登陆到数据库文件内部需要输入相应的加密密匙,这样工作人员可以根据常见问题来探讨解决加密措施,以免文件应用过程中受到网络病毒的影响,造成数据库使用期间瘫痪问题。对于文件加密期间的数据信息选择,通过各个系统之间的文件加密选择,如果出现功能方面的冲突问题,可以通过系统的框架结构优化来达到更理想的优化使用模式。为各个系统之间的功能优化创造有利环境。
3.3数据存储模式使用方法比较
存储功能使用性能是否稳定,要从使用方法对比过程中来进行探讨,观察运行状态下的软件是否存在功能不稳定的现象,并从技术性角度来深入探讨预防措施。设计期间的功能选择直接关系到后续网络访问所选择的形式,以及工作任务开展期间可能会遇到的相关问题,帮助提升系统投入使用后的功能稳定性,通过这种工作模式上的创新利用,可以帮助避免网络环境中软件使用受到计算机病毒的入侵,并最大程度的保护数据库中信息的安全性,对于一些比较常见的技术性问题,对于这种配合方法的选择也能够达到更理想的运行效果。系统在运行过程中会对所接收到的信息快速筛选,将其中的有用信息进行归类,这样可以根据使用需求快速的调动数据库内的信息,软件投入使用后也可以根据操作需求对功能进行更新处理,这种方法的实现也需要各个系统之间的相互配合。对存储模式进行对比,观察其中所存在的问题,更有利于下一阶段软件功能设计的实现。
3.4开发设计中的编程技术选择
2在信息管理中计算机数据库的应用现状分析
计算机技术发展越来越快,相应的,也出现了包括网络安全问题在内的很多问题。对于计算机管理系统的发展而言,安全系统也具有十分重要的作用。数据库技术要想实现更好地发展,必须先解决可能会出现的数据安全问题。业内人士开展了大量关于计算机数据库的探究,而且在信息管理中数据库技术的应用性能也得到了极大提升。在信息管理中处理数据具有十分重要的作用,很多企业的数据资料都具有机密、敏感的特点,他们非常关注数据资料的安全性,因此其具有较高的信息管理技术要求。对信息的管理是数据库管理技术的主要功能,而建立有效的数据模型是对信息进行管理的主要特点。以建立的数据模型为根据,可将数据库体系划分为层次型数据库、关系型数据库以及网状型数据库。计算机技术与数据库技术之间的结合具有非常好的发展前景,其已经在包括农业、工业以及其他产业中得到十分广泛的应用,两种技术结合使很多行业信息管理的条理性、有效性和安全性得以极大提升。在信息管理中充分运用计算机数据库技术,除了能使信息管理变得更加方便外,还可以有效保证信息的安全管理。与此同时,信息系统还具有备份和恢复信息的作用,这可以在数据遭到破坏的时候,实现对有用数据的无成本恢复,从而解决误删资料的问题。如今,数据库的安全系数越来越高,企业机构不仅能更好地保护数据库,还能有效避免信息系统被黑客侵入,防止机密信息流失。
3计算机数据库技术在信息管理中应用的前景分析
3.1安全性越来越高
数据不会出现被非法盗取、篡改和使用等各种安全问题就是数据库的安全性,数据库的安全性是衡量系统质量好坏的一个非常重要的标准。作为数据库的特色应用之一,数据的共享很容易导致数据出现安全问题,因此,一些机密文件不能实现共享。然而很多信息用户并不具备较高的信息安全意识,也没有充分重视网络安全,严重影响数据的安全管理工作。未来计算机数据库技术在信息管理中应用的一个重要的趋势就是具有越来越高的计算机数据库技术安全性。
1、综合信息的查询
目前,随着工具软件的发展和广泛采用,使数据库应用系统的开发如虎添翼,其中PowerBuilder以其独特的数据窗口(DataWindow)倍受欢迎。
PowerBuider是美国著名的数据库应用开发工具生产厂家Powersoft公司于1991年6月推出的功能强大、性能优异的开发工具,它是一种面向对象的、具有可视图形界面的、快速的交互开发工具。智能化的数据窗口对象是其精华所在。利用此对象可以操作关系数据库的数据而无需写入SQL语句,即可以直接检索、更新和用多种形式表现数据源中的数据。但要注意,必须使数据窗口成为窗口(Window)下数据窗口控制的一个连接对象,数据窗口才能使用户在应用执行期间访问数据库中的数据。
利用PowerBuilder提供的内部查询机制,我们即可以让数据窗口作为查询条件的输入,又可以让该数据窗口作为查询结果的输出,这样就可以使数据窗口中的所有数据项进行自由组合的查询。例如:在窗口W_que上建立两个数据窗口控制dw_1和dw_2,分别连接两个数据窗口对象dw_que1与dw_que2,其中dw_1用于输入查询条件,而dw_2用于显示满足查询条件的所有元组。事实上条件的输入及元组的显示完全可以在一个数据窗口中实现,考虑到这两种操作的差别(例:条件输入可编辑,而元组显示不可编辑;条件输入可为某一范围,而元组显示仅为满足条件的所有纪录……)将其用两个数据窗口控制来实现。这就要求dw_2与dw_1数据共享,即要求dw_que1与dw_que2两数据窗口的数据源完全相同。
用这种方法实现查询优点突出,例:通过设置数据窗口中对应列的编辑风格(EditStyles)为相应的下拉式数据窗口(DropDownDataWindow),使显示的元组文字化。注意,这要事先建好下拉式数据窗口。设置数据窗口中对应列的编辑风格同样可满足其它显示需要。利用数据窗口的风格特点:查询表的列宽、列序可自由改变,甚至可以覆盖掉一些列,以达到更满足查询显示的需要。综合查询的信息来自多个表,改变数据窗口的数据源,采用多表连接的数据源即可实现。但是如我们问题的描述,如果我们需要的查询项随机地来自这43张表中的数据项,显示项也是随机地。这种任意条件的组合,可选输出项的显示称为动态查询(DynamicQuery)依然采用上述方法,数据窗口dw_que1与dw_que2的数据源将是这43张表的连接,先不说效率问题,单从这426个项中输入查询条件,又显示这426个项,就使人敬而远之。因为,在每一次查询前,都不了解此次查询的要求是什么,这样,每张表中的每一个数据项都缺一不可;另一方面,每一次的查询,一旦查询条件确定、显示条目也确定后,我们会发现,每一次有意义的查询并不是需要全部的43张表,换言之,每一次查询没有必要将43张表全部连结,而应只连接那些被选中数据项所在的表,即数据源是动态产生的。由于数据源不确定,数据窗口就无法设计,动态查询无法用这种方法实现。
2、计算机动态查询的实现
在某些实际的应用系统开发中,由于用户在开发前提不出查询的需求,而在系统运行中希望能够对所有的数据项任意组合进行查询,以满足来自多方的需求,实现动态地查询(即随机地从43张表中选择数据项进行组合作为查询条件并任意地选择数据项作为显示条目)。对于此类查询的实现要利用PowerBuilder通过编程的方式在运行时动态地创建数据窗口,并动态地控制数据窗口。
动态地创建一个数据窗口,应用程序需要执行下列任务:
•动态地构造SQL语句。
•用符合数据窗口语法的字符串,为现在的数据窗口控制创建一个数据窗口对象。具体实现如下:超级秘书网
2.1动态地生成SQL语句,根据SQL的语法:SELECTstringaFROMstringbWHEREstringc也就是动态地生成stringa,stringb,stringc.由用户输入要显示的列,一旦输入完毕,列名就随之确定,将所有列名拼成一个“串”,中间用“,”分隔,形如“columm1,column2,column3,...,columnr”,则动态地生成stringa;同样由用户输入查询条件,包括相应的列、满足的条件或范围、逻辑关系等,将这些条件拚成一个串,即为stringc,显然,所有的列名都确定了,他们所在的表名也确定了,按照stringb的语法规则即可构造。
注意:上面的stringc由两部分(表间关系stringc1及查询条件stringc2)组成;表名串stringb与表间关系stringc1、查询条件stringc2及显示条目stringa均有关。
在实现的过程中:为贴近实际应用,习惯上,先输入查询条件,再输入显示条目。即在输入查询条件后,生成strinc2,stringb,stringc1;然后,再在输入显示条目后生成stringa,并修改stringc1,stringb。最后形成SQL语法:
str="select"+stringa+"from"+stringb+"where"+stringcl+stringc2
2.2在现在的事物对象里利用相关的SyntaxFromSQL()函数生成符合数据窗口语法的字符串:
exp=syntaxfromsq1(sq1ca,str,strsty,error)生成数据窗口的源代码
其中:strsty为数据窗口的显示风格,例:
strsty="style(type=grid)datawindow(units=lcolor=12632256)text(font.face=''''system'''')"
2.3创建数据窗口对象
dw_que.create(exp)
这样就实现了用户要求的随机查询。
在真实系统中,用户在输入查询条件时希望通过选项方式录入查询信息,由于库表中存放的大量信息为代码,这就需要在程序中先把录入的文字信息转化成相应的代码再连接到查询条件中。为简化输入,提高准确性,可采用代码输入,即动态地嵌套下拉式数据窗口。在显示查询结果的数据窗口中,事先不能嵌套下拉式数据窗口,可预先做一个函数,在程序运行中根据所选的列把代码转化成所对应的汉字显示,这样更完善了用户要求的随机查询。
1.引言
随着经济的发展,企业的规模越来越大,其积累的信息也越来越多。存在着各部门所处理的信息多数只对本部门有效,仅有少数信息需给其它某些部门共享的问题。这种信息的分布性和独立性要求对所处理的数据进行分类,使各部门既能独立地处理本部门大多数数据,也使部门间能协调处理跨部门的事务。在这种情况下,对整个企业建立一个完全的紧密耦合的分布式数据库是很困难的,也是没必要的,特别是大型企业,这样的数据库的效率往往是很低的。
为解决这个问题,我们采用以下策略:每个部门使用一套紧密耦合的数据库系统,而在存在跨部门事务处理的数据库系统间用一个协调器联起来。这样就组成了一个横跨整个企业,各部门高度自治的联邦数据库系统。
dm2是由华中理工大学数据库多媒体技术研究所研制的数据库管理系统。它采用客户/服务器模型,客户机与服务器,服务器与服务器均通过网络互连,通过消息相互通讯,组成一个紧密耦合的分布式数据库系统。它的工作流程如下:客户机登录到一台服务器上,这台服务器便成为它的服务器;它接收来自客户机的消息,然后根据全局数据字典决定是自己独立完成该操作,还是与其它服务器协作处理这条消息,处理完成之后,再由服务器将处理结果返回给客户机。
而数据字典,作为记录数据库所有元数据的系统表,它向以上过程中提供各类有用的信息,引导它们向正确的方向运行,起着“指南针”的作用。它分为局部数据字典和全局数据字典。其中,局部数据字典用于记录一个服务器站点中数据库的控制信息,如表的模式,视图的模式及各个数据区的的文件名等信息。全局数据字典用于记录分布式数据库系统中各个服务器站点上有关全局数据的控制信息,如服务器站点信息,各服务器站点的全局表名及表内码记录,各服务器站点上的全局数据视图名及视图内码记录,用户名及口令记录,用户权限记录等信息。各个局部数据字典可以各不相同,但为了保证在各个服务器上所看到的全局数据库是一致的,因此,全局数据字典必须一致。我们所关心的是全局数据字典中的基表控制块tv_ctrl_block,它的内容主要包括:全局基表总数,每个全局基表名和其对应的表内码,该基表所在的服务器站点的编号等信息。它的功能是将各个服务器站点号与存储在其上的表名及表内码联系起来。这样,服务器从客户消息中找到被处理的表名,然后通过查询基表控制块tv_ctrl_block,就能知道该表存在哪个服务器上,以便将相关消息发给该服务器。
由于dm2上各个服务器站点的全局字典完全相同,任何全局表的信息都会记入全局字典。若用它来构建一个企业的数据库系统,则大量只对企业某部门有用的信息将会充斥在各部门所有服务器的全局字典中,增加了冗余。而且,当对全局表进行ddl操作时,为了确保全局字典的一致性,须对所有服务器的全局字典进行加锁。dm2对全局字典的封锁方式是采用令牌环方式,即令牌绕虚环(非实环)传输,某个服务器想对全局字典进行操作,必须等令牌到达该服务器才可以执行。每个部门建立的全局表绝大多数只对本部门有用,当对这些表进行ddl操作时,却要对所有服务器的全局字典进行封锁,通过令牌来实现对全局字典的互斥访问。假如,两个部门都要分别对本部门的内部表进行ddl操作,这应该是可以并行处理的操作,现在却只能串行执行。而且,当服务器数目庞大时,每个服务器等待令牌的时间将会很长。这严重损害了数据库的效率。
为弥补以上不足,在dm2的改进版本dm3中增加了协调器,用以联接各个独立的dm3数据库子系统,并协调各子系统间的各种关系,使各子系统既能高度自治地工作,又能进行有效的信息共享。
2.体系结构
本系统可看作多个数据库子系统被协调器联起来的,高度自治的一个联邦数据库系统。其中,每个子系统独立处理本系统内部的事务,而子系统间的信息共享由复制技术提供,副本间的一致性由协调器协调处理,处理所需的信息在初始化时写入协调器的组间数据字典中。当对某子系统中的一份数据副本进行修改时,该子系统会将修改通知协调器,由协调器对该数据的其它副本进行修改,从而保证了所有副本的一致性。
由以上可知,子系统彼此并不直接接触,而是各自都与协调器直接相联,由协调器统一管理子系统间的通信。这样,当子系统对副本进行修改时,不必关心相应的子系统处于何种状态,也不必等待回应消息,以及异常处理,所有这些都由协调器进行管理。因此,既提高了系统运行的效率,也保证了子系统的独立性。其体系结构如下图所示。
协调器主要有三大功能,首先,它对协调器和服务器进行初始化,并将有关信息存入组间字典;其次,它管理不同子系统间的通信,维护副本的一致性;最后,它在子系统出现崩溃时,进行异常管理及恢复工作。
dm3多数据库系统体系结构
3.主要策略
多个dm3系统间的信息共享是通过副本实现的,副本的一致性是由协调器来维持的,是一种弱一致性。通常,多数据库系统间的一致性是通过协调器周期性地访问服务器的日志来完成的。由于副本的更新带有随机性,因此,若采用这种方法,可能数据被修改多次,但其相对应的副本仍未被修改,这样就损害了数据的一致性;也可能数据并未被修改,但协调器已多次访问了服务器的日志了,这样就降低了系统的效率。
所以,本系统采用的方法是当数据被修改时,由服务器通知协调器有关信息,再由协调器通知相关系统,修改相关数据。这样,数据的修改及时(仍然是弱一致性),而协调器也不会在数据未被修改的情况下访问服务器,提高了准确性。
为了使协调器正常工作,我们对底层数据库管理系统dm2进行了修改。在基表控制块tv_ctrl_block中增加一项isreplication。建表时,该项初始化为false;当为该表建立一个副本时,该项赋值为true。具体算法如下。
3.1初始化算法。
协调器:
从用户或应用程序接收待连接的两个系统中的服务器名,需复制的表名;
分别登录到两个系统的服务器上;
向存有待复制表的服务器发预复制消息;
等待服务器消息;
若失败,发一条失败的消息给服务器和用户或应用程序,转11);
若成功,从消息中取出待复制表的有关信息,根据这些信息,发一条建表消息给另一个系统的服务器;
等待服务器消息;
若失败,发一条失败的消息给服务器和用户或应用程序,转11);
若成功,调数据转移程序,进行数据复制;
将有关信息写入组间字典。
退出。
服务器:
当服务器收到预复制消息后,将基表控制块tv_ctrl_block中的isreplication赋为true。同时,取出待复制表的有关信息,组成应答消息发给协调器。
当服务器收到失败的消息后,将基表控制块tv_ctrl_block中的isreplication赋为false。
3.2维护算法。
协调器:
从组间字典读出相关信息,根据这些信息,登录到相应系统上;
等待消息;
从某系统的服务器上收到一条修改消息后,通过查找组间字典,确定该消息的目的地,然后将它转发过去;
若失败,定时重发;
转2);
服务器:
1)等待消息;
2)当收到某客户或应用程序的消息后,检查它是否是修改数据的操作(如delete,update或insert等);
若不是,转7);
若是,检查基表控制块tv_ctrl_block中的isreplication是否为true;
若不是,转7);
若是,向协调器发修改消息;
继续执行服务器程序的其它部分。
3.3恢复算法。
若协调器所联接的系统中有一个跨掉了,则对副本的修改无法及时地反映到跨掉的系统中来。这时,需要恢复算法来进行处理。
协调器:
当协调器发现有一个系统已经崩溃后,采取以下步骤。
将与该系统相关的变量open赋值为false;
打开记时器;
等待消息;
若收到的消息是其它系统发出的修改崩溃了的系统上的副本的命令,则依次将这些消息存储起来,转3);
若收到的消息是记时器发出的时间到的消息,则向崩溃的系统发登录命令;
若登录成功,将open的值改为true;
将存储的消息依次发送过去,转9);
若登录失败,转3);
退出。
4.结论
我们曾在三个dm3数据库系统上,用两个协调器进行联接。结果,运行情况良好,各副本最终都能保证一致,且各副本间存在差异的时间间隔很短。另外,在出现异常的情况下,协调器也能正常工作。
主要参考文献