1 / 46

本 章 内 容

第四章 数据库与表的基本操作. 本 章 内 容. §4.1  数据库的基本操作 §4.2  表的基本操作 §4.3  表的索引 §4.4  数据完整性 §4.5 多表操作. §4.3  表的索引. 表中记录的存储顺序由数据输入的前后顺序决定,以 记录号 标识,称为记录的 物理顺序 。执行 LIST 命令就可以看到刻录号。  索引是 根据 表中的某些 字段或表达式 的值,建立一个按 逻辑顺序 排列记录的索引文件。 索引不改变表中记录的物理顺序,而是另外建立一个基于索引表达式值的记录号列表。

gene
Download Presentation

本 章 内 容

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 数据库与表的基本操作 本 章 内 容 §4.1 数据库的基本操作 §4.2 表的基本操作 §4.3 表的索引 §4.4 数据完整性 §4.5 多表操作

  2. §4.3 表的索引 表中记录的存储顺序由数据输入的前后顺序决定,以记录号标识,称为记录的物理顺序。执行LIST命令就可以看到刻录号。  索引是根据表中的某些字段或表达式的值,建立一个按逻辑顺序排列记录的索引文件。 索引不改变表中记录的物理顺序,而是另外建立一个基于索引表达式值的记录号列表。 索引可以加快查找的速度;此外,如果要建立表间联系,则必须先对建立联系的字段建立索引。

  3. §4.3.1 索引的类型 VFP提供了4种类型的索引:主索引、候选索引、普通索引和惟一索引。 1.主索引 作为主索引的关键字值是惟一的,不允许重复。表中可能不只一个字段能惟一地确定一条记录,但一个表只能有一个主索引,只有数据库表才能建立主索引,自由表不能建立主索引。主索引通常作为“一对一”或“一对多”联系的“一方”。 2.候选索引 候选索引的关键字值也必须是惟一的,一个表可以建立多个候选索引,数据库表和自由表都可以建立候选索引。当数据库表无主索引时,可以指定一个候选索引作为“一对一”或“一对多”联系的“一方”。 例如,假设在“学生档案.dbf”表中,有“身份证号”及“学号”字段,可将“身份证号”字段设置为主索引,将“学号”字段设置为候选索引。

  4. 3.普通索引 普通索引允许关键字出现重复值,数据库表和自由表都可以建立普通索引,一个表可以建立多个普通索引。普通索引通常作为“一对多”联系的“多方”。 4.惟一索引 惟一索引是指索引项惟一,但允许索引关键字值不惟一,当出现重复值时,只有第一个关键字值的记录有效,而忽略其他重复值的记录。惟一索引是为了兼容早期的版本而设置的。

  5. §4.3.2 索引文件的类型 索引文件的类型是关于索引存储的问题。 结构化复合索引文件 复合索引文件 (与表文件同名,自动打开和维护) (.CDX)   非结构化复合索引文件 索引文件 (与表文件不同名,不能自动打开和维护) 独立索引文件(.IDX) (文件名由用户指定,不能自动打开和维护) 1.复合索引文件 复合索引文件是包含一个或多个索引的文件,其扩展名为.CDX。 复合索引文件又分为结构化复合索引文件(与表文件同名)和非结构化复合索引文件(与表文件不同名)。

  6. 表文件打开时,结构化复合索引文件随之自动打开,表文件关闭时,结构化复合索引文件随之关闭。表文件打开时,结构化复合索引文件随之自动打开,表文件关闭时,结构化复合索引文件随之关闭。 非结构化复合索引文件与表不同名,其名称由用户指定。只有指定其名称才能打开非结构化复合索引文件。 2.独立索引文件 独立索引文件只存放一个索引,其扩展名为.IDX。 独立索引文件的名称由用户定义;一个表文件可以建立多个独立索引文件;独立索引文件不会随着表文件打开而自动打开。

  7. 3.索引文件的小结 “复合”是指一个索引文件中包含多个索引(索引不是文件)。“独立”是指一个索引文件中只包含一个索引(每个索引都是文件) 。VFP默认使用结构化复合索引文件,非结构化复合索引文件几乎没有用到。独立索引文件是早期版本的数据库管理系统的索引文件,VFP为了兼容早期版本的数据库管理系统而保留了独立索引文件。结构化复合索引文件是索引文件应用的重点 4.索引的数据更新 若表文件打开,索引文件也打开,表数据的更新会反映到索引中,从而保证表与索引的数据同步匹配。若表文件打开,索引文件没有打开,表数据的更新不会反映到索引中,从而导致表与索引数据不相匹配。 鉴于以上理由,VFP 6.0默认将建立的索引存放在结构化复合索引文件中。在“表设计器”中建立的索引是结构化复合索引文件。

  8. §4.3.3 在“表设计器”中创建索引 1.建立单关键字索引 【例4-15】在职工简况表Zgjk.dbf中,建立三个索引。“职工号”为“主索引”,按升序排列;“出生日期”为“普通索引”,按降序排列;“基本工资”为“普通索引”,按升序排列。 操作步骤如下: (1)打开职工简况表Zgjk.dbf。 (2)打开“表设计器”,并选择“字段”选项卡,单击“职工号”字段,在索引下拉列表中选择“升序”。用同样的方法设置“出生日期”字段为降序索引,“基本工资”字段为升序索引,如图4-35所示。 图4-35 “表设计器”的“字段”选项卡

  9. (3)在“表设计器”中,选择“索引”选项卡,出现“索引”页面。单击“职工号”字段,并单击“类型”右侧的下拉按钮,在类型下拉列表中选择“主索引”。用同样的方法设置“出生日期”字段和“基本工资”字段的索引类型为普通索引,如图4-36所示。 “职工号”、“出生日期”和“基本工资”3个索引存放在一个与表文件同名结构化复合索引文件Zgjk.cdx中。 图4-36 “表设计器”的“索引”选项卡

  10. 2.建立多关键字复合索引 多关键字复合索引是按照表达式的值排序,而不是按照单个字段的值排序。记录按照字段在表达式中出现的顺序排列。 【例4-16】在职工简况表Zgjk.dbf中,建立“部门”和“基本工资”两个字段的复合索引,索引名称为:部门工资,要求先按“部门”降序排列,当“部门”相同时,按“基本工资”降序排列。 (1)建立多关键字复合索引 操作步骤如下。 1)打开职工简况表Zgjk.dbf。 2)打开“表设计器”的“字段”选项卡,选择“部门”字段,并单击“索引”右侧的下拉按钮,在类型下拉列表中选择“降序”。 3)选择“索引”选项卡中,选择“部门”字段,单击“类型”右侧的下拉按钮,在类型下拉列表中选择“普通索引”。

  11. 4)单击表达式右侧的按钮,打开“表达式生成器”对话框。在“表达式”框中输入:4)单击表达式右侧的按钮,打开“表达式生成器”对话框。在“表达式”框中输入: 部门+STR(基本工资 , 7 , 2),如图4-37所示。 图4-37 “表达式生成器”对话框

  12. 5)单击“确定”按钮,返回“表设计器”,输入索引名称:部门工资,如图4-38所示。索引名称可由用户自定义,不一定要与表达式同名。5)单击“确定”按钮,返回“表设计器”,输入索引名称:部门工资,如图4-38所示。索引名称可由用户自定义,不一定要与表达式同名。 图4-38 “表设计器”对话框 6)单击“确定”按钮,关闭“表设计器”。

  13. 3.设置主控索引 表文件打开后,结构化复合索引文件自动打开,但是其中的索引没有起作用,表记录仍然按记录号的物理顺序显示。这是因为结构化复合索引文件中包含多个索引,要指定主控索引后,记录才按指定的主控索引的逻辑顺序显示。 (1)使用“工作区属性”对话框指定主控索引 1)打开职工简况表Zgjk.dbf。 2)单击工具栏中的“数据工作期窗口”按钮 ,打开“数据工作期窗口”,如图4-40所示。 图4-40 “数据工作期窗口”

  14. 3)单击“属性”按钮,打开“工作区属性”对话框,如图4-41所示。单击“索引顺序”列表框的下拉按钮,在弹出的列表中选择索引标识“Zgjk.部门工资”。(其中,<无顺序>就是物理顺序。)3)单击“属性”按钮,打开“工作区属性”对话框,如图4-41所示。单击“索引顺序”列表框的下拉按钮,在弹出的列表中选择索引标识“Zgjk.部门工资”。(其中,<无顺序>就是物理顺序。) 图4-41“工作区属性”对话框

  15. 4)单击“确定”按钮,关闭“工作区属性”对话框。4)单击“确定”按钮,关闭“工作区属性”对话框。 5)选择“显示”菜单中的“浏览”命令,打开“浏览”窗口,如图4-41所示。 图4-41 “浏览”窗口

  16. §4.3.4 表的索引命令 1.建立索引 格式:INDEX ON <索引表达式> TO <独立索引文件>[.IDX] |TAG <索引标记> [OF <复合索引文件>] [.CDX] [FOR <条件>] [ASCENDING | DESCENDING] 功能:对当前的表文件,按<索引表达式>的值建立索引文件。 说明: (1)ASCENDING或DESCENDING:指定索引按升序或降序排列,默认升序。 (2)建立结构化复合索引文件的命令格式为: INDEX ON <索引表达式> TAG <索引标记> (3)建立独立索引文件的命令格式为: INDEX ON <索引表达式> TO <独立索引文件>

  17. 【例4-18】在职工简况表Zgjk.dbf中,使用命令建立“部门”和“基本工资”两个字段的复合索引,索引名称为:部门工资,要求先按“部门”降序排列,当“部门”相同时,按“基本工资”降序排列。【例4-18】在职工简况表Zgjk.dbf中,使用命令建立“部门”和“基本工资”两个字段的复合索引,索引名称为:部门工资,要求先按“部门”降序排列,当“部门”相同时,按“基本工资”降序排列。 在命令窗口中,键入以下命令并执行。 USE Zgjk &&打开职工简况表 INDEX ON 部门+STR(基本工资,7,2) TAG 部门工资 DESC &&建立复合索引 BROWSE &&在浏览窗口中显示表记录

  18. 2.设置主控索引 命令格式:SET ORDER TO [TAG] <索引标记> 功能:将指定的索引设置为主控索引。 【例4-19】使用命令指定职工简况表Zgjk.dbf中的“基本工资”索引为主控索引,然后按照索引的逻辑顺序列出表记录。 在命令窗口中,键入以下命令并执行。 USE Zgjk &&打开职工简况表 SET ORDER TO 部门工资 &&设置主控索引 LIST &&显示表记录

  19. §4.3.5 数据检索  索引目的是建立表间联系和加快数据检索。数据检索的本质是将记录指针定位到目标记录,并没有显示记录数据的内容。找到目标记录后,还要使用DISP命令,才能看到目标记录的内容。常用的数据检索命令有:SEEK、FIND和LOCATE。 SEEK和FIND命令是索引检索,也就是说,在使用SEEK和FIND命令之前要先索引。LOCATE命令是条件检索。

  20. 1.索引检索 (1)SEEK命令 格式:SEEK <表达式> 功能:将记录指针移到与<表达式>值相匹配的记录。 说明: 1)要先索引后检索。 2)SEEK命令中的<表达式>与索引表达式必须相同。 【例4-20】在职工简况表中,使用SEEK命令查找并显示家电部门的职工信息。 USE Zgjk INDEX ON 部门TAG 部门 &&刚建的索引是打开的 SEEK "家电"&&若缺省双引号,家电将被理解为变量名 DISP &&显示第1个目标记录内容 SKIP &&指针移到下一个目标记录 DISP &&显示第2个目标记录内容

  21. (2)FIND命令 格式:FIND <字符串>|<常数> 功能:将记录指针移到与<字符串>或<常数>值 相匹配的记录。 说明: 1)要先索引后检索。 2)FIND命令中的<字符串>或<常数>与索引表达式必须相同。 3)FIND命令中<字符串>定界符可省略。 4)由于SEEK命令的功能全面覆盖FIND命令的功能。一些书籍不再介绍FIND命令。

  22. 【例4-21】在职工简况表中,使用FIND命令查找并显示家电部门的职工信息。【例4-21】在职工简况表中,使用FIND命令查找并显示家电部门的职工信息。 USE Zgjk SET ORDER TO 部门 &&指定主控索引 FIND 家电 &&字符串定界符可省略 DISP&&显示第1个目标记录 SKIP&&指针下移到下一个目标记录 DISP&&显示第2个目标记录

  23. 2.条件定位 格式:LOCATE [范围] [FOR|WHILE <条件>] CONTINUE 功能:LOCATE命令将记录指针定位在满足条件的第一个目标记录。CONTINUE命令将记录指针指向下一条满足条件的目标记录。 说明: (1)若缺省范围子句,则默认ALL。 (2)若没有满足条件的记录,则记录指针指向文件结束位置。

  24. 【例4-22】在职工简况表中,查找1981年出生的职工信息。【例4-22】在职工简况表中,查找1981年出生的职工信息。 USE Zgjk LOCATE FOR YEAR(出生日期)=1981 &&指针定位到第1个目标记录 DISP&&显示第1个目标记录 CONTINUE&&指针定位到下一个目标记录 DISP&&显示第2个目标记录 ? RECNO() , EOF() 9 .T.

  25. §4.4 数据完整性 §4.4.1 实体完整 1.实体完整性的概念  实体完整性即表中记录的惟一性,在VFP中通过主关键字或候选关键字保证记录的惟一,即保证实体完整性。  实体完整性是通过在“表设计器”的“字段”选项卡中设置主关键字段的字段有效性来实现的。 2 .设置实体完整性 【例4-23】使用命令制作职工简况表Zgjk.dbf(“职工号”字段已设置为主关键字)的副本Zgjk3.dbf;创建数据库:职工2.dbc,将Zgjk3.dbf表添加到数据库中;打开数据库表Zgjk3.dbf,设置“显示”选项组,要求:“职工号”字段不能为空,否则将弹出提示信息:主关键字不能为空!。

  26. 在命令窗口中,键入以下命令并执行。 USE Zgjk COPY TO Zgjk3 &&将当前表文件拷贝到Zgjk3.dbf CREATE DATABASE 职工2 &&创建数据库文件 ADD TABLE Zgjk3 &&向当前数据库添加表文件 USE Zgjk3 &&打开表文件 MODIFY STRUCTURE &&修改表结构 执行上述命令,可以看到:数据库表比自由表的“表设计器”具有更多的选项。其中,“显示”、“字段有效性”、“匹配字段类型到类”和“字段注释”是数据库表的“表设计器”所特有的四个选项组。

  27. (1)在“表设计器”的“字段”选项卡中,选定“职工号”字段。(1)在“表设计器”的“字段”选项卡中,选定“职工号”字段。 (2)在“字段有效性”选项组的“规则”框中输入: .NOT.EMPTY(职工号) (3)在“信息”框中输入:"主关键字不能为空!",如图4-43所示。 当输入的数据记录违反字段有效性规则的时,显示出错提示信息。 图4-43 设置实体完整性

  28. §4.4.2 域完整性 域完整性是指字段取值的合理性。建立表结构时,定义了字段的类型和宽度,但这不能保证字段取值的合理性。域的约束规则也称为字段有效性规则。 1.设置域完整性 域完整性在“表设计器”的“字段”选项卡中设置。 【例4-24】打开数据库表Zgjk3.dbf,设置基本工资的值不少于0。若违反规则,则提示:基本工资不小于零!。 操作步骤如下。 (1)打开数据库表Zgjk3.dbf。 (2)选择“显示”菜单中的“表设计器”命令,打开“表设计器”的“字段”选项卡。

  29. (3)选定“基本工资”,在“字段有效性”选项组的“规则”框中输入:基本工资>=0。 (4)在“信息”框中输入:"基本工资不小于零!",如图4-43所示。 (5)单击“确定”按钮,关闭“表设计器”,保存所作的设置。 图4-43 设置域完整性

  30. 2.设置字段默认 设置字段默认可以减少记录数据的录入量。 【例4-25】职工简况表Zgjk3.dbf中,大多数职工已婚。为了减少记录数据的录入量,将“婚否”字段的默认值设置为.T.。 操作步骤如下。 (1)打开数据库表Zgjk3.dbf。 (2)选择“显示”菜单中的“表设计器”命令,打开“表设计器”的“字段”选项卡。 (3)选定“婚否”字段,在“字段有效性”选项组的“默认值”框中输入:.T. ,如图4-44所示。 图4-44 设置字段默认值

  31. §4.4.3 参照完整性与表间联系 1.表间联系类型 (1)永久联系 在“数据库设计器”中建立的表间联系为永久联系,永久联系作为数据库的对象长期保存在数据库中,随着数据库打开而打开,关闭而关闭。永久联系主要用于检查数据库表间参照完整性和设置数据库环境。永久联系不能实现不同工作区中表的记录指针的联动。 (2)临时联系 临时联系是在VFP运行期间,使用“窗口”菜单中的“数据工作期”命令或SET RELATION命令建立的联系。临时联系随着数据库关闭而取消。临时联系能够实现不同工作区中表的记录指针的联动。

  32. 2 .创建表间永久联系 创建表间联系的步骤是:先建立两个表的联系字段的索引,然后在“数据库设计器”窗口中,建立表间联系。 (1)建立联系字段的索引 为了建立数据库表之间的联系,首先要在各个表中建立联系字段的索引。 若要建立两表之间的一对一联系,两个表的联系字段必须是主索引或者候选索引(具有惟一性)。 若要建立两表之间的一对多联系,作为“一”方的父表的索引必须是主索引或者候选索引(具有惟一性),作为“多”方的子表的索引必须是普通索引(允许出现重复值)。

  33. (2)建立表间联系 在“数据库设计器”窗口中,打开“职工业绩”数据库。 按住鼠标左键把一个表的索引拖放到另一个表的索引上,两表之间就出现了一条关系连线,其中不带分岔的一端表示联系中的“一”方,带有三分岔的一端表示联系中的“多”方,如图4-45所示。 图4-45 建立表间永久联系

  34. (3)编辑表间联系 1)鼠标左键单击表之间的连线,连线变粗,表示选定了该连线。 2)鼠标右键单击选定的连线,弹出快捷菜单。 3)若选择“删除关系”命令,则取消表间的联系;若选择“编辑关系”命令,则打开“编辑关系”对话框。

  35. 2.设置参照完整性 数据库表建立了表间永久联系后,表之间的记录就存在一定的联系。 设置参照完整性是为了控制表之间的记录一致性。当修改、删除、插入记录时,如果建立了参照完整性,VFP将检查操作的合法性,以保持已建立的表间联系的正确性。 设置参照完整性的步骤如下: (1)在各个数据库表中建立联系字段的索引。 (2)建立数据库表之间的永久联系。 (3)清理数据库。 执行“数据库”菜单中的“清理数据库”命令,物理删除数据库各个表中所有带有删除标记的记录。

  36. (4)设置参照完整性的约束条件 鼠标右击表间连线,在弹出的快捷菜单中选择“编辑参照完整性”命令,打开“编辑参照完整性生成器”对话框,如图4-46所示。 分别在“更新规则”、“删除规则”和“插入规则”选项卡中,设置“级联则”、“限制”或“忽略”。当进行记录的修改、删除和插入操作时,VFP根据参照完整性作出的合法性检查。 图4-46 “参照完整性生成器”对话

  37. §4.5 多表操作 §4.5.1 工作区的概念 1.工作区基本概念 (1)VFP允许在内存中开辟32767个工作区。 (2)每一个工作区只能打开一个表文件。 (3)系统默认在第1工作区打开表文件。第1工作区又称为主工作区。 2.工作区的区号与别名 (1)区号分别为1~32767,区号0为最小空闲工作区。 (2)别名有3种: 1)系统别名为A、B、C、D、E、F、G、H、I、J和W11~W32767; 2)用户指定的别名; 3)当用户没有指定表的别名时,就以表的原名作为别名。

  38. 3.在指定的工作区打开表并指定别名 (1)格式:USE <表名> IN <区号> ALIAS <别名> (2)功能:在指定的工作区打开表文件,并指定用户别名。 (3)说明:表文件刚打开时,指针指向首记录。 【例4-26】在指定的工作区打开表文件,并指定表文件的别名。 在命令窗口中键入: USE Zgjk IN 1 ALIAS ZG &&在1区打开Zgjk表,并指定其别名为ZG USE Gz IN 2 &&在2区打开GZ表 注意:当前工作区是1区,而不是2区。

  39. 4.选择当前工作区 (1)命令格式:SELECT <区号>|<别名> (2)功能:将指定的工作区作为当前工作区。 【例4-27】选定当前工作区,然后在当前工作区打开表文件,并为其指定别名。 在命令窗口中键入: SELECT 1 &&选择1区为当前区 USE Zgjk ALIAS ZG &&在当前区(1区)打开Zgjk表,并指定别名ZGSELECT 2 &&选择2区为当前区,也可以用SELECT B或SELECT 0 USE Gz &&在当前区(2区)打开GZ表 注意:当前工作区是2区。

  40. §4.5.2 建立表间临时联系 1.建立表间临时联系 (1)选择“窗口”菜单中的“数据工作期”命令,打开“数据工作期”窗口,如图4 -47所示。 图4-47 “数据工作期”窗

  41. (2)单击“打开”按钮,弹出“打开”对话框。 (3)在“打开”对话框中,选定一个表文件,如选定Zgjk表,然后单击“确定”按钮,返回“数据工作期”窗口,Zgjk表即添加到“别名”列表框中。重复以上的步骤将Gz表添加到“别名”列表框中,如图4-46所示。 (4)在“数据工作期”窗口的“别名”列表框中,选定父表Zgjk,然后单击“关系”按钮,在“关系”列表框中出现父表Zgjk,其下还有一根折线。 (5)在“别名”列表框中,单击子表Gz,打开“设置索引顺序”对话框,如图4-49所示。 图4-49 “设置索引顺序”对话框

  42. (6)双击作为联系的索引关键字段“Gz:职工号”,打开“表达式生成器”对话框,如图4-50所示。 (7)单击“确定”按钮,返回“数据工作期”窗口,如图4-51所示。 图4-50 “表达式生成器”对话框 图4-51 建立了临时联系的“数据工作期”窗口

  43. 2.记录指针联动 建立了表间临时联系后,不同工作区中表的记录指针按联系关键字的值同步移动。 (1)在“数据工作期”窗口的“别名”列表框中,选定Zgjk表,然后单击“浏览”按钮;再选定Gz表,然后单击“浏览”按钮。 (2)在父表Zgjk的浏览窗口中,单击记录定位标记,选定“职工号”为“0202”的职工。在Gz表中自动显示“职工号”为“0202”的职工的工资信息,如图4-52所示。 注意:临时联系是有方向的,由父表带动子表移动指针。 图4-52 两表记录指针同步联动

  44. 3.表间临时关联的操作命令 (1)建立表间临时关联 格式:SET RELATION TO <关键字表达式> INTO <区号>|<别名> 功能:按关键字表达式的值建立当前表与指定的表 的关联。 说明:被关联的子表的关键字表达式需要索引。 (2)取消当前表到所有表的关联 格式:SET RELATION TO (3)取消当前表到指定表的关联 格式:SET RELATION OFF INTO <区号> | <别名>

  45. 【例4-28】使用命令建立职工简况Zgjk.dbf表与工资Gz.dbf表之间的临时关联,并计算出实发工资。 USE Zgjk IN 1 &&在1区打开Zgjk表 USE Gz IN 2 ORDER 职工号 &&在2区打开GZ表及“职工号”索引 *注意1区是当前工作区 *以下命令是建立从1区的父表Zgjk到2区的子表Gz的临时关联 SET RELATION TO 职工号 INTO Gz &&也可以用INTO B BROWSE &&浏览1区的Zgjk表 SELECT 2 &&选择2区为当前区 BROWSE &&浏览2区的Gz表 SELECT 1 &&临时关联记录指针联动是单向的,父表带动子表 REPLACE ALL B.实发工资 WITH; 基本工资+B.岗位工资+B.津贴+B.奖金-B.住房公积金-B.工会费

  46. SELECT 2 BROWSE 两表关联替换结果如图4-53所示。 图4-53 两表关联替换结果 说明:若要引用非当前区表的字段,则要在字段名前冠以工作区号或表的别名,由于“岗位工资”、“津贴”、“奖金”、“住房公积金”和“工会费”是非当前区表的字段,所以要冠以工作区号或表的别名 。

More Related