第四章数据库及建立.docx
《第四章数据库及建立.docx》由会员分享,可在线阅读,更多相关《第四章数据库及建立.docx(14页珍藏版)》请在冰豆网上搜索。
第四章数据库及建立
第四章VFP数据库及其操作
4.1节数据库的建立
一、概念
数据库:
数据库是一个逻辑上的概念和手段,通过一组系统文件将相互联系的数据库表及其相关的数据库对象统一组织和管理。
数据库文件:
*.dbc
备注文件:
*.dct
索引文件:
*.dcx
二、建立数据库
1在项目管理器中建立
2通过“新建”对话框
3应用命令createdatabase[databasename]
注意:
a在执行该命令前先执行setsafetyon,否则,如果数据库重名就有可能会覆盖已经存在的数据库。
b在执行createdatabase[databasename]前要设置好默认目录,否则它会建立在VFP系统文件夹中。
三、使用数据库
数据库的打开:
在项目管理器中打开
通过“新建”对话框打开
应用命令打开
opendatabase[databasename|?
][exclusive|shared][noupdate][validate]
数据库的修改:
在项目管理器中打开
通过“新建”对话框打开
应用命令修改
modifydatabase[databasename|?
][nowait][noedit]
数据库的删除:
项目管理器中删除
应用命令修改
deletedatabase[databasename|?
][deletetables][recycle]
4.2节建立数据库表
一、复习
1、什么是数据库?
2、项目文件、数据库文件及表文件的后缀名分别为什么?
3、建立数据库时自动建立哪两个文件?
4、建立数据库、打开数据库及修改数据库的命令是什么?
二、建立数据库表
1、在数据库中建立表
表:
在关系数据库中将关系称做表
方法一:
使用数据库设计器
数据库设计器中任意空白区域单击鼠标右键,弹出“数据库”快捷菜单,从中选择新建表。
方法二:
用命令建立表
opendatabase订货管理
creat仓库
✧注意:
如果没有用opendatabase打开数据库,直接使用creat建立的表称为自由表。
1字段名
字段名即关系的属性名或表的列名
自由表字段名最长为10个字符
数据库表字段名最长为128个字符
字段名必须以字母或汉字开头
字段名可以由字母、汉字、数字和下划线组成
字段名中不能包含空格
2字段类型和宽度
✧注意:
没有时间型
3空值
空值就是缺值或没有确定的值,与空(或空白)字符串,数值0等具有不同的意义。
例:
表示价格的字段值,空值表示没有定价,数值0表示免费。
✧注意:
关键字段不允许为空值,允许暂缺的字段允许为空值。
Ctrl+0输入null
4字段有效性组框
5显示组框
三、修改表的结构
1、修改已有的字段
2、增加新字段
3、删除不用的字段
方法一:
使用数据库设计器
在当前数据库设计器中直接用鼠标右键单击要修改的表,然后从快捷菜单中选择“修改”,则打开相应的表设计器。
方法二:
用命令修改表
use仓库表
modifystructure
练习:
1、建一名称为订货管理的项目,其数据库名称为dhgl,它包含p.116页的四张表:
仓库表、职工表、订购单表、供应商表(做题前先建以自己姓名命名的文件夹,并设置vfp的默认目录为该文件夹)
2、用三种方法打开订货管理数据库
命令为:
4、用两种方法删除数据库
命令为:
5、修改表的结构
命令为:
①将仓库表中的字段“面积”改为“仓库面积”
②将仓库表中的“城市”字段宽度增加二
6将职工表中的“工资”字段类型改为数值型,长度为7,小数位数为2
4.3节表的基本操作
复习:
1、关系数据为把什么称为表?
2、什么为自由表?
3、定义字段变量的条件是什么?
定义字段类型和宽度时应注意什么?
新课内容:
表的操作包括向表中添加新的数据记录、删除无用的记录、修改有问题的的记录、查看记录等等。
对表进行操作前要先用use命令打开要操作的表。
一、使用浏览器操作表
4、浏览表
①在项目管理器中将数据库展开至表,并且选择要操作的表,然后单击“浏览”按钮。
②在项目管理器中选择数据库,单击修改出现数据库设计器,选择要操作的表,然后从“数据库”菜单中选择“浏览”,或者右键单击要操作的表,然后选择“浏览”。
5、修改表
将光标定位在要修改的记录和字段上,然后直接修改就行了。
增加记录时可用ctrl+Y追加一条新空记录后输入数据。
6、删除记录
删除分为逻辑删除和物理删除两种。
逻辑删除:
只是在记录旁作删除标记,必要时还可以去掉删除标记恢复记录。
物理删除:
真正从表中删除记录,物理删除是在逻辑删除的基础上进行的。
置删除标记和取消删除标记的命令是ctrl+T
二、使用命令操作表
一般命令格式:
命令动词[范围][条件forwhile][字段fields]
表示范围的词:
recordnumber指定一条记录
next指定当前记录以下的一条或多条记录
all指定所有的记录
rest指定当前记录一直到最后一条记录
1、增加记录命令
append[blank]在表尾部增加记录该命令相当于ctrl+Y
insert[before][blank]在表任意位置插入新记录
2、删除记录命令
置删除标记的命令:
delete[forlexpressinon]
恢复记录的命令:
recall[forlexpressinon]
物理删除有删除标记的记录:
pack物理删除有删除标记的记录
物理删除表中的全部记录:
zap
3、修改记录命令
用edit或change命令交互式修改
用replace命令直接修改
replacefieldname1witheExpressino1[,fieldname2whiteExpressino2]·······
[forlexpressinon]
✧注意:
一次可以修改多个字段
例:
repl面积with500for城市=“北京”
replall面积with面积+100
或repl面积with面积+100all
4、显示记录命令
list
display
区别:
在不使用条件时,list默认显示全部记录,disp默认显示当前记录
5、查询定位命令
绝对定位命令:
goN
gotop
gobottom
相对定位命令:
skipN
N是正或负的整数,默认是1,正数向后移,负数向前移。
条件定位命令:
locatefor表达式
使指针指在满足条件的第一条记录上,继续查找下一满足条件的记录用continue.
练习:
1、在仓库表增加一条记录号为3的记录,其仓库号为WH5,城市为常州,面积为600。
表仓库表尾增加一记录,其仓库号为WH6,城市为广州,面积为300。
(注意用insert命令前必须先用go命令定位)
2、逻辑删除记录号为1,2,3的记录(命令中要含有范围词next),物理删除仓库号为WH3的记录。
3、在仓库表中将城市为北京的面积加100。
4、在屏幕上显示仓库表中面积大于300的记录并且只显示城市和面积字段。
作业:
1、什么是数据库?
项目文件、数据库文件及表文件的后缀名分别为什么?
2、打开、删除订货管理数据库命令是什么?
3、将仓库表中的字段“面积”改为“仓库面积”的命令?
4、关系数据为把什么称为表?
什么是自由表?
5、定义字段变量的条件是什么?
定义字段类型和宽度时应注意什么?
6、在仓库表增加一条记录号为3的记录,其仓库号为WH5,城市为常州,面积为600。
表仓库表尾增加一记录,其仓库号为WH6,城市为广州,面积为300。
(注意用insert命令前必须先用go命令定位)
7、逻辑删除记录号为1,2,3的记录(命令中要含有范围词next),物理删除仓库号为WH3的记录。
8、在仓库表中将城市为北京的面积加100。
9、在屏幕上显示仓库表中面积大于300的记录并且只显示城市和面积字段。
4.4节索引
一、基本概念
VFP中索引是由指针构成的文件,这些指针逻辑上按照索引关键字值进行排序。
索引文件(数据库索引文件.dcx,表索引文件.cdx)和表的.dbf文件记录分别存储。
索引分为:
主索引、候选索引、唯一索引、普通索引
1、主索引
在指定字段或表达式中不允许重复值的索引,这样的索引可以起到主关键字的作用,所以一个表只能创建一个主索引,但可以为它添加候选索引。
(学号、身份证号等无重复值的可以设置为主索引,姓名不一定能设置为主索引,因为可能有同名同姓的人)
2、候选索引
候选索引的字段可以看作是候选关键字,所以一个表可以建立多个候选索引。
3、唯一索引
唯一索引是为了保持同早期版本的兼容性,它的唯一性是指索引项的唯一,而不是字段值的唯一。
它以字段的首次现现值为基础,选定一组记录,并对记录进行排序。
一个表中可建立多个唯一索引。
4、普通索引
它不仅允许字段中出现重复值,并且索引项中也允许出现重复值。
在一个表中可以建立多个普通索引。
总结:
主索引和候选索引具有相同功能,除具有按升序或降序索引的功能外,还具有关键字的特性,它拒绝重复的字段值。
唯一索引和普通索引含义相同,它们只起到索引排序的功能。
唯一索引的唯一是指在使用相应的索引时,重复的索引字段值只有唯一一个值出现在索引项中。
二、在表设计器建立索引
1、单项索引:
在对应的字段上建立上建立了一个索引,索引名与字段名同名,索引表达式就是对应的字段。
在表设计器界面中有“字段”,“索引”,“表”三个选项卡,在字段选项卡中定义字段时可直接指定字段是否有索引项。
2、复合字段索引:
在多个字段上建立索引。
注意:
在一个表上可以建立多个普通索引、多个唯一索引、多个候选索引、但只能建立一个主索引。
主索引用于主关键字字段;候选索引用于那些不作为主关键字但字段值又必须唯一的字段;普通索引用于一般地提高查询速度;唯一索引用于一些特殊的程序设计。
索引可以提高查询速度,但索引也会降低插入、删除和修改等操作的速度。
所以,并不是说索引可以提高查询速度,就在每个字段上都建立一个索引。
三、用命令建立索引
1、命令格式:
Indexon表达式to索引文件名|tag索引名
to索引文件名:
建立一个单独的索引文件,为了与以前版本兼容
tag索引名:
多个索引可以建立在一个索引文件中,这种索引称做结构复合索引,其文件名与相关的表同名,扩展名为.cdx
compt:
只对单独的索引文件起作用,说明建立压缩的.idx文件,复合索引总是压缩的.
Ascending或Descending:
说明建立升序或降序索引,默认是升序.
Unique:
建立唯一索引
Candidate:
说明建立候选索引
Additive:
与建立索引本身无关,说明现在建立索引时是否关闭以前的索引,默认是关闭已经使用的索引,使新建立的索引成为当前索引.
注意:
用命令格式可以建立普通索引、唯一索引(unique)或候选索引(candidate),但没有主索引,主索引在表设计器中指定,指定一个主索引实际就是指定了一个主关键字.
3、索引的分类(按索引组织方式来分)
1单独的.idx索引,是一种非结构单索引
2采用非默认名的.cdx索引,是非结构复合索引
3与表同名.cdx索引,是结构复合索引
结构复合压缩索引文件具有如下特性:
a:
在打开表时自动打开
b:
在同一索引文件中能包含多个索引方案或索引关键字
c:
在添加、更改或删除记录时自动维护索引
四、使用索引
1、打开索引文件
与表名相同的结构索引在打开表时都能够自动打开,但是对于非结构索引必须在使用之前打开索引文件。
格式:
setindexto索引文件
如果是复合索引文件,则默认索引项是它在创建时的第一个索引项,要使用其他索引项还必须具体指定。
2、设置当前索引
setorderto索引序号或索引名[ascending|descending]
索引序号:
是建立索引的先后顺序号
不管索引是按升序或降序建立的,在使用时都可以使用ascending或descending重新指定升序或降序。
3、使用索引快速定位
格式:
seek索引项或索引关键字[order索引序号或索引名][ascending|descending]
4、删除索引
格式:
deletetag索引名
deletetagall删除全部索引
练习:
1、对学生表,在学号上建立主索引
2、在成绩表中增加语文(N/3/0)、数学(N/3/0)、计算机基础(N/3/0)、总分(N/4/0)四个字段,自己输入记录,用replace命令求出每个人的总分
3、在总分字段上建立一个普通索引(索引名为ZF)
4、在各门课成绩上建立升序的普通索引,索引名分别为yw,sx,yy
5、分别设置当前索引为上述四个索引,查看表的排序变化
6、显示总分前三名与后三名学生姓名与各门课程的成绩和总分
7、用seek命令查找“李兵”,显示他的姓名与三门课的成绩
8、删除在三门课上的索引
复习:
1、什么是索引?
索引分成哪四种?
2、建立索引的方法有哪些?
3、怎样设置一个索引为当前索引?
新课:
4.5数据完整性
数据完整性是指保证数据正确的特性,数据完整性一般包括实体完整性、域完整性和参照完整性等。
一、实体完整性与主关键字
实体完整性是保证表中记录惟一的特性
在VFP中用什么来保证记录惟一?
二、域完整性与约束规则
在VFP中用一些约束规则来保证域完整性,域约束规则也称作字段有效性规则,主要用于数据输入正确性检验。
例如:
对数值型字段指定不同的宽度说明不同范围的数值数据类型,从而可以限定字段的取值类型和取值范围。
注意:
“规则”是逻辑表达式,“信息”是字符串表达式,“默认值”的类型则以字段的类型确定。
三、参照完整性与表之间的关联
参照完整性与表之间的联系有关,当插入、删除或修改一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。
1、建立表之间的联系
在数据库设计器中设计表之间的联系时,要在父表中建立主索引,在子表中建立普通索引,然后通过父表的主索引和子表的普通索引建立起两个表之间的联系。
2、设置参照完整性约束
在建立参照之前必须首先清理数据库,所谓清理数据库是物理删除数据库各个表中所有带有删除标记的记录。
参照完整规则包括:
更新规则:
规定了当更新父中的连接字段(主关键字)值时,如何处理相关的子表中的记录。
“级联”:
用新的连接字段值自动修改子表中的相关所有记录
“限制”:
若子表中有相关的记录,则禁止修改父表中的连接字段值
“忽略”:
不作参照完整性检查,可以随意更新父记录的连接字段值
删除规则:
当删除父表中的记录时,如何处理子表中相关的记录
“级联”:
自动删除子表中的相关记录
“限制”:
若子表中有相关的记录,则禁止删除父表中的记录
“忽略”:
不作参照完整性检查,即删除父表的记录时与子表无关
插入规则:
当插入子表中的记录时,是否进行参照完整性检查
“限制”:
若父表中没有相匹配的连接字段值则禁止插入子记录
“忽略”:
可以随意插入子记录
设置了参照完整性以后,进行插入或追加记录的方法几乎都不能用,必须使用SQL的INSERT命令才能插入记录。
练习:
1、用命令打开订货管理数据库及数据库设计器
2、设置职工表中工资字段的域完整性,使每个人的基本工资在0~1500之间
3、设置职工表与订购单表的参照完整性,其中更新规则为忽略,删除规则为级联,插入规则为限制
复习:
1、数据完整性分成哪几种?
2、vfp中怎样实现这些完整性?
在设置时应该注意什么问题?
3、参照完整性中插入规则与更新规则及删除规则有何区别?
新课:
4.6自由表
一、数据表与自由表
自由表:
不属于任何数据库的表称为自由表。
建立自由表的方法
1、在项目管理器中建自由表
2、利用菜单建自由表
3、用命令建自由表
数据库表与自由表的不同点(p.106-107)
二、将自由表添加到数据库
1、在项目管理器中添加自由表使之成为数据库表
2、用命令添加自由表
ADDtable自由表名[指定一个长表名]
注意:
一个表只能属于一个数据库,当一个自由表添加表某个数据库后就不再是自由表了,所以不能把已经属于某个数据库的表添加到当前数据库,否则会有出错提示。
三、把表从数据库移出
1、在项目管理器中将表移出,使之成为自由表
2、用命令将表移出
removetable表名[delete][recycle]
delete:
把表从数据库中移出,并将其从磁盘上删除
recycle:
把表从数据库中移出放入回收站
注意:
把表从数据库移出会影响到当前数据库中与该表有联系的其他表。
表一旦移出了数据库,长表名将不可再使用。
练习:
1、将供应商表移出dhgl数据库
2、分别打开数据库表及自由表的表设计器,观察它们之间的区别
复习:
1、数据库表与自由表有何区别与联系?
4.7多个表的同时使用
1、多个工作区:
在每个工作区中可以打开一个表,但在一个工作区中不能同时打开多个表。
如果要同时打开多个表,则需要在不同的工作区中打开不同的表。
系统总是默认在第1个工作区中工作,如果要指定在其他工作区工作可用命令:
select工作区号|表名|表的别名
工作区号是一个大于等于0的数字,工作区号最小是1,最大是32767,前10个工作区中默认别名是工作区字母A到J,其余的则用W11到W32767表示。
select0表示选择编号最小的可用工作区,即尚未使用的工作区
select1
use职工表
select3
use仓库表
select0
use订购单表
use供应商表in4
在一个工作区中可以直接利用表名或表的别名引用另一个表中的数据,方法是在别名后加上“.”或“->”然后跟上字段。
职工表.职工号A->职工号
use仓库表aliasck
ck就是学生的别名
ck.仓库号,ck->仓库号
2、使用不同工作区的表
除了用SELECT命令切换工作区使用不同的表外,也允许在一个工作区中使用另外一个工作区中的表,可使用短语:
in工作区号|表名|表的别名
当前打开的是2号工作区,学生表在1工作区打开
seek‘WH1’order仓库号in仓库表
?
A.仓库号,仓库号
练习:
显示职工表中职工号为E3的仓库号以及仓库号所在的城市、面积
(即在同一行显示职工号,仓库号,城市,面积三个字段)
1、表之间的关联
关联:
能控制表间记录指针关系的临时联系
建立关联:
SETRELATIONTO索引关键字INTO工作区号|表名|表的别名
注意:
一般在主表公共字段建一主索引,子表公共字段上建一普通索引
取消关联:
SETRELATIONOFFINTO工作区号关闭某一关联
setrelationto关闭所有的关联
例:
opendatabasedhgl
use仓库表in1order仓库号
use职工表in2order仓库号
setrelationto仓库号into职工表
练习:
显示职工表中职工号为E3的仓库号以及仓库号所在的城市、面积
(即在同一显示仓库号,城市,面积三个字段)
4.8排序
索引可以使用户按照顺序浏览或查找表中的记录,这时的顺序是逻辑的,是通过索引关键字实现的。
VFP中的物理排序命令用sort
格式:
sortto新表名on字段名1[/A|/D|/C],[字段名2[/A|/D|/C]]···[descending|ascending][for逻辑表达式]
/C:
说明排序时不区分大小写字母,默认区分
descending|ascending指出除用/A或/D指明了排序方式的字段外,所有其他排序字段按升序或降序。
for逻辑表达式:
符合条件的才进行排序。
注意:
设置排序后的表是一个自由表