数据工作期在多表查询中的运用

时间:2022-10-26 05:32:50

数据工作期在多表查询中的运用

摘要:建立临时关系的目的是使子表的记录指针随父表的记录指针的移动而移动,从而达到同时浏览多个表中数据的目的,本文首先简单介绍了表的关联、数据工作期和临时关系等基本概念,然后通过举例重点介绍了运用数据工作期如何建立表间关联、如何实施查询的步骤和方法。

关键词:关联;数据工作期;临时关系

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)06-1496-01

现实世界中的客观事物是彼此相互联系的,这种普遍联系性决定了作为事物属性的数据与数据之间也存在着一定的联系。关系数据库系统采用二维表格来存储数据,数据之间的关联是通过表中的关联字段来实现的。表间的关联使同一时间对多表数据进行操作成为可能。

数据库表之间的关系分为两种,即永久关系和临时关系。建立永久关系的目的在于为实现参照完整性提供依据、在查询和视图设计中和创建表单和报表时作为默认连接条件。永久关系一经建立,一直保留。建立临时关系的目的则是使一个表中的记录指针随另一表中的记录指针的移动而移动,从而实现同时浏览多个表中的相关记录的目的。临时关系在表被关闭后自动解除。

1 表的关联

无论是自由表还是数据库表,表之间都会存在着三种关系:一对一关系、一对多关系和多对多关系。通常将主关联表称为父表,被关联表为子表。

一对一关系:父表中的一条记录对应子表中的一条记录;

一对多关系:父表中的一条记录对应子表中的多条记录;

多对多关系:父表中的一条记录对应子表中的多条记录,子表中的一条记录对应父表中的多条记录。

目前Visual FoxPro(简称VFP)只处理一对一和一对多的关系。多对多关系须分解成两个一对多关系来处理。例如一个简单的学生成绩管理系统由班级、学生、课程三个关系组成,在关系数据库系统中对应着三个二维表格,各自的属性(字段)如下(其中画下划线的为关联关键字):[1]

班级:班级编号、班级名称、所属院系

学生:学号、姓名、性别、年龄、 班级编号

课程:课程号、课程名、学分

显然,班级和学生是一对多关系,为建立两者关联在多方学生关系中增加字段班级编号;学生与课程为多对多关系,因为一个学生可以选修多门课,而一门课又可由多个学生选修,为建立学生与课程之间的关联,引入另一个表作为两者的关系表:成绩,其关联关键字有两个,即学号和课程号。

成绩:学号、课程号、成绩

这样学生与课程的多对多关系就分解为两个多对一(成绩和学生、成绩和课程)关系。这四个表间的关联可用图1表示。图中用矩形表示表,用连线表示关联,连线旁边或上端标出关联关键字。

图1 表间关联

2 数据工作期

数据工作期是一个用来设置数据工作环境的交互式窗口。在VFP中,若要同时对多个表操作,就要使用多个工作区,因为每个工作区只能打开一个表。数据工作期窗口正是VFP提供的一个管理工作区的工具。每个数据工作期包含了它自己的一组工作区,这些工作区含有打开的表、表索引及其关系,

3 设置表间的临时关系

VFP为建立表间临时关系提供了两种办法:通过“数据工作期”窗口创建或者使用SET RELATION 命令。相对用命令创建关联,利用“数据工作期”窗口建立临时关系有以下优点[2]:

(1)用命令操作需要一定的经验,而数据工作期窗口对操作有向导作用,操作比较方便;

(2)用数据工作期设置的环境可以用视图文件(扩展名为.VUE)保存起来,需要时打开视图文件就能恢复它所保存的环境。

4 在数据工作期窗口建立关联实现多表查询

在数据工作期窗口建立关联并查询的一般步骤为[2]:

(1)打开需要建立关联的表;

(2)为子表按关联的关键字建立索引;

(3)选定父表工作区为当前工作区,并与一个或多个子表建立关联;若为一对多关系,对建立的关联进行说明;

(4)建立视图文件(当涉及信息量大、表多时,这一点尤其重要);(下转第1499页)

(上接第1496页)

(5)显示查询结果。

已知班级、学生、课程和成绩已收录部分数据(见图2),现在要对这四个表进行操作,比如查询张浩同学《Visual FoxPro》的成绩。

图2 班级、学生、课程和成绩表及其部分数据

为达到查询的目的,首先利用数据工作期建立如图1所示的表间关联,具体操作如下:

(1)打开表:打开“窗口”菜单,单击“数据工作期”进入数据工作期窗口,然后依次打开班级.DBF、学生.DBF、课程.DBF和成绩.DBF。

(2)为子表建立索引:先确定成绩为父表,学生为子表,课程为子表,则成绩与学生为多对一关系,成绩与课程为多对一关系。再让学生作父表,班级为子表,则父子关系为多对一关系。将学生、课程和班级分别以学号、课程号和班级编号建立索引。以学号为学生建立索引为例,在别名列表框中选定表学生单击“属性”按钮在工作区属性对话框中选中“修改”按钮在表设计器窗口中单击字段名为学号的行的索引列组合框中选中升序单击“确定”按钮返回到工作区属性窗口在“索引顺序”下拉式组合框中选中学生:学号选定“确定”按钮返回到数据工作期窗口。依次类推为表课程和班级建立索引。

(3)建立关联:首先建立成绩与学生的关联,在别名列表框中选定成绩单击“关系”按钮在别名列表框中选定表学生在表达式生成器中选定“确定”按钮,则成绩与学生的多对一关系建立完成。同理建立成绩和课程的关联。然后建立学生与班级的关联,在别名列表框中选定表学生单击“关系”按钮在别名列表框中选定班级在表达式生成器中选定“确定”按钮,则学生与班级的多对一关系也建立完成。若为一对多关系,还得选中“一对多按钮”对一对多关系进行说明。建立好各表间关联的数据工作期窗口如图3所示。

(4)建立视图文件:选定文件菜单的“另存为”命令在另存为对话框的文本框中输入视图文件名学生成绩单击“保存”按钮,即产生视图文件学生成绩.VUE。

(5)显示查询结果:

有两种方法:

①选定数据工作期窗口别名列表框中的成绩选项(即进入父表工作区)并在命令窗口输入命令:

图3 已建立多表关联的数据工作期窗口

BROWSE FIELDS 班级.班级名称:H='班级名称',学生.姓名:H='学生姓名',课程.课程名:H='课程名',成绩.成绩 FOR 学生.姓名='张浩' AND 课程.课程名=’Visual FoxPro’

显示结果如图4所示。

图4 查询结果

②同时显示4个表格,通过移动父表(成绩)的记录指针查看。因已建立临时关系,父表可以控制子表,当在父表中移运记录指针时,子表中的记录指针也做相应移动[3]。如图5所示,当成绩表中记录指针指向学号为20042202的记录时,其它三表连动显示,与此记录相关的信息一目了然:张浩,机械工程系2004机制2班学生,《Visual FoxPro》的成绩为90分,学分2分。

图5 父表控制子表作相应移动

第二种查询方法非常实用,移动鼠标即可,操作简单,不需要记复杂的命令语句,但当表格非常多、信息量非常大时,却非常耗时,不及使用命令操作来得快。至于让哪个表作父表、哪些作子表并没有硬性规定,只要方便查询即可。

参考资料:

[1]张文祥,杨爱民.等.数据库原理及应用[M].北京:中国铁道出版社,2006.

[2]史济民,汤观全.Visual FoxPro及其应用系统开发[M].北京:清华大学出版社,2005.

[3]张文祥,肖四友.Visual FoxPro程序设计[M].北京:科学出版社,2005.

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:在Authorware 7.0中制作各种Windows风格的交互... 下一篇:“校园一卡通系统”机房管理子系统的设计与实...