1、2019/4/25,1,数据库及表操作,目 录,上一页,下一页,退 出,2019/4/25,2,本 章 要 点,6.1 数据库的操作6.2 表的建立、修改和维护6.3 表的排序与索引6.4 数据统计与计算6.5 多表操作6.6 数据完整性6.7 自由表与数据库表的相互转换,思考题,2019/4/25,3,6.1.1 建立数据库 1命令方式 【格式】CREATE DATABASE 【功能】建立一个新的扩展名为.DBC的数据库文件并打开此数据库。,数据库的操作,2019/4/25,4,2菜单方式 用菜单方式建立数据库的具体步骤如下: (1)选择【文件】【新建】出现新建对话框。 (2)选择“数据库”
2、单选按钮,再单击“新建文件”按钮,出现“创建”对话框。 (3)在“创建”对话框中输入文件名。选择“保存”按钮,系统自动打开数据库文件,并且将数据库设计器也自动打开。 3利用项目管理器建立数据库 打开已建立的项目文件,出现项目管理器窗口,建库操作。,2019/4/25,5,6.1.2 修改数据库三种方法打开数据库设计器:,1、从项目管理器中打开数据库设计器,2019/4/25,6,2、从“打开”对话框中打开数据库则会自动打开数据库设计器。3、命令方式打开数据库设计器【格式】 MODIFY DATABASE ,2019/4/25,7,6.1.3 删除数据库 1命令方式 【格式】DELETE DAT
3、ABASE 【功能】从磁盘上删除一个扩展名为.DBC的数据库文件。,删除数据库,2019/4/25,8,6.1.4 打开数据库 1命令方式 【格式】OPEN DATABASE 【功能】将磁盘上一个扩展名为.DBC的指定数据库文件打开。,2019/4/25,9,2菜单方式 (1)选择【文件】|【打开】,出现打开对话框。 (2)选择数据库文件所在的文件夹,将文件类型选择为“数据库(.dbc)”。 (3)选择所要打开的数据库文件名,单击“确定”按钮。 3利用项目管理器打开数据库 打开已建立的项目文件,出现项目管理器窗口,选择“数据”标签,选择要打开的数据库名,然后单击“打开”按钮。,2019/4/2
4、5,10,6.1.5 关闭数据库 1命令方式 【格式】CLOSE ALL|DATABASE 【功能】关闭当前打开的数据库。 【说明】ALL用于关闭所有对象。如数据库、表、索 引、 项目管理器等。DATABASE关闭当前数据库和数据库表;如 果当前没有打开的数据库,则关闭所有打开 的自由表、所有工作区内所有索引和格式文件。 2利用项目管理器关闭数据库,即关闭项目管理器,2019/4/25,11,表,表结构(字段),表内容(记录),表包括两大部分,表的建立、修改和维护,2019/4/25,12,6.2.1 创建表 1命令方式 【格式】CREATE | ? 【功能】建立一个新的、扩展名为.DBF的表
5、文件。,2019/4/25,13,用命令方式建立student.dbf表,2019/4/25,14,表结构的创建 表设计器:“字段”、“索引”、“表”三个选项卡 1)“字段”选项卡:字段名、字段类型、字段宽度和小数位 数等。 2) 字段有效性: 规则:限制该字段的数据的有效范围。在规则中输入:性别=“男“.OR.性别=“女“。“性别”字段只能输入“男”或“女”。 信息:字符常量 默认值:当往表中添加记录时,系统向该字段预置的值。在“性别”字段中输入默认值为“男”。输入记录时只有女生才需要改变默认值,可以减少输入。,2019/4/25,15,2菜单方式选择【文件】|【新建】打开新建对话框,选择“
6、表”,单击“新建文件”出现创建对话框,确定需要建立表的路径和表名,按“保存”按钮后。 3用项目管理器新建表,2019/4/25,16,6.2.2 输入表记录 1命令方式 【格式】APPEND BLANK 【功能】在当前已打开表的末尾追加一条或多条记录。例如:在命令窗口输入命令USE STUD &打开表APPE &或EDIT 注意:输入逻辑值时只输入T或F,定界符系统自动生成输入日期值时只输入数码,分隔符系统自动生成,2019/4/25,17,2菜单方式 (1)首先打开表STUD.DBF。 (2)选择【显示】|【浏览】命令。 (3)选择【表】|【追加新记录】命令,用户可以输入追加记录的各个字段。
7、,2019/4/25,18,6.2.3 表的打开与关闭 1表的打开 (1)命令方式 【格式】USE 【功能】打开指定磁盘的指定路径下的表和相关的索引文件。 例,打开在E盘ZKL子目录中student.dbf表。USE E:ZKLstudent,2019/4/25,19,(2)用项目管理器打开表在项目管理器中选中需要打开的表,选择“浏览”或“修改”都能直接打开表且进行浏览或修改,关闭浏览或修改窗口后,该表仍处于打开状态。,2019/4/25,20,2表的关闭 (1)打开另一个表文件如果工作区中已打开有表文件,打开另一表文件时,系统将自动将先前打开的表文件关闭。 (2)使用不带任何选项的USE命令
8、 【格式】USE 【功能】关闭当前已打开的表文件。 (3)使用CLOSE命令 【格式1】CLOSE ALL 【功能】关闭各种类型文件,并选择工作区1为当前工作区。 【格式2】CLOSE DATABASES 【功能】关闭所有已打开的数据库文件、表文件、索引文件、格式文件及备注文件等,并选择工作区1为当前工作区。,2019/4/25,21,(4)使用CLEAR命令 【格式】CLEAR ALL 【功能】关闭所有工作区中已打开的表文件、索引文件、格式文件及备注文件等,同时释放所有的内存变量。并选择工作区1为当前工作区。 (5)退出Visual FoxPro系统 【格式】 QUIT 【功能】退出Visu
9、al FoxPro系统,并关闭所有打开的文件,返回操作系统。,2019/4/25,22,6.2.4 表结构的显示 【格式】LIST | DISPLAY STRUCTURE 【功能】显示或打印当前表文件的结构。例,显示表STUD.DBF的结构。 USE STUD LIST STRUCTURE 需要指出的是,最后一行显示出的记录字节数是所有字段宽度之和再加1。这额外的一个字节是用来存放记录的删除标记(*)的,2019/4/25,23,6.2.5 表结构的修改 1命令方式 【格式】MODIFY STRUCTURE 【功能】将当前已打开的表文件的表设计器打开进行修改。 主要有增加、修改、删除和移动几种
10、操作。,2019/4/25,24,2利用数据库设计器在数据库设计器中选中需要修改的表文件,再选择主菜单中【数据库】|【修改】命令,具体的修改方法同命令方式。,2019/4/25,25,3利用项目管理器在项目管理器中选中需要修改的表文件,再选择主菜单中【项目】|【修改】命令或单击项目管理器中的“修改”按钮(见图3.3)。,图3.3 在项目管理器中打开表,2019/4/25,26,6.2.6 表记录的显示 1命令方式 【格式】LIST | DISPLAY FIELDS FOR OFF 【功能】将当前表文件的记录按照指定的选项显示。,2019/4/25,27,FIELDS :用来指定显示的字段。 “
11、范围”有以下四种表示方法: ALL:所有记录。 NEXT N:从当前记录开始,后面的N条记录(包括当前记录) RECORD N:第N条记录。 REST:当前记录后的全部记录(包括当前记录)。,2019/4/25,28,FOR:指定对表文件中指定范围内满足条件的记录进行操作。 WHILE:也是指定对表文件中指定范围内满足条件的记录进行操作,但是,当第一次遇到不满足条件的记录时,停止继续往后搜索。 OFF:表示不显示记录号;若不选此项,则在各记录前显示记录号。 例1,显示表STUD.DBF的全部记录。USE STUDLIST,2019/4/25,29,例2,显示男生的记录。USE STUDDISP
12、LAY FOR 性别=男 FIELDS 学号,姓名,性别,班级名,系别代号 例3,显示表中所有记录的学号、姓名和性别。USE STUDLIST FIELDS 学号, 姓名, 性别 例4,显示表中1985年出生的同学的学号、姓名、性别及出生日期。USE STUDLIST FIELDS 学号,姓名,性别,出生日期 FOR YEAR(出生日期)=1985,2019/4/25,30,2菜单方式 (1)打开表。 (2)选择【显示】|【浏览】命令,系统弹出记录浏览窗口,显示当前表中的记录。这时还可以选择【显示】|【浏览】或【编辑】来改变显示方式。 3利用项目管理器在项目管理器中,选择需要显示的表文件,单击
13、“浏览”按钮或选择主菜单中【项目】|【浏览】命令,系统弹出记录浏览窗口,显示当前表中的记录。,2019/4/25,31,6.2.6 记录指针的定位,记录指针定位,绝对定位相对定位查询定位(特殊的绝对定位),2019/4/25,32,1绝对定位 【格式】GO 【功能】将记录指针绝对定位到指定的记录上。:记录的物理记录号。,2019/4/25,33,2相对定位 【格式1】SKIP 【功能】记录指针从当前记录向前(或向后)移动若干个记录。 【格式2】GO 【功能】将记录指针移动到表文件的首记录或尾记录 TOP:将记录指针移动到表文件的首记录。 BOTTOM:将记录指针动到表文件的最后一条记录。,20
14、19/4/25,34,例1,绝对定位命令的用法。USE STUDENTGO 2GO 3 例2,相对定位的用法。USE STUDENTSKIP 4 & 系统主窗口显示为5SKIP 3 & 系统主窗口显示为2SKIP 8 & 超出了记录总数6go top & 系统主窗口显示为1,2019/4/25,35,6.2.7 删除记录,删除记录,逻辑删除物理删除,2019/4/25,36,1逻辑删除记录 逻辑删除就是给指定的记录作删除标记“*”。 (1)命令方式 【格式】DELETE FOR 【功能】对当前表中指定范围内满足条件的记录作删除标记“*”。,2019/4/25,37,例,删除STUD.DBF中所
15、有男同学的记录。 USE STUD DELETE FOR 性别=“男“ LIST FIELDS 学号,姓名,性别,班级名,系别代号,地址,出生日期,是否团员 (2)菜单方式,2019/4/25,38,2隐藏逻辑删除记录 【格式】SET DELETED ON | OFF 【功能】将表文件中已逻辑删除的记录隐藏,仿佛真正删除一样。SET DELETED的缺省状态是OFF。 例,隐藏上题中STUD.DBF的标记删除记录。USE STUDSET DELETED ON,2019/4/25,39,3恢复逻辑删除记录 (1)命令方式 【格式】RECALL FOR 【功能】将当前表文件中指定范围内满足条件的已
16、作删除标记“*”的记录恢复,即去掉这些删除记录的删除标记,使之成为正常记录。例,恢复STUD.DBF中删除的所有记录。USE STUDRECALL ALL,2019/4/25,40,4物理删除记录 (1)命令方式 【格式】PACK 【功能】将当前表文件中所有带删除标记(*)的记录全部真正地删除掉。,2019/4/25,41,例,将STUD.DBF中的学号为“021405”的记录进行物理删除。USE STUDDELETE FOR 学号=”021405” PACK,2019/4/25,42,5删除全部记录 【格式】ZAP 【功能】将当前打开的表文件中的所有记录完全物理删除掉。,2019/4/25,
17、43,6.2.8 修改记录 1编辑修改 【格式】EDIT / CHANGE FIELDS FOR 【功能】按照给定条件编辑修改当前打开的表文件的记录。,2019/4/25,44,例,修改STUD.DBF中计0121班学生的学号、姓名和性别等信息。USE STUDEDIT FIELDS 学号,姓名,性别;FOR 班级名=”计0121”,2019/4/25,45,2浏览修改 (1)命令方式 【格式】BROWSE FIELDS FOR 【功能】显示当前表的记录内容,以供编辑修改。 (2)菜单方式 利用菜单方式进行浏览修改的操作步骤如下: 打开表。 选择【显示】|【浏览】命令,系统弹出记录浏览窗口。
18、在编辑修改窗口中编辑修改数据内容,完成后按Ctrl+W键存盘退出Browse窗口。,2019/4/25,46,3替换修改 (1)命令方式 【格式】REPLACE WITH , WITH . FOR 【功能】用指定表达式的值替换当前表中满足条件记录的指定字段的值。例,修改STUD.DBF中的“学号”字段数据,。USE STUDREPLACE 学号 WITH ”20”+学号 ALL,2019/4/25,47,6.2.9 表的复制 1表结构的复制 【格式】COPY STRUCTURE TO FIELDS 【功能】复制当前表文件的结构作为新表文件的结构。 例,用复制命令将STUD.DBF中的学号、姓名
19、、性别、出生日期等四个字段,构成一个新表结构。USE STUDCOPY STRUCTURE TO STUD1; FIELDS 学号,姓名,性别,出生日期,2019/4/25,48,2表文件的复制 【格式】COPY TO FIELDS FOR 【功能】将当前打开的表文件全部或部分复制到一个新生成的表文件中。例,复制STUD.DBF中所有女同学的记录到STUD2.DBF中。USE STUDCOPY TO STUD2 FOR 性别=“女”,2019/4/25,49,6.2.10 表记录的追加 1从另一个表文件中追加记录 【格式】APPEND FROM FIELDS FOR 【功能】从指定的表文件中读
20、入数据,并添加到当前表文件的末尾。,2019/4/25,50,2插入记录 【格式】INSERT BEFORE BLANK 【功能】在当前表文件的指定位置插入新记录或空记录。,2019/4/25,51,表的排序与索引,数据有序化,排序(浪费存储空间),索引(占用存储空间少),2019/4/25,52,6.3.1 表的排序 【格式】SORT TO ON /A| /D| /C , /A| /D|/C . FOR FIELDS 【功能】对当前打开的表,按指定的字段进行排序,生成新的表文件。,2019/4/25,53,例,将STUDENT.DBF按性别进行降序,性别相同的按出生日期升序排序,并将排序记录
21、保存到STUDENT2.DBF中。USE STUDENTSORT TO STUDENT2 ON 性别/D,出生日期,2019/4/25,54,表的索引概述,索引文件,单索引文件(.IDX) (普通索引、唯一索引)复合索引文件(.CDX),标准单索引文件压缩单索引文件,结构复合索引文件 (主索引、候选索引、 唯一索引、普通索引)独立复合索引文件 (唯一索引、普通索引),2019/4/25,55,(1)主索引主索引是一个永远不允许在指定字段和表达式中出现重复值的索引。它也是在数据库表的永久关联中创建参照完整性时主表和被引用表使用的索引。每一个表只能建立一个主索引,只有数据库表才能建立主索引。 (2
22、)侯选索引侯选索引也是一个不允许在指定字段和表达式中出现重复值的索引。数据库表和自由表都可以建立侯选索引,一个表可以建立多个侯选索引。主索引和侯选索引都存储在.CDX结构复合索引文件中,不能存储在独立复合索引文件和单索引文件中,因为主索引和侯选索引都必须与表文件同时打开和同时关闭。 (3)唯一索引系统只在索引文件中保留第一次出现的索引关键字值。数据库表和自由表都可以建立唯一索引 (4)普通索引是一个最简单的索引,允许关键字值的重复出现,适合用来进行表中记录的排序和查询,也适合于一对多永久关联中“多”的一边(子表)的索引。数据库表和自由表都可以建立普通索引。普通索引和唯一索引可以存储在.CDX独
23、立复合索引文件和.IDX单索引文件中。,2019/4/25,56,6.3.2 索引文件的建立 (1)命令方式 【格式】INDEX ON TO TAG OF ASCENDING | DESCENDING 【功能】对当前表文件按指定的关键字建立索引文件。ASCENDING | DESCENDING适用于TAG子句,单索引文件可以选用ASCENDING选项,不能选用DESCENDING选项。,2019/4/25,57,例1,对STUDENT.DBF表文件建立出生日期单索引文件STUDENT.IDX。USE STUDENTINDEX ON 出生日期 TO STUDENT 例2,对表文件STUDENT.
24、DBF,建立一个基于出生日期字段的结构复合索引文件。USE STUDENTINDEX ON 出生日期 TAG 出生日期 DESCENDING 例3,在表文件STUDENT.DBF的结构复合索引文件中,按学号追加一个标识。USE STUDENTINDEX ON 学号 TAG 学号,2019/4/25,58,例4,在表文件STUDENT.DBF的结构复合索引文件中,先按性别再按出生日期追加一个标识。USE STUDENTINDEX ON 性别+DTOC(出生日期) TAG 性别学号 例5,在表文件STUDENT.DBF中,按性别建立一个独立复合索引文件SXBTY.CDX。USE STUDENTIN
25、DEX ON 性别 TAG 性别 OF SXBTY注意:用表设计器建立的索引都是结构复合索引文件。,2019/4/25,59,6.3.3 索引文件的打开 【格式1】USE INDEX 【功能】打开指定的表文件及相关的索引文件。,2019/4/25,60,6.3.4 索引文件的关闭 【格式1】USE 【功能】关闭当前工作区中打开的表文件及所有索引文件。 【格式2】SET INDEX TO 【功能】关闭当前工作区中打开的所有单索引文件和独立复合索引文件。 【格式3】CLOSE INDEXS 【功能】关闭当前工作区中打开的所有单索引文件和独立复合索引文件。 注意:结构复合索引文件不能用以上命令关闭,
26、它随表文件的打开而打开,随表文件的关闭而关闭。,2019/4/25,61,6.3.5 改变主索引 【格式】SET ORDER TO | TAG OF 【功能】重新指定打开的索引文件中的主索引。例,打开STUD.DBF表及其相关索引文件,改变主索引文件。USE STUD INDEX STUDSET ORDER TO 4SET ORDER TO & 使所有索引均无效,2019/4/25,62,6.3.6 索引文件的更新当表中的记录被修改时,系统会自动地更新所打开的索引文件,及时反映数据的变化。对于没有打开的索引文件,索引不能自动更新。为避免使用旧的索引文件导致错误,应该使用重新索引命令更新已经建立
27、的索引文件。 (1)命令方式 【格式】REINDEX 【功能】重新建立已索引过的索引文件。 (2)菜单方式 打开表文件。 选择【显示】|【浏览】命令。 选择【表】|【重新建立索引】命令,系统自动根据各索引表达式重新建立索引。,2019/4/25,63,例,将表STUD.DBF的索引文件重新索引。USE STUDSET INDEX TO STUD.IDXREINDEX,2019/4/25,64,查询,顺序查询 (不需索引)索引查询 (必须索引 且打开索引),LOCATE FOR命令( CONTINUE命令),FIND命令(SKIP命令)SEEK命令(SKIP命令),2019/4/25,65,6.
28、3.7 顺序查询 1命令方式 【格式】LOCATE FOR 【功能】在表指定范围中查找满足条件的记录。2、CONTINUE命令 【格式】 CONTINUE 【功能】 LOCATE找到第一条满足条件的记录可以用 CONTINUE继续查找下一个满足条件的记录。CONTINUE命令必须在LOCATE命令之后使用,否则出错。在CONTINUE命令中实际隐含了前一个LOCATE命令中的条件。,2019/4/25,66,例,在STUDENT.DBF中查找学号前四位为2005的同学记录。USE STUDENTLOCATE FOR 学号=“2005”,2019/4/25,67,6.3.8 索引查询(FIND、
29、SEEK) 1FIND命令 【格式】FIND / 【功能】在表文件的主控索引中查找关键字值与或相匹配的第一个记录。注意:如果用SET EXACT ON命令,则匹配必须是精确的。即FIND命令中的查询内容必须与记录的关键字段值完全相等。如果用SET EXACT OFF命令,则匹配可以是不精确的,即只要FIND命令中的查询内容与记录的关键字段值的左侧相等即可。,2019/4/25,68,例,打开表文件STUDENT.DBF,查找姓“赵”的记录。USE STUDENTSET ORDER TO 姓名FIND 赵,2019/4/25,69,2SEEK命令 【格式】SEEK 【功能】在表文件的主索引中查找
30、关键字值与值相匹配的第一个记录。 【说明】SEEK命令可以查找字符型、数值型、日期型、逻辑型表达式的值。例,用SEEK命令在STUDENT.DBF中查找记录。USE STUDENTINDEX ON 姓名 TAG 姓名SEEK “孙“,2019/4/25,70,6.4.1 统计记录数 【格式】COUNT FOR TO 【功能】用于统计当前表中指定范围内满足条件的记录个数。,数据统计与计算,2019/4/25,71,例,统计STUDENT.DBF中的男同学记录个数和表记录总数。USE STUDENTCOUNT FOR 性别=“男“ TO ACOUNT TO B,2019/4/25,72,6.4.2
31、 求和 【格式】SUM FOR TO | TO ARRAY 【功能】对指定范围内、满足条件的记录按指定的各个表达式分别求和。,2019/4/25,73,6.4.3 求平均值 【格式】AVERAGE FOR TO | TO ARRAY 【功能】对当前表文件中指定范围内满足条件的记录,按指定的数值型字段计算平均值。,2019/4/25,74,例,分别计算GZGL.DBF中的男女各项收入的平均值。 USE GZGL AVER FOR 性别=”男” TO ARRAY B AVER FOR 性别=”女” TO ARRAY C,2019/4/25,75,6.4.4 综合计算 【格式】CALCULATE F
32、OR TO | TO ARRAY 【功能】对当前表文件中指定范围内满足条件的记录进行指定的计算工作。CNT():统计当前工作区中数据库的记录个数。SUM(数值型字段名):计算数值型字段的数值和。AVG(数值型字段名):计算数值型字段的平均值。MAX(字段名):求数值型、日期型、字符型字段的最大值。MIN(字段名):求数值型、日期型、字符型字段的最小值。,2019/4/25,76,例,计算GZDA.DBF中的人数、奖励工资的平均值 和最大值、应发工资的最大值、平均值。USE GZDACALC CNT(),AVG(奖励工资),MAX(奖励工资),; AVG(应发工资),MAX(应发工资) TO X
33、1,X2,X3,X4,X5,2019/4/25,77,6.4.5 分类汇总 【格式】TOTAL TO ON FIELDS FOR 【功能】按关键字段对当前表文件的数值型字段进行分类汇总,形成一个新的表文件。,2019/4/25,78,例,对RSDA.DBF按“性别”分类汇总。USE RSDAINDEX ON 性别 TAG 性别TOTAL TO XBHZ ON 性别USE XBHZ,2019/4/25,79,6.5.1 多表的操作迄今所讲述的对表的操作都是在一个工作区进行的,每个工作区最多只能打开一个表文件,用USE命令打开一个新的表,同时也就关闭了前面已打开的表。在实际应用中,用户常常需要同时
34、打开多个表文件,以便对多个表文件的数据进行操作。为了解决这一问题,Visual FoxPro引入了工作区的概念。Visual FoxPro允许用户在表间建立临时关系和永久关系。,多表操作,2019/4/25,80,6.5.2 工作区与多个表 1工作区和当前工作区 Visual FoxPro 能同时提供32767个工作区,前10工作区用 AJ 十个字母来标识。 系统默认为1区。 在任意时刻,只有一个工作区是当前工作区,用户只能在当前工作区对打开的当前库进行操作。 每一个工作区都可以并且只能打开一个表文件。 同一个表文件不允许同时在多个工作区打开,但在其它工作区中被关闭之后,可以在任意一个工作区中
35、被打开。 各工作区中打开的表文件彼此相互独立(指针不受影响)。,2019/4/25,81,2工作区的建立、切换 【命令】:SELECT/ 【功能】:建立或选择一个工作区作为当前工作区。 例,在1号和2号工作区内分别打开STUDENT.DBF和COURSE.DBF表文件,并选择1号工作区为当前工作区。SELECT 1 & SELECT AUSE STUDENTSELECT 2USE COURSESELECT 1,2019/4/25,82,3工作区互访(非当前工作区字段的引用)【命令1】 - 【命令2】 . ,2019/4/25,83,例,在1号和2号工作区打开STUDENT.DBF和SCORE.
36、DBF,在1号工作区内查看当前记录的学号、姓名、性别、出生日期、课程号、成绩字段内容。 SELECT A USE STUDENT & 在一号工作区中打开STUD SELECT B USE SCORE & 在二号工作区中打开SC SELECT A & 选择1号工作区为当前工作区 DISPLAY 学号,姓名,性别,出生日期,B-课程号,SCORE.成绩,2019/4/25,84,6.5.3 表的关联 1关联的概述所谓表文件的关联是把当前工作区中打开的表与另一个工作区中打开的表进行逻辑连接,而不生成新的表。当前工作区的表和另一工作区中的打开表建立关联后,当前工作区是表的记录指针移动时,被关联工作区的
37、表记录指针也将自动相应移动,以实现对多个表的同时操作。 在多个表中,必须有一个表为关联表,此表常称为父表,而其他的表则称为被关联表,常称为子表。在两个表之间建立关联,必须以某一个字段为标准,该字段称为关键字段。表文件的关联可分为一对一关联、一对多关联和多对多关联。,2019/4/25,85,2表文件关联的建立 (1)一对一关联的建立【格式】SET RELATION TO | INTO | ADDITIVE 【功能】将当前工作区的表文件与(或工作区号)指定的工作区中的表文件按或建立关联。,2019/4/25,86,例, 将表文件STUDENT.DBF和SCORE.DBF以学号为关键字段建立关联。
38、 SELECT 2 & 建立工作区2 USE SCORE & 打开表文件SCORE.DBF INDEX ON 学号 TO XH & 建立学号标识 SELECT 1 & 建立工作区1 USE STUD & 打开表文件STUDENT.DBF SET RELATION TO 学号 INTO 2 & 建立一对一关联,2019/4/25,87,例,将表文件STUDENT.DBF和SCORE.DBF按数值表达式建立关联。 SELECT 2 & 建立工作区2 USE SCORE & 打开表文件SCORE.DBF SELECT 1 & 建立工作区1 USE STUDENT & 打开表文件STUDENT.DBF
39、 SET RELATION TO RECNO() INTO B,2019/4/25,88,3取消表的关联 【格式】 SET RELATION TO,2019/4/25,89,数据完整性,数据完整性包括实体完整性、域完整性和参照完整性。6.6.1 实体完整性与主关键字实体完整性是保证表中记录惟一的特性,即在一个表中不允许有重复的记录。在Visual FoxPro中利用主关键字或候选关键字来保证表中的记录惟一,即保证实体唯一性。在Visual FoxPro中将主关键字称作主索引,将候选关键字称作候选索引。由上所述,在Visual FoxPro中主索引和候选索引有相同的作用。,2019/4/25,9
40、0,6.6.2 域完整性与约束规则域完整性应该是读者最熟悉的了,以前所熟知的数据类型的定义属于域完整性的范畴。域约束规则也称作字段有效性规则,在插入或修改字段值时被激活,主要用于数据输入正确性的检验。字段有效性规则在表设计器中建立, “字段”选项卡中有一组定义字段有效性参数: “规则”(字段有效性规则)“信息”(违背字段有效性规则时的提示信息)“默认值”(字段的默认值)三项。,2019/4/25,91,例 以“订货管理”数据库中的职工表为例,设职工的工资有效性规则在1000至3000元之间,当输入的职工工资不在此范围时给出出错信息,职工的默认工资值是1200。 在“规则”框中(或表达式生成器)
41、输入表达式:工资=1000.AND.工资=3000在“信息”框中(或表达式生成器)输入表达式:“工资输入错误,应该在10003000元之间。”在“默认值” 框中(或表达式生成器)输入表达式:1200注意:“规则”是逻辑表达式,“信息”是字符串表达式,“默认值”的类型则以字段的类型确定。,2019/4/25,92,6.6.3 参照完整性与表之间的关联,建立表之间的联系父表和子表已建立永久关联。 设置参照完整性约束 (1)清理数据库建立参照完整性之前必须首先清理数据库,所谓清理数据库是物理删除数据库各个表中所有带有删除标记的记录。(只要数据库设计器为当前窗口,主菜单栏上就会出现“数据库”菜单,这时
42、可以在“数据库”菜单下选择“清理数据库” ) 该操作与命令PACK DATAEBASE功能相同。,2019/4/25,93,(2)编辑参照完整性 用鼠标右键单击表之间的联系并从快捷菜单中选择“编辑参照完整性”,打开的参照完整性生成器界面如图3.4所示 参照完整性规则包括更新规则、删除规则和插入规则。,图3.4 参照完整性规则,2019/4/25,94,更新规则规定了当更新父表中的连接字段(主关键字)值时,如何处理相关的子表中的记录: l 如果选择“级联”,则用新的连接字段值自动修改子表中的相关所有记录; l 如果选择“限制”,若子表中有相关的记录,则禁止修改父表中的连接字段值; l 如果选择“
43、忽略”,则不作参照完整性检查,可以随意更新父记录的连接字段值,2019/4/25,95,删除规则规定了当删除父表中的记录时,如何处理子表中相关的记录: l 如果选择“级联”,则自动删除子表中的相关所有记录; l 如果选择“限制”,若子表中有相关的记录,则禁止删除父 表中的记录; l 如果选择“忽略”,则不作参照完整性检查,即删除父表的记录时与子表无关。插入规则规定了当插入子表中的记录时,是否进行参照完整性检查: l 如果选择“限制”,若父表中没有相匹配的连接字段值则禁止插入子记录; l 如果选择“忽略”,则不作参照完整性检查,即可以随意插入子记录。,2019/4/25,96,例子, 为“学生管
44、理”数据库的student、course、score三个表设计参照完整性。 首先在学生管理数据库中建立表之间的联系,如图3.5所示。,图3.5 建立本例的联系,2019/4/25,97,CLEAR ALL 清理数据库 编辑参照完整性将它们的插入规则设定为“限制”,即插入SCORE记录时检查相关的STUDENT和COURSE是否存在,如果不存在则禁止插入SCORE记录。将它们的删除规则设定为“级联”,即在删除STUDENT记录和COURSE记录时,自动删除相关的SCORE记录。将它们的更新规则也设定为“级联”,即当修改STUDENT的学号或COURSE的课程号,也自动修改相关的SCORE记录。,2019/4/25,98,自由表与数据库表的相互转换,6.7.1 自由表自由表就是那些不属于任何数据库的表。,2019/4/25,99,6.7.2 “自由表” 与“数据库表”的表设计器界面区别,建立自由表的界面,建立数据库表的界面,2019/4/25,100,6.7.3 将自由表添加到数据库-自由表转换成数据库表,2019/4/25,101,6.7.4 将数据库表从数据库中移去-数据库表转换成自由表,