第四章 数据库与表的基本操作
This presentation is the property of its rightful owner.
Sponsored Links
1 / 46

本 章 内 容 PowerPoint PPT Presentation


  • 82 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


3601428

第四章 数据库与表的基本操作

本 章 内 容

§4.1 数据库的基本操作

§4.2 表的基本操作

§4.3 表的索引

§4.4 数据完整性

§4.5 多表操作


3601428

§4.3 表的索引

表中记录的存储顺序由数据输入的前后顺序决定,以记录号标识,称为记录的物理顺序。执行LIST命令就可以看到刻录号。

 索引是根据表中的某些字段或表达式的值,建立一个按逻辑顺序排列记录的索引文件。

索引不改变表中记录的物理顺序,而是另外建立一个基于索引表达式值的记录号列表。

索引可以加快查找的速度;此外,如果要建立表间联系,则必须先对建立联系的字段建立索引。


3601428

§4.3.1 索引的类型

VFP提供了4种类型的索引:主索引、候选索引、普通索引和惟一索引。

1.主索引

作为主索引的关键字值是惟一的,不允许重复。表中可能不只一个字段能惟一地确定一条记录,但一个表只能有一个主索引,只有数据库表才能建立主索引,自由表不能建立主索引。主索引通常作为“一对一”或“一对多”联系的“一方”。

2.候选索引

候选索引的关键字值也必须是惟一的,一个表可以建立多个候选索引,数据库表和自由表都可以建立候选索引。当数据库表无主索引时,可以指定一个候选索引作为“一对一”或“一对多”联系的“一方”。

例如,假设在“学生档案.dbf”表中,有“身份证号”及“学号”字段,可将“身份证号”字段设置为主索引,将“学号”字段设置为候选索引。


3601428

3.普通索引

普通索引允许关键字出现重复值,数据库表和自由表都可以建立普通索引,一个表可以建立多个普通索引。普通索引通常作为“一对多”联系的“多方”。

4.惟一索引

惟一索引是指索引项惟一,但允许索引关键字值不惟一,当出现重复值时,只有第一个关键字值的记录有效,而忽略其他重复值的记录。惟一索引是为了兼容早期的版本而设置的。


3601428

§4.3.2 索引文件的类型

索引文件的类型是关于索引存储的问题。

结构化复合索引文件

复合索引文件 (与表文件同名,自动打开和维护)

(.CDX)   非结构化复合索引文件

索引文件 (与表文件不同名,不能自动打开和维护)

独立索引文件(.IDX)

(文件名由用户指定,不能自动打开和维护)

1.复合索引文件

复合索引文件是包含一个或多个索引的文件,其扩展名为.CDX。

复合索引文件又分为结构化复合索引文件(与表文件同名)和非结构化复合索引文件(与表文件不同名)。


3601428

表文件打开时,结构化复合索引文件随之自动打开,表文件关闭时,结构化复合索引文件随之关闭。

非结构化复合索引文件与表不同名,其名称由用户指定。只有指定其名称才能打开非结构化复合索引文件。

2.独立索引文件

独立索引文件只存放一个索引,其扩展名为.IDX。

独立索引文件的名称由用户定义;一个表文件可以建立多个独立索引文件;独立索引文件不会随着表文件打开而自动打开。


3601428

3.索引文件的小结

“复合”是指一个索引文件中包含多个索引(索引不是文件)。“独立”是指一个索引文件中只包含一个索引(每个索引都是文件) 。VFP默认使用结构化复合索引文件,非结构化复合索引文件几乎没有用到。独立索引文件是早期版本的数据库管理系统的索引文件,VFP为了兼容早期版本的数据库管理系统而保留了独立索引文件。结构化复合索引文件是索引文件应用的重点

4.索引的数据更新

若表文件打开,索引文件也打开,表数据的更新会反映到索引中,从而保证表与索引的数据同步匹配。若表文件打开,索引文件没有打开,表数据的更新不会反映到索引中,从而导致表与索引数据不相匹配。

鉴于以上理由,VFP 6.0默认将建立的索引存放在结构化复合索引文件中。在“表设计器”中建立的索引是结构化复合索引文件。


3601428

§4.3.3 在“表设计器”中创建索引

1.建立单关键字索引

【例4-15】在职工简况表Zgjk.dbf中,建立三个索引。“职工号”为“主索引”,按升序排列;“出生日期”为“普通索引”,按降序排列;“基本工资”为“普通索引”,按升序排列。

操作步骤如下:

(1)打开职工简况表Zgjk.dbf。

(2)打开“表设计器”,并选择“字段”选项卡,单击“职工号”字段,在索引下拉列表中选择“升序”。用同样的方法设置“出生日期”字段为降序索引,“基本工资”字段为升序索引,如图4-35所示。

图4-35 “表设计器”的“字段”选项卡


3601428

(3)在“表设计器”中,选择“索引”选项卡,出现“索引”页面。单击“职工号”字段,并单击“类型”右侧的下拉按钮,在类型下拉列表中选择“主索引”。用同样的方法设置“出生日期”字段和“基本工资”字段的索引类型为普通索引,如图4-36所示。

“职工号”、“出生日期”和“基本工资”3个索引存放在一个与表文件同名结构化复合索引文件Zgjk.cdx中。

图4-36 “表设计器”的“索引”选项卡


3601428

2.建立多关键字复合索引

多关键字复合索引是按照表达式的值排序,而不是按照单个字段的值排序。记录按照字段在表达式中出现的顺序排列。

【例4-16】在职工简况表Zgjk.dbf中,建立“部门”和“基本工资”两个字段的复合索引,索引名称为:部门工资,要求先按“部门”降序排列,当“部门”相同时,按“基本工资”降序排列。

(1)建立多关键字复合索引

操作步骤如下。

1)打开职工简况表Zgjk.dbf。

2)打开“表设计器”的“字段”选项卡,选择“部门”字段,并单击“索引”右侧的下拉按钮,在类型下拉列表中选择“降序”。

3)选择“索引”选项卡中,选择“部门”字段,单击“类型”右侧的下拉按钮,在类型下拉列表中选择“普通索引”。


3601428

4)单击表达式右侧的按钮,打开“表达式生成器”对话框。在“表达式”框中输入:

部门+STR(基本工资 , 7 , 2),如图4-37所示。

图4-37 “表达式生成器”对话框


3601428

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

图4-38 “表设计器”对话框

6)单击“确定”按钮,关闭“表设计器”。


3601428

3.设置主控索引

表文件打开后,结构化复合索引文件自动打开,但是其中的索引没有起作用,表记录仍然按记录号的物理顺序显示。这是因为结构化复合索引文件中包含多个索引,要指定主控索引后,记录才按指定的主控索引的逻辑顺序显示。

(1)使用“工作区属性”对话框指定主控索引

1)打开职工简况表Zgjk.dbf。

2)单击工具栏中的“数据工作期窗口”按钮 ,打开“数据工作期窗口”,如图4-40所示。

图4-40 “数据工作期窗口”


3601428

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

图4-41“工作区属性”对话框


3601428

4)单击“确定”按钮,关闭“工作区属性”对话框。

5)选择“显示”菜单中的“浏览”命令,打开“浏览”窗口,如图4-41所示。

图4-41 “浏览”窗口


3601428

§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 <独立索引文件>


3601428

【例4-18】在职工简况表Zgjk.dbf中,使用命令建立“部门”和“基本工资”两个字段的复合索引,索引名称为:部门工资,要求先按“部门”降序排列,当“部门”相同时,按“基本工资”降序排列。

在命令窗口中,键入以下命令并执行。

USE Zgjk &&打开职工简况表

INDEX ON 部门+STR(基本工资,7,2) TAG 部门工资 DESC&&建立复合索引

BROWSE&&在浏览窗口中显示表记录


3601428

2.设置主控索引

命令格式:SET ORDER TO [TAG] <索引标记>

功能:将指定的索引设置为主控索引。

【例4-19】使用命令指定职工简况表Zgjk.dbf中的“基本工资”索引为主控索引,然后按照索引的逻辑顺序列出表记录。

在命令窗口中,键入以下命令并执行。

USE Zgjk &&打开职工简况表

SET ORDER TO 部门工资&&设置主控索引

LIST&&显示表记录


3601428

§4.3.5 数据检索

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

SEEK和FIND命令是索引检索,也就是说,在使用SEEK和FIND命令之前要先索引。LOCATE命令是条件检索。


3601428

1.索引检索

(1)SEEK命令

格式:SEEK <表达式>

功能:将记录指针移到与<表达式>值相匹配的记录。

说明:

1)要先索引后检索。

2)SEEK命令中的<表达式>与索引表达式必须相同。

【例4-20】在职工简况表中,使用SEEK命令查找并显示家电部门的职工信息。

USE Zgjk

INDEX ON 部门TAG 部门&&刚建的索引是打开的

SEEK "家电"&&若缺省双引号,家电将被理解为变量名

DISP&&显示第1个目标记录内容

SKIP&&指针移到下一个目标记录

DISP&&显示第2个目标记录内容


3601428

(2)FIND命令

格式:FIND <字符串>|<常数>

功能:将记录指针移到与<字符串>或<常数>值 相匹配的记录。

说明:

1)要先索引后检索。

2)FIND命令中的<字符串>或<常数>与索引表达式必须相同。

3)FIND命令中<字符串>定界符可省略。

4)由于SEEK命令的功能全面覆盖FIND命令的功能。一些书籍不再介绍FIND命令。


3601428

【例4-21】在职工简况表中,使用FIND命令查找并显示家电部门的职工信息。

USE Zgjk

SET ORDER TO 部门 &&指定主控索引

FIND 家电&&字符串定界符可省略

DISP&&显示第1个目标记录

SKIP&&指针下移到下一个目标记录

DISP&&显示第2个目标记录


3601428

2.条件定位

格式:LOCATE [范围] [FOR|WHILE <条件>]

CONTINUE

功能:LOCATE命令将记录指针定位在满足条件的第一个目标记录。CONTINUE命令将记录指针指向下一条满足条件的目标记录。

说明:

(1)若缺省范围子句,则默认ALL。

(2)若没有满足条件的记录,则记录指针指向文件结束位置。


3601428

【例4-22】在职工简况表中,查找1981年出生的职工信息。

USE Zgjk

LOCATE FOR YEAR(出生日期)=1981 &&指针定位到第1个目标记录

DISP&&显示第1个目标记录

CONTINUE&&指针定位到下一个目标记录

DISP&&显示第2个目标记录

? RECNO() , EOF()

9 .T.


3601428

§4.4 数据完整性

§4.4.1 实体完整

1.实体完整性的概念

 实体完整性即表中记录的惟一性,在VFP中通过主关键字或候选关键字保证记录的惟一,即保证实体完整性。

 实体完整性是通过在“表设计器”的“字段”选项卡中设置主关键字段的字段有效性来实现的。

2 .设置实体完整性

【例4-23】使用命令制作职工简况表Zgjk.dbf(“职工号”字段已设置为主关键字)的副本Zgjk3.dbf;创建数据库:职工2.dbc,将Zgjk3.dbf表添加到数据库中;打开数据库表Zgjk3.dbf,设置“显示”选项组,要求:“职工号”字段不能为空,否则将弹出提示信息:主关键字不能为空!。


3601428

在命令窗口中,键入以下命令并执行。

USE Zgjk

COPY TO Zgjk3&&将当前表文件拷贝到Zgjk3.dbf

CREATE DATABASE 职工2&&创建数据库文件

ADD TABLE Zgjk3&&向当前数据库添加表文件

USE Zgjk3&&打开表文件

MODIFY STRUCTURE&&修改表结构

执行上述命令,可以看到:数据库表比自由表的“表设计器”具有更多的选项。其中,“显示”、“字段有效性”、“匹配字段类型到类”和“字段注释”是数据库表的“表设计器”所特有的四个选项组。


3601428

(1)在“表设计器”的“字段”选项卡中,选定“职工号”字段。

(2)在“字段有效性”选项组的“规则”框中输入:

.NOT.EMPTY(职工号)

(3)在“信息”框中输入:"主关键字不能为空!",如图4-43所示。

当输入的数据记录违反字段有效性规则的时,显示出错提示信息。

图4-43 设置实体完整性


3601428

§4.4.2 域完整性

域完整性是指字段取值的合理性。建立表结构时,定义了字段的类型和宽度,但这不能保证字段取值的合理性。域的约束规则也称为字段有效性规则。

1.设置域完整性

域完整性在“表设计器”的“字段”选项卡中设置。

【例4-24】打开数据库表Zgjk3.dbf,设置基本工资的值不少于0。若违反规则,则提示:基本工资不小于零!。

操作步骤如下。

(1)打开数据库表Zgjk3.dbf。

(2)选择“显示”菜单中的“表设计器”命令,打开“表设计器”的“字段”选项卡。


3601428

(3)选定“基本工资”,在“字段有效性”选项组的“规则”框中输入:基本工资>=0。

(4)在“信息”框中输入:"基本工资不小于零!",如图4-43所示。

(5)单击“确定”按钮,关闭“表设计器”,保存所作的设置。

图4-43 设置域完整性


3601428

2.设置字段默认

设置字段默认可以减少记录数据的录入量。

【例4-25】职工简况表Zgjk3.dbf中,大多数职工已婚。为了减少记录数据的录入量,将“婚否”字段的默认值设置为.T.。

操作步骤如下。

(1)打开数据库表Zgjk3.dbf。

(2)选择“显示”菜单中的“表设计器”命令,打开“表设计器”的“字段”选项卡。

(3)选定“婚否”字段,在“字段有效性”选项组的“默认值”框中输入:.T. ,如图4-44所示。

图4-44 设置字段默认值


3601428

§4.4.3 参照完整性与表间联系

1.表间联系类型

(1)永久联系

在“数据库设计器”中建立的表间联系为永久联系,永久联系作为数据库的对象长期保存在数据库中,随着数据库打开而打开,关闭而关闭。永久联系主要用于检查数据库表间参照完整性和设置数据库环境。永久联系不能实现不同工作区中表的记录指针的联动。

(2)临时联系

临时联系是在VFP运行期间,使用“窗口”菜单中的“数据工作期”命令或SET RELATION命令建立的联系。临时联系随着数据库关闭而取消。临时联系能够实现不同工作区中表的记录指针的联动。


3601428

2 .创建表间永久联系

创建表间联系的步骤是:先建立两个表的联系字段的索引,然后在“数据库设计器”窗口中,建立表间联系。

(1)建立联系字段的索引

为了建立数据库表之间的联系,首先要在各个表中建立联系字段的索引。

若要建立两表之间的一对一联系,两个表的联系字段必须是主索引或者候选索引(具有惟一性)。

若要建立两表之间的一对多联系,作为“一”方的父表的索引必须是主索引或者候选索引(具有惟一性),作为“多”方的子表的索引必须是普通索引(允许出现重复值)。


3601428

(2)建立表间联系

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

图4-45 建立表间永久联系


3601428

(3)编辑表间联系

1)鼠标左键单击表之间的连线,连线变粗,表示选定了该连线。

2)鼠标右键单击选定的连线,弹出快捷菜单。

3)若选择“删除关系”命令,则取消表间的联系;若选择“编辑关系”命令,则打开“编辑关系”对话框。


3601428

2.设置参照完整性

数据库表建立了表间永久联系后,表之间的记录就存在一定的联系。

设置参照完整性是为了控制表之间的记录一致性。当修改、删除、插入记录时,如果建立了参照完整性,VFP将检查操作的合法性,以保持已建立的表间联系的正确性。

设置参照完整性的步骤如下:

(1)在各个数据库表中建立联系字段的索引。

(2)建立数据库表之间的永久联系。

(3)清理数据库。

执行“数据库”菜单中的“清理数据库”命令,物理删除数据库各个表中所有带有删除标记的记录。


3601428

(4)设置参照完整性的约束条件

鼠标右击表间连线,在弹出的快捷菜单中选择“编辑参照完整性”命令,打开“编辑参照完整性生成器”对话框,如图4-46所示。

分别在“更新规则”、“删除规则”和“插入规则”选项卡中,设置“级联则”、“限制”或“忽略”。当进行记录的修改、删除和插入操作时,VFP根据参照完整性作出的合法性检查。

图4-46 “参照完整性生成器”对话


3601428

§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)当用户没有指定表的别名时,就以表的原名作为别名。


3601428

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区。


3601428

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区。


3601428

§4.5.2 建立表间临时联系

1.建立表间临时联系

(1)选择“窗口”菜单中的“数据工作期”命令,打开“数据工作期”窗口,如图4 -47所示。

图4-47 “数据工作期”窗


3601428

(2)单击“打开”按钮,弹出“打开”对话框。

(3)在“打开”对话框中,选定一个表文件,如选定Zgjk表,然后单击“确定”按钮,返回“数据工作期”窗口,Zgjk表即添加到“别名”列表框中。重复以上的步骤将Gz表添加到“别名”列表框中,如图4-46所示。

(4)在“数据工作期”窗口的“别名”列表框中,选定父表Zgjk,然后单击“关系”按钮,在“关系”列表框中出现父表Zgjk,其下还有一根折线。

(5)在“别名”列表框中,单击子表Gz,打开“设置索引顺序”对话框,如图4-49所示。

图4-49 “设置索引顺序”对话框


3601428

(6)双击作为联系的索引关键字段“Gz:职工号”,打开“表达式生成器”对话框,如图4-50所示。

(7)单击“确定”按钮,返回“数据工作期”窗口,如图4-51所示。

图4-50 “表达式生成器”对话框

图4-51 建立了临时联系的“数据工作期”窗口


3601428

2.记录指针联动

建立了表间临时联系后,不同工作区中表的记录指针按联系关键字的值同步移动。

(1)在“数据工作期”窗口的“别名”列表框中,选定Zgjk表,然后单击“浏览”按钮;再选定Gz表,然后单击“浏览”按钮。

(2)在父表Zgjk的浏览窗口中,单击记录定位标记,选定“职工号”为“0202”的职工。在Gz表中自动显示“职工号”为“0202”的职工的工资信息,如图4-52所示。

注意:临时联系是有方向的,由父表带动子表移动指针。

图4-52 两表记录指针同步联动


3601428

3.表间临时关联的操作命令

(1)建立表间临时关联

格式:SET RELATION TO <关键字表达式> INTO <区号>|<别名>

功能:按关键字表达式的值建立当前表与指定的表 的关联。

说明:被关联的子表的关键字表达式需要索引。

(2)取消当前表到所有表的关联

格式:SET RELATION TO

(3)取消当前表到指定表的关联

格式:SET RELATION OFF INTO <区号> | <别名>


3601428

【例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.工会费


3601428

SELECT 2

BROWSE

两表关联替换结果如图4-53所示。

图4-53 两表关联替换结果

说明:若要引用非当前区表的字段,则要在字段名前冠以工作区号或表的别名,由于“岗位工资”、“津贴”、“奖金”、“住房公积金”和“工会费”是非当前区表的字段,所以要冠以工作区号或表的别名 。


  • Login