计算机应用
Computer Applications
1999年 第19卷　第8期 Vol.19　No.8 1999



一个升迁工具的设计和实现
左春荣
　　摘　要　针对VFP中升迁向导的局限性，本文介绍了一个自定义的升迁工具的功能结构、设计方法和实现过程。
　　关键词　SQL，存储过程，触发器，MIS
1　概述
　　Mircosoft SQL Server 是为Windows NT 操作系统的数据库应用专门设计的,作为数据处理的后台服务,这种后端可以提高安全性和事务处理的鲁棒性,可以实现强大的数据管理功能,处理速度快,容量可以随时扩充。它对数据存储空间的自由分配，并且有数据处理的实时性和远程数据处理能力。Visual FoxPro (VFP)和 SQL Server是黄金搭档,它支持本地和远程两种视图，而且可以将视图与报表联系起来,有利于程序的运行效率,并尽可能简化事务处理过程。因此，VFP和SQL Server越来越广泛地被选为管理信息系统的前端开发工具和数据库管理系统。
　　为此，我们用VFP和结构化查询语言开发了一个升迁工具―― v―uprise。


图1　v―uprise的功能结构
　　图1为v―uprise的功能结构示意图。
2　v―uprise的设计与实现
　　v―uprise的实现流程是先将后台数据库和后台表的各部分升迁属性定义到本地表中，然后通过VFP提供的SQL pass-through函数实现将这些属性创建到SQL Server上。下面分别介绍各部分的设计和实现过程。
2.1　表结构维护
　　包括新增表结构、修改表结构、删除表结构、创建后台表、摘除后台表等功能。表结构信息存储在本地表table―fld中，其结构如下：
字段　字段名　　　　类型　长度　注释
　1TABLENAMEC16表名
　2FIELDNAMEC16字段名
　3DATATYPEC16字段类型及长度
　4NULLFLAGL1是否关键字段
　5DEFAVALUEC10默认值
　6CHECKC40合法性检查表达式
　7FLDMEMOC60字段说明
　　TABLENAME、FIELDNAME、DATATYPE、DEFAVALUE、CHECK等信息的定义都必须符合Transact-SQL的句法，如长度为4的字符型字段类型及长度DATATYPE定义为Char(4)。建立新的后台表步骤如下：首先通过新增表结构功能定义表结构信息，然后选择创建后台表功能建立后台表。修改后台表的结构时，首先通过修改表结构功能修改表的结构信息，然后选择创建后台表功能对后台表结构进行维护，此功能保持后台表的原有数据不丢失。
　　升迁一个新表时，通过往后台发送CREATE TABLE命令创建，如果创建不成功，则新表定义可能有错；升迁一个后台已存在的表即进行后台表结构维护时，为了保证后台表中原有信息不丢失及升迁成功，第一步，创建一个基于原表的远程视图，通过此视图将后台表中数据下载到本地临时表中保存；第二步，检查表间参照完整性，如果原后台表中有字段为其他表的外码，则摘除掉表间参照完整性；第三步，先摘除原后台表，然后发送CREATE TABLE命令创建基于新结构的后台表；第四步，恢复后台表中原有数据及表间参照完整性。通过往后台发送DROP TABLE命令摘除后台表。
2.2　表索引维护
　　对后台表进行索引维护，包括定义索引、创建索引和摘除索引等功能。索引的有关信息存储在本地表table―idx中，其结构如下：
字段　字段名　　　　类型　长度　注释
　1TABLENAMEC16表名
　2INDNAMEC16索引名
　3FIELDLISTC80索引表达式
　4CLUSTERL1是否簇索引
　5UNIQUEL1是否唯一索引
　　索引名INDNAME和索引表达式FIELDLIST的定义必须符合Transact-SQL的句法。进行后台表的索引维护时，先定义索引的有关信息，然后选择创建索引功能建立后台表的索引。
　　创建索引和摘除索引分别通过往后台发送CREATE INDEX命令和DROP INDEX命令来实现。
2.3　参照完整性定义
　　参照完整性控制数据一致性，尤其是不同表的主关键字和外部关键字之间关系的规则。参照完整性定义完成建立表之间的联系，控制记录在相关表中的插入、更新或删除。表间联系的有关信息存储在本地表table―rlt中，其结构如下：
字段　字段名　　　　类型　长度　注释
　1TABLENAMEC16表名
　2FORKEYNAMEC16外码名
　3FIELDLISTC80外码字段
　4PARTABNAMEC16参照表名
　5PARKEYFLDC80参照字段
　　外码名FORKEYNAME的定义必须符合Transact-SQL的句法。进行参照完整性定义时，先定义表间的联系信息，然后选择创建外码功能建立后台表之间的联系。
　　创建和摘除表间参照完整性分别通过往后台发送ALTER TABLE ADD CONSTRAINT命令和ALTER TABLE DROP CONSTRAINT命令来实现。
2.4　存储过程创建
　　SQL SERVER中，存储过程是保存在一个数据库中一个名称下的语句集合。在后台用存储过程实现一些任务时有它独特的特点和优越性，可以显著提高处理效率。存储过程是经过预先定义和编译过的事务，这就意味着它与普通的SQL语句不同，当首次运行一个存储过程时，SQL SERVER的查询处理器对其进行语法语义分析，在排除了错误之后，形成存储在系统中的可执行方案，下次再执行时，就不需要再进行语句分析，因而执行速度较快；存储过程和待处理的数据都放在同一台SQL SERVER上，由数据库管理系统来存储和管理这些存储过程，效率自然提高；存储过程的调用一般是由客户端通过存储过程名进行引用，在网上传播的只是过程名和参数，而不是形成存储过程的SQL语句串，减少了网络的传输量；存储过程具有函数的特性，有形参和返回值。因而，在设计时应规划好哪些任务在客户端实现方便，哪些任务在后台实现方便。存储过程定义的有关信息存储在本地表table―pro中，其结构如下：
字段 字段名　　 类型 长度 注释
　1PROCNAMEC20存储过程名
　2PROCPARAC100存储过程参数
　3PROCSQLM4组成存储过程的SQL语句
　4CREFLAGL1是否已创建
　　PROCNAME、PROCPARA、PROCSQL的定义都必须符合Transact-SQL句法。创建存储过程时，首先定义存储过程的上述信息，然后选择创建功能即可创建存储过程到后台数据库中。
　　创建和摘除后台数据库存储过程分别通过发送CREATE PROCEDURE命令和 DROP PROCEDURE命令来实现。
2.5　触发器创建
　　SQL SERVER中，触发器是一种特殊的存储过程，保存在数据库一个表中的一个名称下的SQL语句集合。在表的插入、更新或删除操作之后自动运行。经常用作加强事务级规则和数据完整性。触发器的运行开销通常很低。触发器定义的有关信息存储在本地表table―tri中，其结构如下：
字段 字段名　　　 类型 长度 注释
　1TRINAMEC20触发器名
　2TABLENAMEC16对应的后台表名
　3TRISETC20触发器类型集合
　4TRISQLM4组成触发器的SQL语句
　5CREFLAGL1是否已创建
　　TRINAME、TRISET 、TRISQL的定义必须符合Transact-SQL句法，TRISET的内容为集合{INSERT,UPDATE,DELETE}的子集。创建触发器时，首先定义触发器的上述信息，然后选择创建功能即可创建触发器到后台表中。
　　创建和摘除后台表触发器分别通过发送CREATE TRIGGER命令和 DROP TRIGGER命令来实现。
3　结束语
　　本系统实现了数据库表结构等的升迁功能，为开发者提供了一个灵活的维护工具。特别是在系统的试运行阶段，由于项目开发者与用户之间存在通信鸿沟及系统需求的不稳定性，往往对表结构的维护量比较大，通过v―uprise升迁工具，维护人员可直接在前台操作，方便快捷，不必通过发送SQL命令或到后台SQL Server服务器上进行操作，加强了系统数据的安全性。另外，由于后台数据库和表的升迁属性都保存在本地表中，便于系统完成后进行软件文档的统一编制和输出。我们将该工具用于多个管理信息系统的实践证明，该系统比VFP自身提供的升迁工具更为方便实用。
作者单位：左春荣　合肥工业大学计算机网络研究所　安徽.合肥(230009)
参考文献
　［1］　许振宇.Visual FoxPro 5.0高级程序设计指南.北京：海洋出版社，1998,4
　［2］　Microsoft.Microsoft SQL Server 6.5 Transact-SQL参考指南.北京：科学出版社，1997,8
　［3］　颜洪忠.IS中的数据库设计与性能.第十三届全国管理信息系统学术年会论文集.机械工业出版社，1998.10,3:7
　　收稿日期:1999-02-19
