1、本 节 内 容2.5表的索引表的索引 兴隆职教中心兴隆职教中心 詹亚萍詹亚萍 2016.05.19 第二章第二章 数据库与表的基本操作数据库与表的基本操作 表中记录的存储顺序由数据输入的前后顺序决定,表中记录的存储顺序由数据输入的前后顺序决定,以以记录号记录号标识,称为记录的标识,称为记录的物理顺序物理顺序。执行。执行LIST命令命令就可以看到刻录号。就可以看到刻录号。索引是索引是根据根据表中的某些表中的某些字段或表达式字段或表达式的值,建立一的值,建立一个按个按逻辑顺序逻辑顺序排列记录的索引文件。排列记录的索引文件。 索引不改变表中记录的物理顺序,而是另外建立一索引不改变表中记录的物理顺序,
2、而是另外建立一个基于索引表达式值的记录号列表。个基于索引表达式值的记录号列表。 索引可以索引可以加快查找的速度加快查找的速度;此外,如果要;此外,如果要建立表间建立表间联系联系,则必须先对建立联系的字段建立索引。,则必须先对建立联系的字段建立索引。2.5表的索引表的索引 VFP提供了提供了4种类型的索引种类型的索引:主索引、候选索引、普通索引和惟主索引、候选索引、普通索引和惟一索引。一索引。 1主索引主索引 作为主索引的关键字值是作为主索引的关键字值是惟一惟一的,不允许重复。表中可能不的,不允许重复。表中可能不只一个字段能惟一地确定一条记录,但一个表只能有一个主索只一个字段能惟一地确定一条记录
3、,但一个表只能有一个主索引,引,只有数据库表才能建立主索引只有数据库表才能建立主索引,自由表不能建立主索引。,自由表不能建立主索引。主索引通常作为主索引通常作为“一对一一对一”或或“一对多一对多”联系的联系的“一方一方”。 2候选索引候选索引 候选索引的关键字值也必须是候选索引的关键字值也必须是惟一惟一的,一个表可以建立多个的,一个表可以建立多个候选索引,数据库表和自由表都可以建立候选索引。当数据库候选索引,数据库表和自由表都可以建立候选索引。当数据库表无主索引时,可以指定一个候选索引作为表无主索引时,可以指定一个候选索引作为“一对一一对一”或或“一一对多对多”联系的联系的“一方一方”。2.5
4、.12.5.1索引的类型索引的类型 例如,假设在例如,假设在“学生档案学生档案.dbf”表中,有表中,有“身份证号身份证号”及及“学号学号”字段,可将字段,可将“身份证号身份证号”字段设置为主索引,将字段设置为主索引,将“学号学号”字段设字段设置为候选索引。置为候选索引。3普通索引普通索引普通索引允许关键字出现重复值,数据库表和自由表都可以建普通索引允许关键字出现重复值,数据库表和自由表都可以建立普通索引,一个表可以建立多个普通索引。普通索引通常作为立普通索引,一个表可以建立多个普通索引。普通索引通常作为“一对多一对多”联系的联系的“多方多方”。4惟一索引惟一索引惟一索引是指索引项惟一,但允许
5、索引关键字值不惟一,当出惟一索引是指索引项惟一,但允许索引关键字值不惟一,当出现重复值时,只有第一个关键字值的记录有效,而忽略其他重复现重复值时,只有第一个关键字值的记录有效,而忽略其他重复值的记录。惟一索引是为了兼容早期的版本而设置的。值的记录。惟一索引是为了兼容早期的版本而设置的。索引文件的类型是关于索引存储的问题。索引文件的类型是关于索引存储的问题。 结构化复合索引文件结构化复合索引文件 复合复合索引文件索引文件 (与表文件同名,自动打开和维护)(与表文件同名,自动打开和维护) (.CDX) 非结构化复合索引文件非结构化复合索引文件索引文件索引文件 (与表文件不同名,不能自动打开和维护)
6、(与表文件不同名,不能自动打开和维护) 独立独立索引文件(索引文件(.IDX) (文件名由用户指定,不能自动打开和维护)(文件名由用户指定,不能自动打开和维护) 1复合索引文件复合索引文件复合索引文件是包含一个或多个索引的文件复合索引文件是包含一个或多个索引的文件,其扩展名为其扩展名为.CDX。复合索引文件又分为结构化复合索引文件(与表文件同名)和非复合索引文件又分为结构化复合索引文件(与表文件同名)和非结构化复合索引文件(与表文件不同名)。结构化复合索引文件(与表文件不同名)。2.5.22.5.2索引文件的类型索引文件的类型表文件打开时,结构化复合索引文件随之表文件打开时,结构化复合索引文件
7、随之自动打开自动打开,表文件关,表文件关闭时,结构化复合索引文件随之关闭。闭时,结构化复合索引文件随之关闭。非结构化复合索引文件与表不同名,其名称由用户指定。只有非结构化复合索引文件与表不同名,其名称由用户指定。只有指定其名称才能打开非结构化复合索引文件。指定其名称才能打开非结构化复合索引文件。2独立索引文件独立索引文件独立索引文件只存放一个索引,其扩展名为独立索引文件只存放一个索引,其扩展名为.IDX。独立索引文件的名称由用户定义;一个表文件可以建立多个独独立索引文件的名称由用户定义;一个表文件可以建立多个独立索引文件;独立索引文件不会随着表文件打开而自动打开。立索引文件;独立索引文件不会随
8、着表文件打开而自动打开。3索引文件的小结索引文件的小结“复合复合”是指一个索引文件中包含多个索引(是指一个索引文件中包含多个索引(索引不是文件索引不是文件)。)。“独立独立”是指一个索引文件中只包含一个索引(是指一个索引文件中只包含一个索引(每个索引都是每个索引都是文件文件) 。VFP默认使用结构化复合索引文件,非结构化复合索引文件默认使用结构化复合索引文件,非结构化复合索引文件几乎没有用到。几乎没有用到。独立索引文件是早期版本的数据库管理系统的索引文件,独立索引文件是早期版本的数据库管理系统的索引文件,VFP为了兼容早期版本的数据库管理系统而保留了独立索引文件。为了兼容早期版本的数据库管理系
9、统而保留了独立索引文件。结构化复合索引文件是索引文件应用的重点。结构化复合索引文件是索引文件应用的重点。4索引的数据更新索引的数据更新若表文件打开,索引文件也打开,表数据的更新会反映到索若表文件打开,索引文件也打开,表数据的更新会反映到索引中,从而保证表与索引的数据同步匹配。引中,从而保证表与索引的数据同步匹配。若表文件打开,索引文件没有打开,表数据的更新不会反映若表文件打开,索引文件没有打开,表数据的更新不会反映到索引中,从而导致表与索引数据不相匹配。到索引中,从而导致表与索引数据不相匹配。鉴于以上理由,鉴于以上理由,VFP 6.0默认将建立的索引存放在结构化复合默认将建立的索引存放在结构化
10、复合索引文件中。在索引文件中。在“表设计器表设计器”中建立的索引是结构化复合索引文中建立的索引是结构化复合索引文件。件。 1建立结构复合索引建立结构复合索引 格式:格式:INDEX ON TAG FOR ASCENDING | DESCENDING【UNIQUE|CANDIDATE】 功能:对当前的表文件,按功能:对当前的表文件,按的值建立索引文件。的值建立索引文件。 说明:说明: ASCENDING或或DESCENDING:指定索引按升序或降序排列,:指定索引按升序或降序排列,默认升序默认升序。 UNIQUE或或CANDIDATE:指定索引类型是唯一索引还是候选索引,指定索引类型是唯一索引还
11、是候选索引,默认普通索引默认普通索引2.5.12.5.1表的索引命令表的索引命令【例例1】在职工简况表在职工简况表Zgjk.dbf中,使用命令建立中,使用命令建立“部门部门”字段建立索引,索引名称为:字段建立索引,索引名称为:bm,降序排列。,降序排列。命令窗口中,键入以下命令并执行。命令窗口中,键入以下命令并执行。USE Zgjk &打开职工简况表打开职工简况表INDEX ON 部门部门 TAG bm DESC &建立索引建立索引BROWSE&在浏览窗口中显示表记录在浏览窗口中显示表记录【练习练习1】在职工简况表在职工简况表Zgjk.dbf中,使用命令建立中,使用命令建立“性别性别”建立索引
12、,索引名称为:建立索引,索引名称为:xbINDEX ON 性别性别 TAG xb【练习练习2】在职工简况表在职工简况表Zgjk.dbf中,使用命令建立中,使用命令建立“基本基本工资工资”建立索引,索引名称为:建立索引,索引名称为:jbgz,降序排列。,降序排列。INDEX ON 基本工资基本工资 TAG jbgz DESC【练习练习3】在职工简况表在职工简况表Zgjk.dbf中,使用命令建立中,使用命令建立“出生出生日期日期”建立建立候选候选索引,索引名称为:索引,索引名称为:csrq,降序排列。,降序排列。 INDEX ON 出生日期出生日期TAG csrq DESC CAND【2013高考
13、高考】 以以“图书编号图书编号”为关键字建立降序的候选索为关键字建立降序的候选索引,索引名为引,索引名为BH。(用用Visual FoxPro命令)命令)INDEX ON 图书编号图书编号 TAG bhCANDIDATE【例例2】在职工简况表在职工简况表Zgjk.dbf中,使用命令建立中,使用命令建立“部门部门”和和“基本工资基本工资”两个字段的复合索引,索引名称为:部门工两个字段的复合索引,索引名称为:部门工资,要求先按资,要求先按“部门部门”降序排列,当降序排列,当“部门部门”相同时,按相同时,按“基本工资基本工资”降序排列。降序排列。在命令窗口中,键入以下命令并执行。在命令窗口中,键入以
14、下命令并执行。USE Zgjk &打开职工简况表打开职工简况表INDEX ON 部门部门+STR(基本工资基本工资) TAG 部门工资部门工资 DESC&建立复合索引建立复合索引BROWSE&在浏览窗口中显示表记录在浏览窗口中显示表记录注意:表达式通常用字符串运算符注意:表达式通常用字符串运算符“+”将几个字段连接,将几个字段连接,数据类型不同时必须用函数转换为相同的数据类型数据类型不同时必须用函数转换为相同的数据类型【练习练习1】在职工简况表在职工简况表Zgjk.dbf中,建立中,建立“部门部门”和和“性性别别”两个字段的复合索引,索引名称为:两个字段的复合索引,索引名称为:bmxb.IND
15、EX ON 部门部门+性别性别 TAG bmxb【练习练习2】在职工简况表在职工简况表Zgjk.dbf中,建立中,建立“部门部门”和和“出出生日期生日期”两个字段的复合索引,索引名称为:两个字段的复合索引,索引名称为:bmcs,要求先,要求先按按“部门部门”降序排列,当降序排列,当“部门部门”相同时,按相同时,按“出生日期出生日期”降序排列。降序排列。INDEX ON 部门部门+DTOC(出生日期出生日期) TAG bmcs DESC 2建立非结构复合索引建立非结构复合索引 格式:格式:INDEX ON TAG OF .CDX FOR ASCENDING | DESCENDING【UNIQUE
16、|CANDIDATE】 功能:对当前的表文件,按功能:对当前的表文件,按的值建立索引文件。的值建立索引文件。 说明:说明: ASCENDING或或DESCENDING:指定索引按升序或降序排列,:指定索引按升序或降序排列,默认升序默认升序。 UNIQUE或或CANDIDATE:指定索引类型是唯一索引还是候选索引,指定索引类型是唯一索引还是候选索引,默认普通索引默认普通索引2.5.12.5.1表的索引命令表的索引命令【例例3】在职工简况表在职工简况表Zgjk.dbf中,使用命令建立中,使用命令建立“部门部门” 字段的建立唯一索引,索引名称为:部门,要求按字段的建立唯一索引,索引名称为:部门,要求
17、按“部门部门”降序排列,降序排列,复合索引文件名为复合索引文件名为BM.CDX。在命令窗口中,键入以下命令并执行。在命令窗口中,键入以下命令并执行。USE Zgjk &打开职工简况表打开职工简况表INDEX ON 部门部门 TAG 部门部门 OF BM.CDX DESC UNIQUE&建立索引建立索引BROWSE&在浏览窗口中显示表记录在浏览窗口中显示表记录【练习练习1】在职工简况表在职工简况表Zgjk.dbf中,建立中,建立 “性别性别” 字段为字段为关键字,建立索引名称为:关键字,建立索引名称为:xb的候选索引,按性别降序排列,的候选索引,按性别降序排列,复合索引文件名为复合索引文件名为C
18、C.CDXINDEX ON 性别性别 TAG xbFOR CC.CDX DESC CAND【练习练习2】在职工简况表在职工简况表Zgjk.dbf中,建立中,建立“部门部门”和和“性性别别”两个字段的复合索引,索引名称为:两个字段的复合索引,索引名称为:bmxb,要求先按,要求先按“部门部门”降序排列,当降序排列,当“部门部门”相同时,按相同时,按“性别性别”降序排降序排列列,复合索引文件名为复合索引文件名为BMXB.CDX。INDEX ON 部门部门+性别性别 TAG bmxb OF BMXB.CDX DESC【2015高考高考】 使用使用“order_list”表,建立以表,建立以“订单号订
19、单号”为为关键字,名称为关键字,名称为“订单订单”的的 降序的唯一索引,复合索引文件名降序的唯一索引,复合索引文件名为为DD.CDX。(用。(用Visual FoxPro命令)命令)INDEX ON 订单号订单号 TAG 订单订单 OF DD.CDX DESC UNIQUE【2014高考高考】以以“职工号职工号”为关键字建立降序的唯一索引,索为关键字建立降序的唯一索引,索引名为引名为ZHG,索引文件名,索引文件名ZHGGL.CDX。(用。(用Visual FoxPro命命令)令)INDEX ON 职工号职工号 TAG ZHG OF ZHGGL.CDX DESC UNIQ【2012高考高考】 以
20、系部名称以系部名称+年龄降序建立唯一索引的复合索年龄降序建立唯一索引的复合索引,索引名为引,索引名为XN,索引文件名为,索引文件名为XB.CDX。(用。(用Visual FoxPro命令)命令)INDEX ON 系部名称系部名称+str(年龄)(年龄)TAG XN OF XB.CDX DESC UNIQUE【2011高考高考】使用使用“学生学生”表,建立以表,建立以“出生日期出生日期”为关键字,为关键字,索引名为索引名为“生日生日”的升序的唯一索引,复合索引文件名为的升序的唯一索引,复合索引文件名为DA.cdx。(用。(用Visual FoxPro命令)命令)INDEX ON 出生日期出生日期
21、TAG 生日生日 OF DA.CDX UNIQUE 3建立索引建立索引建立单索引建立单索引 格式:格式:INDEX ON TO .IDX FOR UNIQUECOMPACT功能:对当前的表文件,按功能:对当前的表文件,按的值建立索引文件。的值建立索引文件。 说明:说明:UNIQUE:指定索引类型是唯一索引还是候选索引指定索引类型是唯一索引还是候选索引 COMPACT:指定索引文件为压缩文件指定索引文件为压缩文件2.5.12.5.1表的索引命令表的索引命令【例例3】在职工简况表在职工简况表Zgjk.dbf中,使用命令建立中,使用命令建立“部门部门” 字段为关键字,建立索引字段为关键字,建立索引文
22、件名为文件名为BM.IDX。在命令窗口中,键入以下命令并执行。在命令窗口中,键入以下命令并执行。USE Zgjk &打开职工简况表打开职工简况表INDEX ON 部门部门 TO BM.IDX&建立索引建立索引BROWSE&在浏览窗口中显示表记录在浏览窗口中显示表记录【2010高考高考】 按部门和工资为关键字建立索引文件按部门和工资为关键字建立索引文件BMGZIDXINDEX ON 部门部门+str(工资)(工资)TO BMGZ.IDX索引目的是建立表间联系和加快数据检索。索引目的是建立表间联系和加快数据检索。数据检索的本质是将记录指针定位到目标记录,并没有显示数据检索的本质是将记录指针定位到目
23、标记录,并没有显示记录数据的内容。找到目标记录后,还要使用记录数据的内容。找到目标记录后,还要使用DISP命令,才能命令,才能看到目标记录的内容。看到目标记录的内容。常用的数据检索命令有:常用的数据检索命令有:SEEK、FIND和和LOCATE。SEEK和和FIND命令是索引检索,也就是说,在使用命令是索引检索,也就是说,在使用SEEK和和FIND命令之前要先索引。命令之前要先索引。LOCATE命令是条件检索。命令是条件检索。2.5.22.5.2数据检索数据检索索引目的是建立表间联系和加快数据检索。索引目的是建立表间联系和加快数据检索。数据检索的本质是将记录指针定位到目标记录,并没有显示数据检
24、索的本质是将记录指针定位到目标记录,并没有显示记录数据的内容。找到目标记录后,还要使用记录数据的内容。找到目标记录后,还要使用DISP命令,才能命令,才能看到目标记录的内容。看到目标记录的内容。常用的数据检索命令有:常用的数据检索命令有:SEEK、FIND和和LOCATE。SEEK和和FIND命令是索引检索,也就是说,在使用命令是索引检索,也就是说,在使用SEEK和和FIND命令之前要先索引。命令之前要先索引。LOCATE命令是条件检索。命令是条件检索。4.3.54.3.5数据检索数据检索1索引检索索引检索(1)SEEK命令命令格式:格式:SEEK 功能:将记录指针移到与功能:将记录指针移到与
25、值相匹配的记录。值相匹配的记录。说明:说明:1)要先索引后检索。)要先索引后检索。2)SEEK命令中的命令中的与索引表达式必须相同。与索引表达式必须相同。【例例420】在职工简况表中,使用在职工简况表中,使用SEEK命令查找并显示家电部门命令查找并显示家电部门的职工信息。的职工信息。USE ZgjkINDEX ON 部门部门 TAG 部门部门&刚建的索引是打开的刚建的索引是打开的SEEK 家电家电 &若缺省双引号,家电将被理解为变量名若缺省双引号,家电将被理解为变量名DISP&显示第显示第1 1个目标记录内容个目标记录内容SKIP&指针移到下一个目标记录指针移到下一个目标记录DISP&显示第显
26、示第2 2个目标记录内容个目标记录内容(2)FIND命令命令格式:格式:FIND |功能:将记录指针移到与功能:将记录指针移到与或或值值 相匹配的记录。相匹配的记录。说明:说明:1)要先索引后检索。)要先索引后检索。2)FIND命令中的命令中的或或与索引表达式必须相同。与索引表达式必须相同。3)FIND命令中命令中定界符可省略。定界符可省略。4)由于)由于SEEK命令的功能全面覆盖命令的功能全面覆盖FIND命令的功能。一些书籍命令的功能。一些书籍不再介绍不再介绍FIND命令。命令。【例例421】在职工简况表中,使用在职工简况表中,使用FIND命令查找并显示命令查找并显示家电部门的职工信息。家电
27、部门的职工信息。USE ZgjkSET ORDER TO 部门部门 &指定主控索引指定主控索引FIND 家电家电 &字符串定界符可省略字符串定界符可省略DISP &显示第显示第1 1个目标记录个目标记录SKIP &指针下移到下一个目标记录指针下移到下一个目标记录DISP &显示第显示第2 2个目标记录个目标记录2条件定位条件定位格式:格式:LOCATE 范围范围 FOR|WHILE CONTINUE功能:功能:LOCATE命令将记录指针定位在满足条件的第一个目标命令将记录指针定位在满足条件的第一个目标记录。记录。CONTINUE命令将记录指针指向下一条满足条件的目标命令将记录指针指向下一条满足
28、条件的目标记录。记录。说明:说明:(1)若缺省范围子句,则默认若缺省范围子句,则默认ALL。(2)若没有满足条件的记录,则记录指针指向文件结束位置。)若没有满足条件的记录,则记录指针指向文件结束位置。【例例422】在职工简况表中,查找在职工简况表中,查找1981年出生的职工信息。年出生的职工信息。USE ZgjkLOCATE FOR YEAR(出生日期出生日期)=1981 &指针指针定位定位到到第第1 1个目标记录个目标记录DISP&显示第显示第1 1个目标记录个目标记录CONTINUE&指针指针定位定位到下一个目标记录到下一个目标记录DISP&显示第显示第2 2个目标记录个目标记录? REC
29、NO() , EOF() 9 .T.4.4数据完整性数据完整性1实体完整性的概念实体完整性的概念实体完整性即表中实体完整性即表中记录的惟一性记录的惟一性,在,在VFP中通过中通过主关键字主关键字或或候选关键字候选关键字保证记录的惟一,即保证实保证记录的惟一,即保证实体完整性。体完整性。实体完整性是通过在实体完整性是通过在“表设计器表设计器”的的“字段字段”选选项卡中设置主关键字段的字段有效性来实现的。项卡中设置主关键字段的字段有效性来实现的。4.4.14.4.1实体完整实体完整 2 设置实体完整性设置实体完整性 【例例423】使用命令使用命令制作职工简况表制作职工简况表Zgjk.dbf(“职工
30、号职工号”字段已设置为主关键字)的副本字段已设置为主关键字)的副本Zgjk3.dbf;创建数据库:职;创建数据库:职工工2.dbc,将,将Zgjk3.dbf表添加到数据库中;打开数据库表表添加到数据库中;打开数据库表Zgjk3.dbf,设置,设置“显示显示”选项组,要求:选项组,要求:“职工号职工号”字段不字段不能为空,否则将弹出提示信息:主关键字不能为空能为空,否则将弹出提示信息:主关键字不能为空!。在命令窗口中,键入以下命令并执行。在命令窗口中,键入以下命令并执行。USE ZgjkCOPY TO Zgjk3 &将当前表文件拷贝到将当前表文件拷贝到Zgjk3.dbfCREATE DATABA
31、SE 职工职工2&创建数据库文件创建数据库文件ADD TABLE Zgjk3&向当前数据库添加表文件向当前数据库添加表文件USE Zgjk3&打开表文件打开表文件MODIFY STRUCTURE&修改表结构修改表结构图图443设置实体完整性设置实体完整性 执行上述命令,打开表设计器如图执行上述命令,打开表设计器如图443所示,可以看到:数据所示,可以看到:数据库表比自由表的库表比自由表的“表设计器表设计器”具有更多的选项。其中,具有更多的选项。其中,“显示显示”、“字段有效性字段有效性”、“匹配字段类型到类匹配字段类型到类”和和“字段注释字段注释”是数据是数据库表的库表的“表设计器表设计器”所
32、特有的四个选项组所特有的四个选项组。 根据题意,进行如下操作:根据题意,进行如下操作:(1)在)在“表设计器表设计器”的的“字段字段”选项卡中,选定选项卡中,选定“职工号职工号”字段。字段。(2)在)在“字段有效性字段有效性”选项组的选项组的“规则规则”框中输入:框中输入: .NOT.EMPTY(职工号职工号)(3)在)在“信息信息”框中输入:框中输入:主关键字不能为空主关键字不能为空!,如图,如图443所示。所示。 说明:设置字段有效性之后,当输入的数据记录违反字段说明:设置字段有效性之后,当输入的数据记录违反字段有效性规则的时,显示出错提示信息。有效性规则的时,显示出错提示信息。 域完整性
33、是指字段取值的合理性域完整性是指字段取值的合理性。建立表结构时,定义了字段的。建立表结构时,定义了字段的类型和宽度,但这不能保证字段取值的合理性。域的约束规则也称类型和宽度,但这不能保证字段取值的合理性。域的约束规则也称为字段有效性规则。为字段有效性规则。 4.4.24.4.2域完整性域完整性 1设置域完整性设置域完整性 域完整性在域完整性在“表设计器表设计器”的的“字段字段”选项卡中设置。选项卡中设置。 【例例424】打开数据库表打开数据库表Zgjk3.dbf,设置基本工资的值不,设置基本工资的值不少于少于600。若违反规则,则提示:基本工资不小于零。若违反规则,则提示:基本工资不小于零!。
34、 操作步骤如下。操作步骤如下。(1)打开数据库表)打开数据库表Zgjk3.dbf。(2)打开)打开“表设计器表设计器”,选择,选择“字段字段”选项卡。选项卡。 (3)选定)选定“基本工资基本工资”,在,在“字段有效性字段有效性”选项组的选项组的“规规则则”框中输入:框中输入:基本工资基本工资=0。 (4)在)在“信息信息”框中输入:框中输入:基本工资不小于零基本工资不小于零!,如图,如图443所示。所示。 (5)单击)单击“确定确定”按钮,关闭按钮,关闭“表设计器表设计器”,保存所作的,保存所作的设置。设置。 图图443设置域完整性设置域完整性 2设置字段默认设置字段默认设置字段默认可以减少记
35、录数据的录入量。设置字段默认可以减少记录数据的录入量。【例例425】职工简况表职工简况表Zgjk3.dbf中,大多数职工已婚。为中,大多数职工已婚。为了减少记录数据的录入量,将了减少记录数据的录入量,将“婚否婚否”字段的默认值设置为字段的默认值设置为.T.。 图图444设置字段默认值设置字段默认值操作步骤如下。操作步骤如下。(1)打开数据库表)打开数据库表Zgjk3.dbf(2)选择)选择“显示显示”菜单中的菜单中的“表表设计器设计器”命令,打开命令,打开“表设计器表设计器”的的“字段字段”选项卡。选项卡。(3)选定)选定“婚否婚否”字段,在字段,在“字字段有效性段有效性”选项组的选项组的“默
36、认值默认值”框框中输入:中输入:.T. ,如图,如图444所示。所示。1表间联系类型表间联系类型(1)永久联系)永久联系 在在“数据库设计器数据库设计器”中建立的表间联系为永久联系,永久中建立的表间联系为永久联系,永久联系作为数据库的对象长期保存在数据库中,随着数据库打联系作为数据库的对象长期保存在数据库中,随着数据库打开而打开,关闭而关闭。永久联系主要用于检查数据库表间开而打开,关闭而关闭。永久联系主要用于检查数据库表间参照完整性和设置数据库环境。参照完整性和设置数据库环境。永久联系不能实现不同工作永久联系不能实现不同工作区中表的记录指针的联动区中表的记录指针的联动。(2)临时联系)临时联系
37、 临时联系是在临时联系是在VFP运行期间,使用运行期间,使用“窗口窗口”菜单中的菜单中的“数数据工作期据工作期”命令或命令或SET RELATION命令建立的联系。临时联命令建立的联系。临时联系随着数据库关闭而取消。临时联系能够实现不同工作区中系随着数据库关闭而取消。临时联系能够实现不同工作区中表的表的记录指针的联动记录指针的联动。4.4.34.4.3参照完整性与表间联系参照完整性与表间联系 2 创建表间永久联系创建表间永久联系 创建表间联系的步骤是:先建立两个表的联系字段的创建表间联系的步骤是:先建立两个表的联系字段的索引索引,然,然后在后在“数据库设计器数据库设计器”窗口中,建立表间联系。
38、窗口中,建立表间联系。(1)建立联系字段的索引)建立联系字段的索引 为了建立数据库表之间的联系,首先要在各个表中为了建立数据库表之间的联系,首先要在各个表中建立联系字建立联系字段的索引段的索引。 若要建立两表之间的若要建立两表之间的一对一联系一对一联系,两个表的联系字段必须是,两个表的联系字段必须是主索引或者候选索引主索引或者候选索引(具有惟一性)。(具有惟一性)。 若要建立两表之间的若要建立两表之间的一对多联系一对多联系,作为,作为“一一”方方的父表的索引的父表的索引必须是必须是主索引或者候选索引主索引或者候选索引(具有惟一性),作为(具有惟一性),作为“多多”方方的子的子表的索引必须是表的
39、索引必须是普通索引普通索引(允许出现重复值)。(允许出现重复值)。 (2)建立表间联系)建立表间联系 在在“数据库设计器数据库设计器”窗口中,打开窗口中,打开“职工业绩职工业绩”数据库。数据库。 按住按住鼠标左键把一个表的索引拖放到另一个表的索引上,两表之间就鼠标左键把一个表的索引拖放到另一个表的索引上,两表之间就出现了一条关系连线,其中不带分岔的一端表示联系中的出现了一条关系连线,其中不带分岔的一端表示联系中的“一一”方,带有三分岔的一端表示联系中的方,带有三分岔的一端表示联系中的“多多”方,如图方,如图445所示。所示。 图图445建立表间永久联系建立表间永久联系 (3)编辑表间联系)编辑
40、表间联系 1)鼠标左键单击表之间的连线,连线变粗,表示选定了该连)鼠标左键单击表之间的连线,连线变粗,表示选定了该连线。线。 2)鼠标右键单击选定的连线,弹出快捷菜单。)鼠标右键单击选定的连线,弹出快捷菜单。 3)若选择)若选择“删除关系删除关系”命令,则取消表间的联系;若选择命令,则取消表间的联系;若选择“编辑关系编辑关系”命令,则打开命令,则打开“编辑关系编辑关系”对话框。对话框。 2设置参照完整性设置参照完整性 数据库表建立了表间永久联系后,表之间的记录就存在一定数据库表建立了表间永久联系后,表之间的记录就存在一定的联系。的联系。 设置参照完整性是为了控制表之间的记录一致性。设置参照完整
41、性是为了控制表之间的记录一致性。当修改、当修改、删除、插入记录时,如果建立了参照完整性,删除、插入记录时,如果建立了参照完整性,VFP将检查操作将检查操作的合法性,以保持已建立的表间联系的正确性。的合法性,以保持已建立的表间联系的正确性。设置参照完整性的步骤如下:设置参照完整性的步骤如下:(1)在各个数据库表中建立联系字段的索引。)在各个数据库表中建立联系字段的索引。(2)建立数据库表之间的永久联系。)建立数据库表之间的永久联系。(3)清理数据库清理数据库。 执行执行“数据库数据库”菜单中的菜单中的“清理数据库清理数据库”命令,物理删命令,物理删除数据库各个表中所有带有删除标记的记录。除数据库
42、各个表中所有带有删除标记的记录。(4)设置参照完整性的约束条件)设置参照完整性的约束条件 鼠标右击表间连线,在弹出的快捷菜单中选择鼠标右击表间连线,在弹出的快捷菜单中选择“编辑参编辑参照完整性照完整性”命令,打开命令,打开“编辑参照完整性生成器编辑参照完整性生成器”对话框,对话框,如图如图446所示。所示。 分别在分别在“更新规则更新规则”、“删除规则删除规则”和和“插入规则插入规则” 选项卡中,设置选项卡中,设置“级联则级联则”、“限制限制”或或“忽略忽略”。当。当进行记录的修改、删除和插入操作时,进行记录的修改、删除和插入操作时,VFP根据参照完根据参照完整性作出的合法性检查。整性作出的合
43、法性检查。 图图446“参照完整性生成器参照完整性生成器”对话对话 4.5多表操作多表操作1工作区基本概念工作区基本概念(1)VFP允许在内存中开辟允许在内存中开辟32767个工作区。个工作区。(2)每一个工作区只能打开一个表文件。)每一个工作区只能打开一个表文件。(3)系统默认在第)系统默认在第1工作区打开表文件。第工作区打开表文件。第1工作区又称为主工作区。工作区又称为主工作区。2工作区的区号与别名工作区的区号与别名(1)区号分别为)区号分别为132767,区号,区号0为最小空闲工作区。为最小空闲工作区。(2)别名有)别名有3种:种:1)系统别名为)系统别名为A、B、C、D、E、F、G、H
44、、I、J和和W11W32767;2)用户指定的别名;)用户指定的别名;3)当用户没有指定表的别名时,就以表的原名作为别名。)当用户没有指定表的别名时,就以表的原名作为别名。4.5.14.5.1工作区的概念工作区的概念 3在指定的工作区打开表并指定别名在指定的工作区打开表并指定别名(1)格式:)格式:USE IN ALIAS (2)功能:在指定的工作区打开表文件,并指定用户别名。)功能:在指定的工作区打开表文件,并指定用户别名。(3)说明:表文件刚打开时,指针指向首记录。)说明:表文件刚打开时,指针指向首记录。【例例426】在指定的工作区打开表文件在指定的工作区打开表文件,并指定表文件的别名。并
45、指定表文件的别名。在命令窗口中键入:在命令窗口中键入:USE Zgjk IN 1 ALIAS ZG&在在1 1区打开区打开ZgjkZgjk表,表, 并指定其别名为并指定其别名为ZGZGUSE Gz IN 2&在在2 2区打开区打开GZGZ表表注意:当前工作区是当前工作区是1区,而不是区,而不是2区。区。4选择当前工作区选择当前工作区(1)命令格式:)命令格式:SELECT |(2)功能:将指定的工作区作为当前工作区。)功能:将指定的工作区作为当前工作区。【例例427】选定当前工作区,然后在当前工作区打开表文件,选定当前工作区,然后在当前工作区打开表文件,并为其指定别名。并为其指定别名。在命令窗
46、口中键入:在命令窗口中键入:SELECT 1&选择选择1 1区为当前区区为当前区USE Zgjk ALIAS ZG&在当前区在当前区(1(1区区) )打开打开ZgjkZgjk表表, ,并指定别名并指定别名ZGZG SELECT 2 &选择选择2 2区为当前区,也可以用区为当前区,也可以用SELECT BSELECT B或或SELECT 0SELECT 0USE Gz &在当前区(在当前区(2 2区)打开区)打开GZGZ表表注意:当前工作区是当前工作区是2区。区。 1建立表间临时联系建立表间临时联系(1)选择)选择“窗口窗口”菜单中的菜单中的“数据工作期数据工作期”命令,打开命令,打开“数据数据
47、工作期工作期”窗口,如图窗口,如图4 - -49所示所示。 图图449“数据工作期数据工作期”窗窗 4.5.24.5.2建立表间临时联系建立表间临时联系 (2)单击)单击“打开打开”按钮,弹出按钮,弹出“打开打开”对话框。对话框。 (3)在)在“打开打开”对话框中,选定对话框中,选定Zgjk表,单击表,单击“确定确定”按钮,按钮,返回返回“数据工作期数据工作期”窗口,窗口,Zgjk表即添加到表即添加到“别名别名”列表框中。列表框中。重复以上的步骤将重复以上的步骤将Gz表添加到表添加到“别名别名”列表框中。列表框中。(4)在)在“数据工作期数据工作期”窗口的窗口的“别名别名”列表框中,选定父表列
48、表框中,选定父表Zgjk,单击,单击“关系关系”按钮,在按钮,在“关系关系”列表框中出现父表列表框中出现父表Zgjk,其下还有一根折线。其下还有一根折线。(5)在)在“别名别名”列表框中,单击子表列表框中,单击子表Gz,打开,打开“设置索引顺设置索引顺序序”对话框,如图对话框,如图451所示。所示。 图图451“设置索引顺序设置索引顺序”对话对话框框 (6)双击作为联系的索)双击作为联系的索引关键字段引关键字段“Gz:职工职工号号”,打开,打开“表达式生成表达式生成器器”对话框,如图对话框,如图450所示所示。 (7)单击)单击“确定确定”按钮,按钮,返回返回“数据工作期数据工作期”窗口,窗口
49、,如图如图451所示所示。 图图450“表达式生成器表达式生成器”对话对话框框 图图451建立了临时联系的建立了临时联系的“数据工作期数据工作期”窗口窗口 2记录指针联动记录指针联动 建立了表间临时联系后,不同工作区中表的记录建立了表间临时联系后,不同工作区中表的记录指针按联系关键字的值同步移动。指针按联系关键字的值同步移动。(1)在)在“数据工作期数据工作期”窗口的窗口的“别名别名”列表框中,列表框中,选定选定Zgjk表,单击表,单击“浏览浏览”按钮;再选定按钮;再选定Gz表,单表,单击击“浏览浏览”按钮。按钮。(2)在父表)在父表Zgjk的浏览窗口中,单击记录定位标的浏览窗口中,单击记录定
50、位标记,选定记,选定“职工号职工号”为为“0202”的职工。在的职工。在Gz表中自表中自动显示动显示“职工号职工号”为为“0202”的职工的工资信息,如的职工的工资信息,如图图453所示。所示。 注意:临时联系是有方向的,由父表带动子表移动指针。临时联系是有方向的,由父表带动子表移动指针。 图图453两表记录指针同步联动两表记录指针同步联动 3表间临时关联的操作命令表间临时关联的操作命令(1)建立表间临时关联)建立表间临时关联 格式:格式:SET RELATION TO INTO | 功能:按关键字表达式的值建立当前表与指定的表功能:按关键字表达式的值建立当前表与指定的表 的关联。的关联。 说