第 3 章 数据库和表的创建与管理
实验 1 自由表的建立与操作
一、实验目的 熟练掌握自由表的建立和基本操作。 二、实验内容 1.自由表的建立与数据输入 建立如图 31 所示名为“学生”的自由表并输入数据,同时为姓名为王小平的同学输入特 长和照片数据。 图 31 学生.dbf 中的部分数据 操作步骤: (1)在命令窗口中输入以下命令: create 学生 弹出“表设计器”对话框,在其中进行设置,如图 32 所示。 图 32 表设计器(2)单击“确定”按钮。 (3)在弹出的“现在输入数据记录吗?”询问对话框中单击“是”按钮。 (4)在弹出的“记录输入”编辑窗口中输入记录,如图 33 所示。 图 33 “记录输入”编辑窗口 (5)在命令窗口中输入以下命令: use 学生 && 打开学生表 browse && 浏览学生表 (6)双击“王小平”对应记录的 memo 字段,打开“备注型字段”编辑窗口,输入“唱 歌,踢足球”的字样后单击“关闭”按钮关闭编辑窗口。 (7)双击“王小平”对应记录的 gen 字段,打开“通用型字段”编辑窗口,选择“编辑” →“插入”命令,弹出“插入对象”对话框(如图 34(a)所示),选中“由文件创建”单选 按钮, “插入对象”对话框变成如图 34(b)所示。 (a) (b) 图 34 “插入对象”对话框 (8)单击“浏览”按钮,选择图形文件,再单击“确定”按钮, 照片出现在“通用型字段”编辑窗口中,如图 35 所示。 2.表数据的查看与修改 显示所有入校总分在 580 分以上的学生记录,并将所有女生的入 校总分增加 5 分,再添加一条空记录。 在命令窗口中输入以下命令: use 学生 && 打开“学生”表 图 35 插入照片
browse for 入校总分>=580 && 浏览所有入校总分在 580 分以上的学生记录,此处的 browse && 也可以用 list 或 display 代替
replace all 入校总分 with 入校总分+5 for 性别="女"
&& 将所有女生的入校总分增加 5 分 list && 显示修改后的所有记录 append && 在表的末尾追加一条记录,将会弹出记录编辑窗口,读者可以 && 自行追加 list && 再次显示所有记录 use && 关闭“学生”表 3.表记录的定位、删除与恢复 逻辑删除所有的女生记录,然后恢复,再物理删除学生表中的最后三条记录。 在命令窗口中输入以下命令: use 学生 delete for 性别="女" && 逻辑删除所有女生记录 list && 浏览所有记录,可以看到女生记录的前面打上了删除标记 recall for 性别="女" && 恢复所有女生记录 list && 再次浏览所有记录,删除标志被取消 go 8 && 指针定位于第 8 条记录 delete next 3 && 逻辑删除从第 8 条记录开始的最后三条记录 pack && 彻底删除所有被逻辑删除的记录 list && 再次浏览所有记录,最后三条记录消失 use 4.表的过滤 用 Visual FoxPro 菜单法设置显示“学生”表中性别为“男”的学生的学号、姓名和性别 的逻辑表。 操作步骤: (1)打开“学生”表。 (2)单击“显示”→“浏览”命令,进入“浏览”窗口。再单击“表”→“属性”命令, 弹出“工作区属性”对话框,如图 36 所示。 图 36 “工作区属性”对话框 (3)在“数据过滤器”文本框中输入记录的筛选条件(性别="男")。 (4)单击“字段筛选”按钮,弹出“字段选择器”对话框,如图 37 所示。逐一筛选学
号、姓名和性别字段后单击“确定”按钮,返回“工作区属性”对话框。 图 37 “字段选择器”对话框 (5)在“允许访问”区域中选中“字段筛选指定的字段”单选按钮,然后单击“确定” 按钮。 (6)关闭表的“浏览”窗口,然后重新打开“浏览”窗口,此时显示的是“学生”表中 所有男生的学号、姓名和性别字段。 5.表结构的修改和复制及表文件的复制 将学生表的“入校总分”字段名修改为“总分” ,不设置小数位数,修改成功后将学生表 的表结构和表文件分别复制为“学生 1”表和“学生 2”表,并查看。 操作步骤如下: (1)在命令窗口中输入以下命令: use 学生 modify structure (2)在弹出的“表设计器”对话框中修改“入校总分”字段,如图 38 所示。 图 38 “表设计器”对话框 (3)单击“确定”按钮,在弹出的“是否永久修改表结构”对话框中单击“是”按钮。 (4)在命令窗口中继续输入以下命令: copy structure to 学生 1 && 创建学生 1 表,该表具有和学生表相同的表结构 copy to 学生 2 && 创建学生 2 表,该表具有和学生表相同的表结构和表数据 use 学生 1 && 打开学生 1 表
list structure && 查看学生 1 表的表结构,和学生表完全相同 list && 浏览学生 1 表数据,显示为空 use 学生 2 && 打开学生 2 表 list structure && 查看学生 2 表的表结构,和学生表完全相同 list && 浏览学生 2 表数据,数据和学生表也完全相同
实验 2 表的排序、索引与多表关联
一、实验目的 1.了解并掌握表的排序和索引命令的使用。 2.学会有关表的查询、统计等命令的使用。 3.了解工作区的概念和使用,掌握多表的关联与连接命令的使用。 二、实验内容 1.使用 sort 命令对表数据进行物理排序 对学生表中的数据按照入校总分的高低进行降序排序,如果总分相同,则按照学生学号 进行升序排列,新生成的文件名为“总分排序” ,新文件中只保留学号、姓名和入校总分三个 字段。 在命令窗口中输入以下命令并执行: use 学生 browse && 浏览学生表 sort to 总分排序 on 入校总分/d,学号 fields 学号,姓名,入校总分 use 总分排序 && 打开总分排序表 browse && 浏览总分排序表 use 2.独立索引文件的建立、使用与取消 建立独立索引文件,分别按照入校总分的高低对学生表进行逻辑降序和逻辑升序排序。 在命令窗口中输入以下命令并执行: use 学生index on 入校总分 to rxzf1 && 建立独立索引文件 rxzf1.idx index on 入校总分 to rxzf2 && 建立独立索引文件 rxzf2.idx set index to rxzf1 && 使用独立索引文件 rxzf1.idx
list && 显示学生表按照入校总分降序排列
set index to rxzf2 && 使用独立索引文件 rxzf2.idx
list && 显示学生表按照入校总分升序排列 set index to && 取消所有独立索引文件的使用 list && 显示学生表恢复原始排序 use 3.复合索引文件的生成、索引标识的建立、使用与取消 生成复合索引文件,建立索引标识,按照入校总分的高低对学生表进行逻辑升序排序。 在命令窗口中输入以下命令并执行: use 学生
index on 入校总分 tag rxzf && 建立索引标识 rxzf,建成后会自动使用 list && 显示学生表按照入校总分升序排列 set order to && 取消索引标识的使用 list && 显示学生表恢复原始排序 use 4.在表设计器中建立索引标识并设置索引属性 利用表设计器建立关键字为“学号”的候选索引,索引名为 xh;建立关键字为“姓名” 的普通索引,索引名为 xm;建立关键字为“性别dtoc(出生日期) ”的候选索引,索引名 为 xbcsrq。 操作步骤: (1)打开学生表。 (2)打开表设计器,如图 39 所示,并按图示修改表结构。 (3)单击“索引”选项卡,进行如图 310 所示的设置。 (4)单击“确定”按钮,在弹出的“结构更改为永久性更改?”提示框中单击“是” 按钮。 图 39 表设计器 图 310 设置“索引”选项卡 注意:主索引只能是数据库表才能建立。 5.使用 locate 命令对表数据进行查询 在学生表中分别搜索姓名为“张敏”和“王小小”的学生,并显示所有信息。
在命令窗口中输入以下命令: use 学生 locate for 姓名="张敏" && 状态栏显示“记录=8” display && 显示姓名为“张敏”的记录信息 continue && 状态栏显示“已到定位范围末尾” locate for 姓名="王小小" && 状态栏显示“已到定位范围末尾” display && 没有找到姓名为“王小小”的记录 use 6.使用 seek 或 find 命令对表数据进行查询 在学生表中搜索入校总分为 570 分的学生信息。 在命令窗口中输入以下命令: use 学生 index on 入校总分 to rxzf set index to rxzf seek 570 && 状态栏显示“记录:5/10” display use 7.多工作区的操作与多表之间的关联 (1)建立学生表和选课表之间的关联,查询成绩。选课表数据如图 311 所示。 图 311 表“选课.dbf”中的数据 在命令窗口中输入以下命令并执行: use 学生 select b use 选课 && 在第二工作区中打开选课表
index on 学号 to xh && 对选课表以学号字段为关键字建立索引
set index to xh select a
set relation to 学号 into b && 在第一工作区中利用命令与第二工作区中的表建立 && 关联
&& 课程号和成绩字段 (2)建立授课.dbf 与课程.dbf 之间的关联,列出教师号、课程号、课程名及课时。 授课表与课程表数据如图 312 和图 313 所示。 图 312 表授课.dbf 中的数据 图 313 表课程.dbf 中的数据 方案一:课程表作为父表,授课表作为子表。 在命令窗口中输入以下命令并执行: close all use 课程 select 3 use 授课 index on 课程号 to kch set index to kch select 1 set relation to 课程号 into c set skip to c && 指出授课表为一对多关系中的多方 list fields 授课.教师号,授课.课程号,课程名,课时 方案二:授课表作为父表,课程表作为子表。 在命令窗口中输入以下命令并执行: close all use 授课 select 2 use 课程 index on 课程号 to kch1 set index to kch1 select 1 set relation to 课程号 into b list fields 教师号,课程号,课程.课程名,课程.课时 8.表的连接 将课程表和授课表连接成一个新表 kcsk.dbf,要求该新表中包含课程号、课程名、课时和 教师号。 在命令窗口中输入以下命令并执行: use 课程 select 2 use 授课
join with a to kcsk fileds 课程号,a.课程名,a.课时,教师号 for 课程号=a.课程号 use kcsk
实验 3 数据库文件的建立与使用
一、实验目的 1.掌握数据库的创建以及库中表的建立、添加和删除。 2.熟悉数据库操作的各种命令,掌握库中表的设置。 3.了解和掌握数据库的数据字典。 4.掌握表间的关联关系及参照完整性的设置。 二、实验内容 1.数据库的创建和删除 创建数据库“学生管理.dbc” 。 操作步骤: (1)单击“文件”→“新建”命令,弹出“新建”对话框,选中“数据库”单选按钮, 然后单击“新建文件”按钮,如图 314 所示。 (2)弹出“创建”对话框,在“数据库名”文本框中输入“学生管理” ,如图 315 所示, 单击“保存”按钮,进入“数据库设计器”窗口,如图 316 所示。 图 314 “新建”对话框 图 315 “创建”对话框 “学生管理.dbc”数据库就建好了,单击右上角的“关闭”按钮,可以关掉数据库设计器。 如果需要重新打开进行编辑,只需在命令窗口中输入 modify database 命令。一个数据库文件 如果不再使用,可以在命令窗口中输入 delete database 将其删除,删除数据库后数据库中的数 据表都变为自由表。 2.数据库对表的管理 将已存在的表学生.dbf、选课.dbf、课程.dbf、授课.dbf 添加到数据库中,再在数据库中创 建新表成绩.dbf,最后将表授课.dbf 从数据库中移除。图 316 “数据库设计器”窗口 操作步骤: (1)单击“文件”→“打开”命令,弹出“打开”对话框,在“文件类型”下拉列表框 中选择文件类型为“数据库(*.dbc) ” ,在出现的数据库文件中选择“学生管理” ,单击“确定” 按钮,如图 317 所示。 图 317 “打开”对话框 (2)在打开的“数据库设计器”窗口中右击并选择“添加表”选项,弹出“打开”对话 框,选择要添加的第一张表学生.dbf,然后单击“确定”按钮,如图 318 所示。 图 318 为数据库添加表 (3) 学生.dbf 表被成功添加到数据库中, 再重复上述操作, 将选课.dbf、 课程.dbf、 授课.dbf 三张表依次添加到数据库中,如图 319 所示。
图 319 已添加好表的数据库 (4)在“数据库设计器”空白处右击并选择“新建表”选项,弹出“新建表”对话框, 如图 320 所示。 (5)单击“新建表”按钮,在弹出的“创建”对话框的“输入表名”文本框中输入“成 绩” ,如图 321 所示,后面的操作步骤与创建自由表基本相同,读者可自行输入数据。 图 320 “新建表”对话框 图 321 “创建”对话框 (6)要移除表授课.dbf,可在“数据库设计器”中选择授课表,右击并选择“删除”选 项,弹出如图 322 所示的消息提示框。 图 322 消息提示框 (7)单击“移去”按钮,授课.dbf 表从数据库“学生管理.dbc”中移出,还原为自由表, 如果单击“删除”按钮,将从磁盘上删除表授课.dbf。 3.编辑数据字典 (1)为数据库表学生.dbf 的“性别”字段设置字段有效性。要求:规则是性别为男或女; 信息是“性别必须为男或女” ;默认值为“男” 。
操作:在“数据库设计器”中选中学生表,右击并选择“修改”选项,打开数据库表学 生.dbf 的表设计器,选中“性别”字段,进行如图 323 所示的设置。 图 323 “性别”字段的有效性规则设置 其中, “规则”文本框中的内容也可以填写为:性别="男"or 性别="女"。 (2)为数据库表学生.dbf 的“入校总分”字段设置字段有效性。要求:规则是入校总分 小于等于 100 并且入校总分大于等于 0;信息是“入校总分在 0~100 之间” ;默认值是 60。 操作:打开数据库表学生.dbf 的表设计器,选中“入校总分”字段,进行如图 324 所示 的设置。 图 324 “入校总分”字段的有效性规则设置 其中, “规则”文本框中的内容为:入校总分 >=0 and 入校总分<=100; “信息”文本框中 的内容为:入校总分在 0~100 之间。 (3)为表学生.dbf 设置记录有效性规则和触发器。 操作:打开数据库表学生.dbf 的表设计器,单击“表”选项卡,进行如图 325 所示的 设置。
图 325 记录有效性和触发规则设置 设置完成后,系统将对该表的记录进行指定的有效性检查,如果发现不符合规则的记录 或者追加新记录,屏幕上会显示出违反有效性规则的对话框。 4.建立和删除永久关系 在数据库文件中建立表学生.dbf 和选课.dbf 之间的一对多永久关系。 操作步骤: (1)打开学生管理.dbc 的数据库设计器,将表学生.dbf 和选课.dbf 添加进去。 (2)选择学生表作为父表,打开表设计器,在“索引”选项卡中设置“学号”字段为主 索引,如图 326 所示。 图 326 设置主索引 (3)选择选课表为子表,打开表设计器,在“索引”选项卡中设置“学号”字段为普通 索引。 (4)用鼠标拖动父表中的学号字段到子表中的学号字段,然后放开。 (5)完成以上操作后,将出现如图 327 所示的连线,表示为永久关系。
图 327 数据库中表的永久关系 右击连线,在弹出的快捷菜单中选择“删除关系”命令,可解除它们的关系。 5.设置参照完整性 在学生管理.dbc 数据库中建立表学生.dbf、选课.dbf、课程.dbf 的参照完整性。 操作步骤: (1)打开学生管理.dbc 的数据库设计器。 (2)单击“数据库”→“清理数据库”命令清理数据库。 (3)单击“数据库”→“编辑参照完整性”命令,弹出如图 328 所示的对话框。 图 328 参照完整性设置 (4)根据需要正确设置参照完整性。
思考与练习
1.新建表 Zg.dbf,表中字段:职工号(C,8)、姓名(C,6)、性别(C,2)、基本工资(N,6,1)、资 金(N,6,1)、工资总额(N,7,1)。输入如图 329 所示的内容。 2.表 Zg.dbf 建好以后,打开该表并按下列要求分别写出命令序列。 (1)显示表结构和所有记录。 (2)显示第 2 条记录的职工号、姓名、性别字段。图 329 表 Zg.dbf (3)显示最后三条记录。 (4)显示所有男职工的信息。 (5)给姓名为“孙武”的职工打上逻辑删除标志后再彻底删除。 (6)在表的末尾追加一条记录,并且录入数据(职工号:C2034,姓名:朱兵,性别: 男,基本工资:957,奖金:1200) 。 (7)使用 replace 命令计算所有职工的工资总和。 (8)显示工资总和大于 2000 的女职工的信息。 3.在 Zg.dbf 表中的性别字段后添加一个字段“季度”(C,1),并用成批替换命令 replace 将所有记录的该字段值均设置为 2。 4.通过“工作区属性”对话框对 Zg.dbf 表设置逻辑表,显示工资总额高于 2000 的所有 职工的职工号和姓名。 5.将所有的女职工信息复制到新表 Zgw.dbf 中去。 6.为表 Zg.dbf(如图 329 所示)建立:职工号(zgh,候选索引)、姓名(xm,普通索 引)、姓名+性别(xmxb,普通索引)、工资总额(gzze,降序,普通索引)等多项索引。 7.根据如图 330 所示的表成绩.dbf 和学生.dbf 完成如下操作: (1)在成绩.dbf 表中增加一个字段“平均分 N(5,1)” 。 (2)利用成绩.dbf 中的英语和计算机计算平均分并显示如图 331 所示的信息。 图 330 表成绩.dbf 和学生.dbf 图 331 计算平均分 8.新建数据库职工管理.dbc,完成以下操作: (1)将图 329 所示的表 Zg.dbf 添加到数据库中。
(2)为表 Zg.dbf 建立一个主索引,索引名和索引表达式均为“职工号” 。 (3)为表 Zg.dbf 的职工号字段设置有效性规则, “规则”是:left(职工号,1)="C",错误 提示信息是“职工号第一位必须为 C!” 。 (4)为表 Zg.dbf 的性别字段设置有效性规则,规则是:性别="男"or 性别="女",错误提 示信息是“性别必须为男或者女” ,默认值为“男” 。 9.新建数据库成绩管理.dbc,完成以下操作: (1)将图 330 所示的表学生.dbf 和成绩.dbf 添加到数据库中。 (2)通过“学号”字段建立学生表和成绩表之间的永久联系。 10.从数据库职工管理.dbc 中移去表 Zg.dbf(不是删除) 。