论文 关键词:水文数据库 表结构 升级
论文摘要:该文概述了广东省水文数据库现状,讨论了水文数据库表结构3. 0与4. 0的主要差异,针对水文数据库由表结构升级所要解决的问题,提出了具体的工作流程与解决方法,并用以对表结构3. 0进行优化、调整、补充,完成了表结构到4, 0的升级。
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<@bghrmt)
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成果
应用以上技术笔者完成了广东省水文数据库表结构3. 0到4. 0数值表类的转化,并通过触发器同步技术使每年新增资料的转换过程自动化。通过表结构4. 0的转换及向用户提供数据表明,新表结构使用方便,提供的数据格式更为 科学 合理。而且由于在升级转换过程中严格数据质量控制,改正了旧库中许多错误,统一了数据表达方式,使新库数据质量得到了提升。
4结语
对于规模较大的数据库表结构,由于不可能一次设计完美,数据库升级是必要的和常见的。企业数据库升级是一个复杂的系统过程,需要协调考虑各方面的问题才能较好地完成任务。水文数据库表结构由3. 0升级到4. 0提升了数据库的性能,为水文资料使用用户提供了更优质的服务。