数据库的设计
数据库设计是将现实世界中的信息,根据数据库的组织结构约束,表现在计算机中,其关键问题是确定表的结构并为之建立索引。数据库应用系统的设计与普通应用系统的设计的很大差别就是前者更注重数据模型的设计。如果数据组织的得当,就能把数据库设计得相当灵活,可以用很多方法组合和提供数据。结合我的工作经历,我觉得可以把数据库设计分为如下几个步骤:
需求分析:VFP数据库设计的第一步就是明确数据库的目的和如何使用,必须准确的了解用户需求(包括数据和处理)。通过需求分析可以得到整个数据库的概念模型。如果这一步没有做好,可能会导致整个系统的返工重做。
结构设计:包括表的设计和表中字段的设计。将概念模型变为VFP的数据模型,分类放入表中,并根据表中数据的不同属性并选取相应的VFP字段类型建立字段。在建立字段的过程我觉得特别应当注意以下几点:
*每个字段直接和表的主题相关,尽量不要在多个表中重复相同的信息。
*不要包含可推导或计算得到的数据,他们可以在程序中很容易的得到,不需要额外占用存储空间。
*收集全所需的所有信息。不要等到进行程序设计时再回头来修改,增加格外工作量。
*以最小的逻辑单位来存储信息。如果一个字段中包含很多信息,以后要想获得单独信息就很困难,应该尽量把信息分解成比较小的逻辑单位。
确定关系:VisualFoxPro是一个关系型数据库,在每个独立表中存储的数据都存在关系。可以定义表之间的关系,而VisualFoxPro可以利用这些关系来查找有联系的信息。表之间有三种关系:一对多关系,多对多关系和多对一关系。在一对多关系中,表A中的一个字段,在表B中可以有多个记录与之相对应。一对多关系也是比较常用的关系。在VisualFoxPro6的数据库设计器中,可以通过简单的拖放来建立关系。
设计优化:在完成以上3个步骤以后,应该再研究一下设计方案,检查可能存在的缺陷,如:数据的分类是否合理、字段是否与表的主题相关、是否有些字段对很多记录不适用,在那里保持空白等等。当确定了要做的修改以后,就可以修改表和字段,来完善方案。
在我这次的工作当中,由于我本人对实验室的管理工作并不熟悉,因此崔老师对数据库的用途和要求作出了规定。另外在听取其他老师的意见后,我将实验室管理的日常工作分为了6个部分,并根据这6个部分建立了6个数据库:教学管理库、经费管理库、物资管理库、人员管理库、实验室管理库以及器材管理库。
*教学管理库主要存储本学期在实验室上课的课程信息。包括3个表:教材表、实验计划统计表和课程表(JXSYJC,JXSYTJ,JXGLKCB)。
*经费管理库主要储存实验室的经费支出情况,包含一个表:经费管理表(JFGL).
*物资管理库主要存储实验室有编号的主要仪器及其附件的信息,包括3个表:附件表,借用表和仪器设备表(FUJIAN,JIEYONG,YQSB)。
*人员管理库主要存储实验室人员信息,包括两个表:实验室工作人员表和实验室工作人员培训计划表。
*实验室管理库主要记录每个实验使用仪器的情况,包含一个表:实验室仪器表(SYSYQ)。
*器材管理库主要记录那些没有编号的器材的信息,包含2个表:器材管理表和器材领用表(QCGL,QCLYB)。
由系,而于每个数据库的功能界定的非常详细,因此每个数据库中的表存在着联除了用来建立关系的个别字段以外,数据库中也不存在许多表存储相同数据的情况,在最简化方面,所有字段都尽量拆分成最小单元,并采用合适的VFP字段数据类型。比如说像性别,专兼职这样的字段就采用逻辑型字段,既限定了输入形式,又节省了存储空间。至于还原成直观文字的工作,则交由程序部分完成。
在定义各个数据库表之间的关系以后,我还为物资管理库和教学管理库建立了参照完整性。建立参照完整性涉及到生成一系列规则,以便在输入或删除记录时,能保持已定义的表间关系。如果实施了参照完整性规则,VisualFoxPro可以确保:
*当主表中没有关联记录时,记录不得添加到相关表中。
*主表的值不能改变,若这个改变将导致相关表中出现孤立记录。
*若某主表记录在相关表中有匹配记录,则该主表记录不能删除。
而要实现上述性能,只需要在VFP参照完整性生成器(RI)中选择相应选项就行了,十分的简单。而我也在后面的工作中通过程序实现了同样的功能,至少需要20行程序左右,而且很可能会出错,从这里就可以看出使用RI生成器的简洁性。而且使用RI生成器为数据库生成规则时,VFP把生成的代码作为触发器保存在存储过程中,在打开数据库中,它们便自动加载在内存中,因此即使不通过程序而直接对数据库进行操作,也会受到上述完整性规则的限制,这项功能的重要行我将在以后提及
由于数据库设计部分准备充分,表和字段以及表间关系的制定比较合理,为后来的工作打下了良好的基础。
2.系统模型设计
对于VFP来说,完成一套数据库管理系统,绝大部分时间都用来完成这套系统的表单部分。表单是用户查看和修改数据的界面,它还提供了丰富的对象集,能响应用户(或系统)事件,这样就能使用户尽可能方便和直观的完成信息管理工作。因此,对于系统模型的设计实际上就是表单的确定。下面就是系统的流程图:
N
N
YY
系统实现
从上面的系统模型中可以看出,这个数据库管理系统按照所操作的数据源的不同可以分成6个部分,加上一开始的密码确认部分一共是7部分。在对每一部分的功能及实现方法加以说明之前,先简单介绍一下VFP表单的生成和对数据访问的控制。
VFP有功能强大的表单生成向导和表单设计器,使得生成和设计表单的工作变得快速而且简洁。VFP的表单生成向导可以生成多种样式的对指定数据源进行操作的表单,一般包括与指定数据源绑定的文本框以及常用按钮组,如果是使用一对多表单生成向导话,还会包含与子表绑定的表格控件。而在VFP的表单生成器我们可以处理下列内容:
*表单中不同类型的对象。
*与表单相关联的数据。
*顶层表单或子表单。
*能一起操作的多个表单。
*基于自定义模板的表单。
表单设计器中通过简单的拖放操作就可以完成控件定位和显示属性控制操作,这在直接用程序编程时是一件非常麻烦的工作。另外值得一提的在表单设计器的数据环境中可以直接为表单添加或移去数据表或视图,并指定它们之间的关系。在我的工作中,都是将表单生成向导和表单设计器结合使用,这样确实节省了很多时间。
为了能够一次使用多个表,在VFP中引入了工作区这个概念。一个工作区就是一个编号区域,它标识一个已打开的表。VFP总共可以开启32767个工作区,然而一次仅可以处理一个工作区,所有命令仅对当前的工作区有效,若要使用其他工作区必须使用切换工作区指令。当使用USE命令打开第一个数据表时,作用区为第一工作区,在打开第二个数据表则置于第二工作区,以此类推。也可以使用USE[表文件名]IN[工作区号],指定要开启哪一个工作区。而要选择工作区,则使用命令SELECT[工作区],如果之前使用了USE[表文件名]ALIAS[表别名]指定了表的别名,那么也可以使用SELECT[表别名]来选择工作区。因为第二种方法比较直观,因此在应用程序中通常通过使用该数据区的表的别名来标识。在表单中,表别名是在表单设计器的数据环境
上一篇:
VFP学籍管理系统yuping(论文和程序)
下一篇:
关于马克思生态文明理论研究