第 8章 数据库与数据库表学习要点
1,数据库,数据库表的创建
2,在项目中添加,移去和删除数据库
3,索引的建立与使用
4,多个表的使用
5,数据库表间关系第 8章 数据库与数据库表
8.1 创建数据库
8.2 创建数据库表
8.3 使用和管理数据库
8.4 索引
8.5 使用多个表
8.6 创建数据库表间的关系习题与参考答案第 8章 数据库与数据库表在 Visual FoxPro 6.0中,除使用自由表外,还大量使用从属于某一数据库的被称之为数据库表的这一数据组织形式 。 一个较大的应用项目可以创建若干个数据库,每个数据库又可定义一组数据库表,然后用一定的关系将它们相互联接 。
8.1 创建数据库数据库作为管理数据信息的有效容器,可以组织和建立表与表之间,表与视图之间的关系 。 数据库不但提供了存储数据的结构,而且可以在表一级进行功能扩展 。 例如,创建字段级规则和记录级规则,设置默认字段值和触发器等,还可以创建存储过程和表之间的永久关系 。
8.1.1 Visual FoxPro 中数据库的概念
Visual FoxPro 中的数据库是关系型数据库,是按照关系模型组织和存储数据而构成的数据集合 。 Visual FoxPro 数据库系统中,与关系数据库中的关系相对应的是表 。 每个数据库都由一个或多个表组成,数据库中的数据分类存储在各个表中 。
在 Visual FoxPro数据库系统中,除了表之外,还可包含视图,连接和存储过程 。 视图是建立在一个或多个表之上的虚拟表,它是引用几个表或其他视图的某些字段而构成的 。 在
Visual FoxPro中对视图可以与表一样进行数据存取,对视图的数据存取实际就是对视图所引用的表的数据存取 。 连接是对远程数据库访问方法的定义,用于创建远程视图时引用远程数据源 。 存储过程是保存在数据库中的过程,是一段 Visual
FoxPro代码,主要用于维护数据库的数据完整性和表中数据的有效性规则 。
8.1.2 数据库的创建在进行一项应用系统开发的过程中,在完成数据库设计之后,就可着手创建数据库 。 创建数据库主要有三种方法:使用,数据库向导,,,项 目 管 理 器,和使用 CREATE
DATABASE命令 。
1.使用,项目管理器,创建数据库
8.1.2 数据库的创建图 8-1,创建,对话框
8.1.2 数据库的创建图 8-2,数据库设计器,窗口
8.1.2 数据库的创建图 8-3,数据库设计器,工具栏
8.1.2 数据库的创建图 8-4 展开数据库文件
8.1.2 数据库的创建
2.使用数据库向导创建数据库
3.使用 CREATE DATABASE命令创建数据库
8.1.3 数据字典
Visual FoxPro提供数据字典功能 。 数据库的各个组成成分都可使用数据字典的各种功能 。 数据字典是包含数据库中所有表信息的一个表 。 每个数据库维护一个数据字典,并将数据字典的内容存储在数据库相应的,dbc文件中 。 数据字典中包括可以在数据库中创建和指定的多种信息,列举如下:
⑴ 表和字段的长名称 。
⑵ 各字段的标题,它们将作为标头显示在浏览窗口或表格列中 。
⑶ 字段的默认值 。
⑷ 表单中使用的默认控件类 。
⑸ 字段的输入掩码和显示格式 。
8.1.3 数据字典
⑹ 字段级规则和记录级规则 。
⑺ 触发器 。
⑻ 存储过程 。
⑼ 主关键字和候选索引关键字 。
⑽ 数据库表间的永久关系 。
⑾ 与远程数据源的连接 。
⑿ 本地视图和远程视图 。
⒀ 对每个字段,表和数据库的注释 。
8.2 创建数据库表
8.2.1 表的基本概念表是用来存储数据的文件,其文件扩展名是,dbf。
在 Visual FoxPro中,未加入某个数据库的表称为自由表 。 将一个自由表添加到某个数据库中或在数据库设计器中创建的表就成为数据库表 。 虽然数据库表和自由表都能够存储数据,但数据库表更优越 。 这是因为 Visual FoxPro数据库表可以具有自由表所没有的属性,例如字段级规则,记录级规则,触发器和永久关系等 。 另外,只有数据库中的表才可利用 Visual
FoxPro提供的数据库管理功能 。 如减少冗余数据存储,
保护数据完整性等 。 因此建议使用数据库表 。
8.2.1 表的基本概念
1.表的命名数据库表同自由表一样也要求指定表名,
即表对应的 dbf文件的文件名 。 表名也是由字母,
数字和下划线组成,但可指定一个长表名 。 长表名最多可以包含 128个字符,不能包含空格,
其首字符必须是字母或下划线 。
8.2.1 表的基本概念
2.字段的命名字段名可用一个 Visual FoxPro标识符充当 。 标识符的命名可以采用 1~ 128个字符,这些字符只能是字母,下划线,汉字和数字,而且首字符必须是字母,
汉字或下划线 。
对一个具体的表的字段命名时,应注意字段名应简洁,含义明确,同一个表中的各字段名不可能相同 。
至于字段的数据类型,等同于自由表的规定 。
8.2.2 创建数据库表的准备创建表就是建立新的表文件 。 创建表之前需要分析清楚在表中存储那些数据 。 例如 以教师管理数据库为例,除前面创建的教师基本情况表 teacher.dbf,还需要如下所示的部门代码表 bmdm.dbf,授课表 sk.dbf和导师表
ds.dbf等 3个表 。
8.2.2 创建数据库表的准备
bmdm.dbf结构,bmdm( 代码 C( 2),名称 C
( 20))
bmdm.dbf记录:
记录号 代码 名称
1 11 计算机学院
2 12 电子工程学院
3 21 管理学院
4 22 外语学院
5 23 文学院
8.2.2 创建数据库表的准备
sk.dbf结构,sk( 教师代码 C( 5),课程名称
C( 20),总学时 N( 3))
sk.dbf记录:
记录号 教师代码 课程名称 总学时
1 10011 操作系统 72
2 10011 编译原理 68
3 30001 会计学原理 68
4 40010 大学英语精读 72
5 50001 古典文学 56
8.2.2 创建数据库表的准备
ds.dbf结构,ds( 教师代码 C( 5),学生类型 C( 6),学生人数 N( 2))
ds.dbf记录:
记录号 教师代码 学生类型 学生人数
1 10013 硕士 4
2 10013 博士 2
3 20037 硕士 5
4 30001 硕士 3
8.2.3 创建数据库表的步骤创建数据库表的方法有:
⒈ 在,项目管理器,中打开数据库,然后选定,表,,在单击,新建,按钮 。 选定数据库后,创建表还可使用 Create Table ( 或
Create) 命令 。
⒉ 使用,表设计器,可以创建和修改数据库表或自由表以及表的索引 。
8.2.3 创建数据库表的步骤下面以创建 teachersj数据库中的 teacher表为例,
说明建立数据库表的步骤 。
第一步:选定,项目管理器,,打开数据库
teachersj,选定,表,,单击,新建,按钮;在创建对话框中输入表名 teacher,单击,保存,按钮,
就打开了,表设计器,对话框 。
第二步:输入每个字段的字段名,类型,宽度,
小数位数,还可对字段作如下的设置:
⑴ 是否按该字段建立索引
⑵ 控制字段的显示格式
⑶ 设置字段的有效性
8.2.3 创建数据库表的步骤第三步:选择,表,选项卡 。 显示表的信息,设置记录有效性 。
图 8-5,表设计器,对话框中的,表,选项卡
8.2.3 创建数据库表的步骤
⑴ 记录有效性:与记录相关的有效性,在给出的规则成立时记录才是有效的,也称为,记录级规则,。
⑵,触发器,,触发器是绑定在表上的表达式,
当表中的任何记录被指定的操作命令修改时,触发器将被激活 。 当数据修改时,触发器可执行数据库应用程序要求的任何操作 。 例如:使用触发器可以做如下的工作:
● 记录对数据库的修改 。
● 实施参照完整性 。
● 自动记录数量低于库存要求的产品 。
8.3 使用和管理数据库一个数据库被创建,系统会以独占方式打开它,该文件存储了有关该数据库的所有信息,
包括和它关联的文件名和对象名 。 因此,在使用和管理数据库时,用户应了解数据库的分层结构,浏览数据库文件的方法以及如何在项目中添加或删除数据库等内容 。
8.3.1 查看数据库的分层结构数据库分层结构是在数据库中所建立的表结构和永久关系的可视化表示形式 。
图 8-6 在“数据库设计器”窗口中显示数据库的分层结构
8.3.1 查看数据库的分层结构显示数据库分层结构,还可以使用 MODEFY
DATABASE命令 。 例如,要打开 teachersj数据库,
并在,数据库设计器,窗口中显示其分层结构,可输入以下命令:
MODIFY DATABASE teachersj
此外,在,数据库设计器,中,使用,数据库,
菜单可以完成修改表以及移去表等操作 。 例如,使用
,添加表,选项,可以把已有的自由表添加到数据库中,使其成为数据库表;使用,移去表,选项,可以从数据库中移去表,使其成为自由表;使用,修改,
选项,可以修改表的结构,如图 8-7所示 。
8.3.1 查看数据库的分层结构图 8-7 使用“数据库”菜单
8.3.2 浏览数据库文件
“数据库设计器,只显示数据库的分层结构,
有时可能需要浏览数据库文件本身的内容,这时,可使用 USE命令来浏览一个处于关闭状态的数据库 。 例如,要打开 teachersj数据库,
并以表的形式显示数据库中的内容,可输入以下命令,显示结果如图 8-8所示 。
USE teachersj.dbc
BROWSE
8.3.2 浏览数据库文件图 8-8 以表的形式显示数据库的内容
8.3.3 在项目中添加,移去和删除数据库数据库创建后,若还不是项目的一部分,用户可以把它加入到项目中 。 若使数据库不属于某个项目,
则可将它从项目中移走 。 若不再需要此数据库,也可将它从磁盘上删除 。
1.在项目中添加数据库当使用 CREATE DATABASE命令创建数据库时,
即使,项目管理器,处于打开状态,该数据库也不会自动成为项目的一部分 。 若把数据库添加到一个项目中,用户便能通过交互式界面方便地组织,查看和操作数据库对象,同时还能简化绑定应用程序的过程 。
8.3.3 在项目中添加,移去和删除数据库
2.从项目中移去或删除数据库要从项目中移去数据库,也只能通过,项目管理器,窗口来实现 。 在,项目管理器,窗口中选定要移去的数据库,此时弹出一个消息框 。 如果单击,移去,按钮,可移去数据库使数据库表变成自由表;如果单击,删除,按钮,
则从磁盘上删除数据库 。
8.3.4 关闭数据库如果要关闭一个已经打开的数据库,可在,项目管理器,窗口中选定要关闭的数据库,然后单击,关闭,按钮,或者使用 CLOSE DATABASE命令 。 例如
teachersj数据库处于打开状态,要关闭它,可输入以下命令:
CLOSE DATABASE
使用上述方法都能关闭数据库 。 此外,如果要关闭数据库及所有其它已打开的对象,可以使用 CLOSE
命令的 ALL子句 。
8.4 索引用户在查询数据时,经常需要按照一定的顺序来排列数据 。 在 Visual FoxPro 6.0中,
使用索引可以按特定的顺序定位,查看或操作表中的记录 。 因此,使用索引作为排序机制,
为开发应用程序提供了灵活性 。 用户可以根据应用程序的要求,灵活地对同一个表创建和使用不同的索引关键字,从而按不同的顺序处理或访问记录 。
8.4.1 索引的概念与分类
1.记录的物理顺序与逻辑顺序表文件中的记录一般是按磁盘存储顺序输出的,
这种顺序称为物理顺序 。 而在索引文件中包括关键字和记录号两个字段,并且所有关键字值按升序或降序排列,每个值对应原文件的一个记录号,这样便确定了记录的逻辑顺序 。 使用索引后,可按照索引文件中的记录号取出表中的物理记录,从而达到按关键字值顺序来列出记录的效果 。
8.4.1 索引的概念与分类
2.索引的种类如果按扩展名来划分,Visual FoxPro 有复合索引和单索引两种索引文件,其扩展名分别为,cdx和,idx。 复合索引文件允许包含多个索引,每个索引都有一个索引标识,代表一种记录逻辑顺序,该索引文件总是以压缩方式存储 。 而单索引文件中只有一个索引标识 。
复合索引文件又有结构化的和非结构化的两种,若定义复合索引文件时用户为它取了名字,则其为非结构化的,否则为结构化的 。 结构化复合索引文件的主名与表的主名相同,它随表的打开而打开,在添加,修改和删除记录时还会自动维护 。 本书所讨论的复合索引文件均为结构化复合索引文件 。
8.4.2 建立索引在 Visual FoxPro 6.0中,建立索引的方法有两种,即使用,表设计器,和 INDEX命令 。
1,利用,表设计器,建立索引在 Visual FoxPro 中,使用,表设计器,对话框的,索引,
选项卡,可以设置索引关键字信息,通过,表设计器,创建的索引为结构化复合索引 。 方法如下:
⑴ 在,项目管理器,对话框的,数据,选项卡中双击表
teacher,打开,表设计器,对话框 。
⑵ 切换到,索引,选项卡,在,索引名,文本框中输入索引名称,在,类型,下拉列表框中选择索引类型,在,表达式,
文本框中输入索引表达式,如图 8-9 所示 。
8.4.2 建立索引图 8-9 设置索引
8.4.2 建立索引
⑶ 重复上述步骤,设置其他字段的索引类型 。
⑷ 单击,确定,按钮,并在弹出的消息框中单击,是,按钮,保存索引 。
2.使用 INDEX命令建立索引在 Visual FoxPro 6.0中,使用 INDEX命令也可以建立一个索引文件,建立的索引文件可以是单索引文件,也可以是复合索引文件 。
8.4.3 使用索引要实现索引查询必须按以下步骤依次执行:打开表,打开索引文件,确定主控索引文件,对于复合索引文件还需确定主控索引 。 其中,主控索引文件是指当前起作用的索引文件;主控索引是指当前起作用的索引标识 。
1.打开和关闭索引文件结构化复合索引文件是在打开表文件的同时自动打开的,
所以需要手动打开的索引文件一般为单索引文件 。 可通过命令
SET INDEX TO来确定主控索引文件 。
2.确定主控索引复合索引文件中,当前建立的索引标识自动成为主控索引 。
表重新打开时尽管复合索引文件已自动打开,但还需确定主控索引 。
可以用 SET ORDER TO命令来确定主控索引,也能确定主控索引文件 。
8.4.3 使用索引
[例 8-5] 根据例 8-2和 8-3建立的索引改变主控索引 。
USE teacher INDEX xmidx&&打开 xmidx.idx(索引号为 1),
LIST &&记录按姓名升序排列
SET ORDER TO gz &&指定 teacher.cdx的索引标识
LIST &&记录按基本工资降序排列
SET ORDER TO 1 &&指定 xmidx.idx为主控索引
LIST &&记录按姓名升序排序
SET ORDER TO 2 &&指定索引标识 gz为主控索引
LIST &&记录按基本工资降序排列
SET ORDER TO &&关闭所有单索引文件
LIST &&teacher.dbf恢复物理顺序显示
8.4.3 使用索引
3.删除索引单索引文件可以通过命令来删除,但必须先关闭表文件,再删除索引文件 。 若要删除复合索引文件,
则要删除索引标识,索引文件会自动删除 。
可打开表设计器来删除索引标识,也可使用命令
DELETE TAG来删除 。 例如,要删除索引标识 gz,可用以下代码 。
USE teacher &&打开 teacher.dbf
DELETE TAG gz &&删除索引标识 gz
8.4.4 索引文件的更新当表中的数据发生变化时,所有当前已打开的索引文件都会随数据的改变自动改变记录的逻辑顺序,实现索引文件的自动更新 。
若未确定主控索引文件或主控索引,修改表的记录时索引文件就不会自动更新 。 如果仍然要维护记录的逻辑顺序,可用 REINDEX命令来更新索引 。
8.5 使用多个表工作区是一个编号的内存区,它可以存放一个表 。 若要使用多个表,就要使用多个工作区 。 在 Visual FoxPro 6.0中,系统还提供所谓数据工作期的工作环境 。 本节就使用多个表而涉及到的这两个问题予以讨论 。
8.5.1 引用工作区表打开后才能进行操作,实际上打开表就是把它从磁盘调入内存的某一区域,称该区域为一个工作区 。
1.工作区号
Visual FoxPro 6.0提供了 32767个工作区,编号从 1到 32767。 每个工作区只允许打开一个表,在同一工作区打开另一个表时,先前打开的表就会被关闭 。 反之,一个表只能在一个工作区打开,在其未关闭时若试图在其它工作区打开它,Visual FoxPro
6.0会显示提示出错信息,文件正在使用,”。
8.5.1 引用工作区
2.别名前 10个工作区除使用 1~10为编号以外,
还可依次使用 A~J这 10个字母来表示,后者称为工作区的别名 。
因表有别名,在应用程序中通常使用该工作区中表的别名来表示工作区 。
3.选择工作区工作区可以通过工作区号或别名来选择 。
8.5.2 使用数据工作期数据工作期是一个用来设置数据工作环境的交互操作窗口 。 所设置的环境可以包括在各个工作区中打开的表及索引,多个表之间的关系等状态 。 在数据工作期设置的环境可以作为视图文件保存起来,需要时将视图文件打开就能恢复它所保存的环境 。 若用户建立了多个视图文件,需要某个环境时只要打开相应的视图文件即可 。
1,数据工作期窗口
,数据工作期,窗口可用 SET或 SET VIEW ON命令打开,也可通过选择,窗口,|,数据工作期,命令的菜单操作方式打开,如图 8-10所示 。
8.5.2 使用数据工作期图 8-10,数据工作期”窗口
8.5.2 使用数据工作期
“数据工作期,窗口包括 3个部分 。 左边的
,别名,列表框用于显示迄今为止已打开的表,
并可从多个表中选定一个当前表 。 右边的,关系,列表框用于显示表之间的关联状况 。 中间一列的 6个按钮,其功能如下:
⑴,属性,按钮:用于打开工作区的属性对话框 ( 如图 8-11所示 ),可对工作区中打开的表进行多种设置 。
8.5.2 使用数据工作期图 8-11 工作区属性对话框
8.5.2 使用数据工作期
⑵,浏览,按钮:为当前表打开浏览窗口,供浏览或编辑数据 。
⑶,打开,按钮:弹出,打开,对话框来打开表 。
若数据库已打开,还可以打开数据库表 。
⑷,关闭,按钮:关闭当前表 。
⑸,关系,按钮:以当前表为父表建立关联 。
⑹,一对多,按钮:系统默认表之间以多一关系关联,若要建立一多关系,可单击这一按钮,这与
SET SKIP TO命令等效 。
8.5.2 使用数据工作期
2.视图文件数据工作期设置的环境可以作为视图文件保存,以便在需要时恢复它所保存的环境 。
⑴ 视图文件的建立
① 菜单操作
② 命令方式
⑵ 视图文件的打开
8.6 创建数据库表间的关系
8.6.1 数据库表之间的关系数据库表之间有 3种关系:一对多关系,多对一关系以及多对多关系 。
1.一对多关系
2,多对一关系
3.多对多关系
8.6.2 设置表间的临时关系 ——关联
1.关联的概念
2.关联的建立在 Visual FoxPro 6.0中,可以使用,数据工作期,窗口或使用 SET RELATION命令建立两表之间的关联 。
⑴ 在,数据工作期,窗口建立关联
⑵ 用 SET RELATION命令建立关联
8.6.2 设置表间的临时关系 ——关联图 8-12,数据工作期,窗口
8.6.2 设置表间的临时关系 ——关联图 8-13 创建关联
8.6.2 设置表间的临时关系 ——关联图 8-14 设置表的索引顺序
8.6.2 设置表间的临时关系 ——关联图 8-15 设置关联表达式
8.6.2 设置表间的临时关系 ——关联图 8-16 关联后的浏览效果
8.6.3 设置表间的永久关系
1.永久关系的概念永久关系是数据库表之间的关系存储在数据库文件 (,dbc) 中,只要不作删除或变更就一直保留 。
2.永久关系的建立永久关系与临时关系不同,它不必在每次使用表时重新建立 。 在 Visual FoxPro 6.0中可利用,数据库设计器,来建立永久关系,只要在数据库表间进行连线,而删除永久关系也只需去掉连线 。
8.6.3 设置表间的永久关系图 8-18 数据库的永久关系
8.6.4 参照完整性前面已经介绍过数据库表的字段级和记录级有效性规则,这里要介绍的参照完整性属于表间规则 。
对于永久关系的相关表,在更新,插入或删除记录时如果只改其一不改其二,就会影响数据的完整性 。
例如修改父表中关键字的值之后,子表关键字的值未做相应的改变;删除父表的记录后,子表的相应记录未删除,致使这些记录成为孤立记录;对于子表插入的记录,父表中没有相应关键字值的记录等等 。 对于这些涉及表间数据的完整性,统称为参照完整性 。
习题
1.选择题
⑴ 关于数据库和自由表,正确的叙述是 。
⑵ 关于索引概念的不正确叙述是 。
⑶ 可以伴随着表的打开而自动打开的索引是 。
⑷ 关于索引的叙述,不正确的是 。
⑸ 如果要在字段中控制重复值的输入,并对记录排序,则 。
习题
⑹ 对学生成绩表文件按总分 ( N,6,2) 降序,姓名
( C,8) 升序索引 。 应使用命令 。
⑺ 设表文件已经在当前工作区打开,有关索引文件已经建立,要打开表文件的某索引文件,应该使用命令 。
⑻ 在数据库设计器中,建立 2个表之间的一对多关系是通过 实现的 。
⑼ 永久关系建立后 。
⑽ 创建两个具有多对多关系的表之间的关联,应当 。
习题
2.填空题
⑴ 一个数据库表最多只能建 个触发器 。
⑵ 单索引文件的扩展名是 。
⑶ 在同一个数据表中可以有 个主索引 。
⑷ 如果 <索引关键字表达式 >中只有一个关键字段,其类型可以是字符型,数值型,,。
⑸ 在索引中,字段默认是按 序排列的 。 如果想把数值型字段按降序排列,把 <索引关键字表达式 >前加 即可 。
⑹ 要在项目中添加或移去数据库,只能通过 窗口来实现 。
⑺ 从项目中移去数据库时,与数据库有关的表将变成 。
参考答案
1,选择题
⑴ D ⑵ D ⑶ C ⑷ D ⑸ C ⑹ D ⑺ A ⑻ A
⑼ B ⑽ A
2,填空题
⑴ 3 ⑵,idx
⑶ 1 ⑷ 日期型,逻辑型
⑸ 升序,- ⑹ Project Manager
⑺ 自由表