VFP第3章数据库与表的创建及使用.ppt
1,主讲:王学军电话:(移动校园网)电邮:办公地点:系部办公楼(原学生1号宿舍楼)507,Visual FoxPro教程,第3章 数据库与表的创建和使用,信息系统的基础是数据库。设计一个完善、高效、结构优化的数据库,是创建信息系统过程中必不可少的重要环节。在VFP中,表是数据的容器,系统使用表以行和列的形式存储数据,这些行和列就是记录和字段;数据库是表的容器,它联合、组织以及使用表和视图提供的结构和操作环境。,在VFP中,构建数据库也包含创建表。但要注意的是,数据库和表均以文件形式存储在磁盘上,其中数据库文件扩展名为.dbc、表文件扩展名为.dbf,只是表可以属于数据库管理。,本章要点,数据库概述数据库的创建、打开与使用表的创建与使用永久性关系与参照完整性有关数据库及其对象的常用函数,3.1 数据库概述,确定建立数据库的目的,进行数据需求分析。确定需要的各种表,即将信息分为若干个独立的主题,每个主题都将是数据库中的一个表。确定所需字段,也就是将在表中保存的信息。确定表之间的关系,形象而又直观地反映现实世界中各实体间的真正关系。改进设计、优化设计。,3.1.1 数据库设计的过程,数据库的概念设计,数据库的逻辑设计,3.1 数据库概述,3.1.2 数据库的组成,1.表(Table),属于某一数据库的表称为“数据库表”。与自由表相比,数据库表具有许多扩展功能和管理特性。表与数据库之间的相关性是通过表文件与库文件之间的双向链接(前链和后链)实现的。前链是保存在数据库文件中的表文件的路径和文件名信息;后链是存放在表文件中的数据库文件的路径和文件名信息。,2.视图(View),视图是从分散在相关表中的数据通过链接条件收集在一起的“虚表”。视图兼有表和查询的特点。,3.连接(Connection),连接是保存在数据库中的一个定义,它指定了数据源的名称。这里所说的数据源是指远程数据源,一个远程数据源通常是一个远程数据库服务器或文件,并且已为它在本地安装了ODBC驱动程序和设置了ODBC数据源名称。,4.存储过程(Stored Procedure),存储过程是在数据库数据上执行特定操作并储存在数据库文件中的程序代码。在数据库打开时会自动加载到内存中。,表中字段的标题、注释、默认值、输入掩码和显示格式,以及字段在表单中使用的默认控件类。表的主索引关键字数据库表之间的永久性关系长表名和表注释字段级和记录级有效性规则存储过程插入、更新和删除事件的触发器,3.1 数据库概述,3.1.3 数据字典,数据字典是指存储在数据库中用于描述所管理的表和对象的数据,即关于数据的数据(元数据)。数据字典可创建和指定如下内容:,界面操作方式创建数据库用项目管理器创建用菜单命令或工具栏创建命令方式创建数据库CREATE DATABASE DatabaseName|?数据库设计器与“数据库”菜单,3.2 数据库的创建、打开与使用,在VFP中,每创建一个数据库都将在磁盘上产生三个文件:数据库文件(.dbc)、关联的数据库备注文件(.dct)、关联的数据库索引文件(.dcx)。,3.2.1 数据库的创建,新建的数据库,保存后自动以独占方式打开;打开数据库中的表,系统会自动打开相应的数据库;在项目管理器中选择一个数据库并单击“修改”按钮;OPEN DATABASE DatabaseName EXCLUSIVE|SHAREDNOUPDATEVALIDATE打开多个数据库可重复进行数据库打开操作即可,系统默认最后一个打开的数据库为当前数据库。根据需要可用SET DATABASE TO命令将另一个被打开的数据库设为当前数据库或在“常用”工具栏“数据库”下拉列表中选择一个已打开的数据库作为当前数据库。,3.2.2 数据库的打开与关闭,打开数据库使用数据库前必须打开数据库,2.检查数据库的有效性,在使用命令打开数据库时若使用了VALIDATE关键字,则系统会检查数据库的有效性;也可在打开数据库后用VALIDATE DATABASE命令检查数据库的有效性和更新链接。VALIDATE DATABASE RECOVER TO PRINTER|TO FILE FileName,【注】RECOVER用于说明更新链接,缺省时仅检查数据库的有效性TO FILE用于说明检查结果信息的去向,缺省时在VFP主窗口显示;VALIDATE DATABASE命令只能处理以独占方式打开的当前数据库。,在项目管理器中选择要关闭的数据库后单击“关闭”按钮;使用CLOSE DATABASE命令关闭当前数据库;使用CLOSE DATABASE ALL关闭所有打开的数据库;关闭(退出)Visual FoxPro系统。,3.关闭数据库,【注】在关闭数据库时,从属于该数据库的表同时被关闭(如果表已被打开);使用CLOSE DATABASE命令可关闭当前数据库和表,若没有打开的数据库,则关闭所有工作区内所有打开的自由表、索引,并将当前工作区设为1。,用Windows操作系统删除;非正常删除用DELETE FILE命令删除;非正常删除在项目管理器中通过“移去”操作进行删除。正常删除,这样才能删除数据库中所包含的表的链接信息,数据库表将自动变成自由表。否则,只能用命令FREE TABLE 强行解除数据库与表间的链接,将表变成自由表。,4.删除数据库,删除数据库意味着删除存储在数据库中的一切数据,包括存储过程、视图、表之间的关系、数据字典等。,VFP中的表(Table)是指存放在磁盘文件中的一张二维表,通常用来描述一个实体。表中的一列称为字段(Field),字段规定了数据的特征。表中的一行称为记录(Record),记录是字段值的集合。表的记录必须用一个公共结构来存储,这个结构就是表结构。表分为数据库表(简称“表”)与自由表两种类型。表文件名队要遵守Windows中的约定外,不可使用AJ中的单个字母作为文件名,且最好不要包含空格字符。,3.3 表的创建与使用,字段名:用以在表中标识该字段。字段的数据类型:表中每个字段都有特定的数据类型(参见课本P.76表3-1)字段的宽度:是指该字段所能容纳数据的最大字节数。有一些数据类型的宽度是固定的。小数位数:对于数值型、浮点型和双精度型的字段,可以指定其小数的位数。如数据的整数部分不为0,则整个宽度至少应比小数位数大2,如是纯小数,则整个宽度只要比小数位数大1。空值支持(NULL):通过使用空值(NULL),就有了一个判定某个字段是否具有一个值的办法。,3.3.1 表结构概述,3.3 表的创建与使用,用“表设计器”创建表结构项目中的表:项目自由表新建新表保存(表向导另存为保存)非项目中的表:新建新建文件保存(向导另存为保存),3.3.2 创建和修改表结构,【注】在“表设计器”中创建结构完成后,会出现一对话框,问你是否立即输入数据。如果要立即输入数据,可单击“是”按钮,否则单击“否”按钮。创建表结构后,在磁盘上会生成扩展名为.DBF和.FPT的两个文件。,用“表设计器”修改表结构项目表修改或用命令MODIFY STRUCTURE表设计器,字段的标题和注释标题:浏览表时代表字段的标签,但引用字段时必须使用其字段名。注释:字段的说明信息,在项目管理器中选择一个字段时,在窗口下部将显示该注释。字段的显示属性格式(Format):用于指定输入和显示时的格式(对输入字段值的整体约束)。P.79表3-2输入掩码(InputMask):用于指定字段中输入数据的格式(对输入字段的每位约束)。P.79表3-3,3.3.3 字段属性与表属性,1.字段的扩展属性,2023/7/8,17,默认值为字段所指定的最初的值。设定默认值时必须是一个与字段类型相同的表达式。如果字段设置为允许Null,则字段默认值可设置为“Null”,否则字段的默认值不可设置为“Null”。如果用户未指定字段的默认值且字段不允许为空值,则系统按下表所述的方式设置字段的默认值。,字段的有效性规则和有效性信息字段有效性规则:用来控制输入到字段中的数据的取值范围。该规则是一个包含当前字段的逻辑表达式,如果输入的值不满足规则要求(即逻辑表达式的值为.F.)则拒绝该字段值并显示一个消息框。字段有效性信息:也称字段有效性说明,是一个字符型表达式,通常与字段的有效性规则配合使用,用于指定在不满足规则要求时所显示的消息框中的说明信息。字段的默认控件类作用是指定使用“表单向导”生成表单或从数据环境中将字段拖放到表单上时,与该字段相应的控件类。,显示打开 用菜单等界面操作方法或USE命令直接打开表隐式打开 指在执行某些操作时系统会自动打开相应的表。如在项目管理器窗口中选择一个表后单击“修改”或“浏览”按钮时,会自动打开表;在执行SELECT-SQL语句进行查询时,也会自动打开数据源表等。,3.3.4 表的打开与关闭,在VFP中,表使用前必须打开。表的打开可以是显式打开,也可以是隐式打开。,概念 在打开一张表时,必须为该表指定一个“工作区”。它是用以标志一张打开的表的区域。编号132767,前10个也可用AJ工作区中表的别名USE 表文件名 ALIAS 别名函数ALIAS(工作区号)可得到指定工作区的表别名。函数SELECT(别名)可测试指定表别名的工作区号。当前工作区 在“数据工作期”中设置当前工作区命令:SELECT 工作区号|别名,3.3.4 表的打开与关闭,1.工作区,【注】操作非当前工作区中的表的方法:一是把非当前工作区的表选为当前工作区(用SELECT命令);二是在命令中强行指定工作区(用IN 工作区号|别名)如:GO TOP IN js。SELECT 0 指将未被使用的编号最小的工作区设为当前工作区,2.数据工作期窗口,数据工作期窗口是当前数据动态工作环境的一种表示。VFP启动后,系统自动生成一个数据工作期,称为“默认工作期”。数据工作期窗口的打开方法:窗口数据工作期常用工具栏上的“数据工作期窗口”按钮,界面方式文件打开 数据工作期打开项目管理器修改或浏览在命令窗口中用命令USE?打开“使用”窗口命令方式USE 表名 IN 别名|区号AGAINALIAS 表别名;NOUPDATE,3.表的打开,【注】如一张表同时在多个工作区中打开且均未指定别名,则在第一次打开的工作区中,别名与表名相同,其他工作区中用AJ以及W11W32767表示。,界面方式在数据工作期中关闭命令方式USE IN 别名|工作区关闭所有的表 CLOSE TABLES ALLCLOSE DATABASE ALLCLOSE ALL,4.表的打开,【注】在退出Visual FoxPro系统时,所有的表都将被关闭。,设置独占与共享打开表的默认状态 工具选项数据 SET EXCLUSIVE ON默认“共享”打开 SET EXCLUSIVE OFF默认“独占”打开强行用一种方式打开表 在“打开”窗口中设置 USE 表名 SHARED|EXCLUSIVE,5.表的独占与共享,【注】当一个表被多次打开时,只能以第一次打开方式为准。SET EXCLUSIVE的设置并不能改变已经打开表的状态。,表结构创建后立即输入记录在浏览窗口中追加记录菜单命令“表”“追加新记录”菜单命令“显示”“追加方式”使用INSERT-SQL命令追加记录INSERT INTO 表名(字段名1,字段名2,);VALUES(表达式1,表达式2,)举例:INSERT INTO xs(xh,xm,xb,xzydm);VALUES(050503017,高山,男,050301),3.3.5 记录的处理,1.记录的输入,【注】VALUES后面括号中的具体记录的值要和INSERT INTO后面的字段名列表保持位置和类型上的一致。,使用APPEND与APPEND FROM命令追加记录APPEND BLANKIN 工作区号|别名APPEND FROM 文件名FIELDS 字段列表FOR 条件;DELIMITED|XLS 其中,DELIMITED用于说明追加文件为文本文件;XLS用于说明追加文件为Excel文件,缺省时追加文件为表文件。该命令也可通过界面完成:“表”“追加记录”备注型字段与通用型字段的数据输入备注型:浏览窗口中,备注型字段上显示memo表示无内容;Memo表示有内容。备注型字段内容输入方法是光标定位到该字段上,按+或双击通用型:浏览窗口中,通用型字段上显示gen表示无内容;Gen表示有内容。通用型字段内容输入方法同上,然后再用菜单命令“编辑”“插入对象”插入其内容。,界面菜单命令“显示”“浏览”(编辑)命令BROWSE FIELDS 字段列表FOR 条件;RREEZE 字段名NOAPPEND;NODELETE NOMODIFYTITLE 表达式例:CLOSE TABLES ALL USE xs BROWSE FIELDS xh,xm FOR xb=女;NOMODIFY TITLE 女学生,2.浏览窗口,3.记录的筛选(横向筛选),界面 菜单命令“表”“属性”“数据过滤器”命令SET FILTER TO 条件,界面菜单命令“表”“属性”“字段筛选”命令SET FIELD TO 字段列表SET FIELD TO ALL列出所有字段(取消筛选),4.限制对字段的访问(纵向筛选),5.记录定位,(1)记录指针,表被打开后,有三个控制记录的标志:开始标志、指针标志、结束标志。每当打开表文件时,指针总是指向第一个记录。,【注】RECNO()测试当前记录指针的位置,开始标志用BOF()测试,结束标志用EOF()测试。打开表时记录指针情况如下表:,记录指针的初始值总是1,不可能为0或负数,最大值是表中记录总数+1。,界面操作表转到记录 在浏览窗口移动光标“记录号”:绝对定位“定位”:条件定位 范围选项有ALL、NEXT、RECORD n、REST,5.记录定位,(2)记录定位的实现,【注】若定位时未找到相应记录,则指针指向指定范围的结尾。,使用命令 绝对定位:GOTO 记录号|TOP|BOTTOM IN 区号|别名 相对定位:SKIP nRecords 条件定位:LOCATE FOR 条件表达式 范围,(2)记录定位的实现,【注】若从第一条记录向上移动一条记录,记录指针指向开始标志,BOF()函数值为.T.,RECNO()值仍为1。若再执行SKIP-1命令,系统将显示出错信息“已到文件头”,此时记录指针仍然指向记录开始标志。若从最后一条记录向下移动一条记录,记录指针指向结束标志,EOF()函数值为.T.,RECNO()值为表记录数加1。若再执行SKIP命令,系统将显示出错信息“已到文件尾”,此时记录指针仍然指向记录结束标志。如果表有一个主控索引,SKIP命令将使记录指针移动到索引顺序决定的记录上。对于条件定位来说,可使用CONTINUE命令从当前记录继续进行条件定位到下一条满足条件的记录。,界面方式的记录修改对于当前工作区中的表,可在浏览窗口中修改记录批量修改:在浏览表状态下,用菜单“表”“替换字段”,6.记录的修改,使用命令修改记录UPDATE命令 UPDATE 表名 SET 字段名1=表达式1;,字段名2=表达式2WHERE 条件REPLACE命令REPLACE 字段名1 WITH 表达式1 ADDITIVE;,字段名2 WITH 表达式2 ADDITIVE范围FOR 条件,6.记录的修改,【注】REPLACE命令只能用于修改当前工作区打开的表,而UPDATE命令在执行时不需事先打开表,系统会自动在最小未使用的工作区中打开表;ADDITIVE仅对备注型字段有效,使用时表示替换的内容追加到原备注中,否则替换原内容;,UPDATE命令中没有“范围”选项;缺省WHERE选项时更新所有记录,执行完记录指针指向最后一条记录;带有WHERE选项时更新满足条件的所有记录,执行完记录指针指向满足条件的最后一条记录上。REPLACE命令中有“范围”选项和”FOR条件“选项,用法比较复杂:两者都有时,表明更新指定范围内满足条件的记录,执行完指针指向指定范围的末尾记录;两者均缺省时,仅对当前记录(一条记录)进行替换;只有“范围”选项,替换指定范围内所有记录,执行完指针指向指定范围的末尾记录;只有FOR子句,则替换表中所有满足条件的记录,执行完指针指向表中最后一条记录。UPDATE命令执行时虽然可自动打开要更新的表,但不会改变当前工作区。,标记要删除的记录(逻辑删除)浏览表时,手动删除浏览表时,用菜单“表”“删除记录”打开“删除”对话框进行删除DELETE-SQL命令删除:DELETE FROM 表名 WHERE 条件DELETE命令删除:DELETE 范围FOR 条件IN 工作区|别名,7.记录的删除与恢复,【注】DELETE-SQL命令执行时不需事先打开表,系统会自动在最小未使用的工作区中打开表,但不改变当前工作区;其WHERE选项的使用情况同UPDATE命令。DELETE命令执行时必须先打开表,其“范围”和“FOR”子句的使用同REPLACE命令。,恢复带删除标记的记录RECALL 范围FOR 条件(两个可选项的使用同DELETE命令)彻底删除记录(物理删除)在表浏览状态,用菜单“表”“彻底删除”对当前工作区中的表,用命令PACK用ZAP命令物理删除当前工作区中打开表的所有记录而不论记录是否有删除标记对带有删除标记的记录的访问对带有删除标记的记录,在默认情况下有些命令仍然可以对其进行操作,而有些命令则忽略这些记录。可用SET DELETED ON|OFF来指定VFP是否处理带有删除标记的记录,但该设置也不是对所有命令或函数起作用。DELETE()函数可用于测试记录是否被删除。,该命令只能用于当前工作区中打开的表的数据复制缺省FIELDS子句则复制表中所有字段,但如果复制产生的文件不是默认的表文件,则即使备注字段包含在字段列表中,也不把备注字段复制到新文件中SDF选项指明产生的新文件类型为文本文件(.TXT)而XLS选项指明产生文件为电子表格文件(.XLS),8.数据的复制,COPY TO 文件名 FIELDS 字段列表范围;FOR 条件SDF|XLS,例:USE xsCOPY TO xs01 FOR xb=女COPY TO xs01 FIELD xh,xm SDFCOPY TO xs01 XLS,记录的物理顺序按输入记录时间顺序实际存放的顺序,用记录号来标识不同的记录,函数RECNO()可测试当前记录号。记录的逻辑顺序为实现对表记录的快速查询,可根据需要对表文件中的记录按某个字段(单字段索引)或某些字段(多字段索引)值排序,这就是逻辑顺序。,3.3.6 索引的创建与使用,1.索引概述,【注】索引排序并没有真正更改表记录的物理顺序,只是建立了一个逻辑顺序与原表物理顺序的记录号之间的对照表,并把对照表保存到一个索引文件中。,字符+字符:数值+字符:数值+数值:日期+字符:其它:逻辑型、物理顺序等一升序一降序问题:,2.索引表达式,索引表达式也叫索引关键字,它是建立一个索引的排序依据,通常是一个字段或由多个字段组成的表达式。需注意:不能基于备注字段或通用字段建立索引。如索引表达式是基于多个字段的,系统将根据整个表达式的值进行排序。书写表达式时要注意:,普通索引:索引表达式的值允许重复,即在普通索引上查找的记录不具有唯一性。一个表可以创建多个普通索引。唯一索引:索引表达式的值可以重复,但在索引文件中重复的值仅存储一次。一个表可以创建多个唯一索引。,3.索引类型,在VFP中,表的索引类型总共有4种:主索引、候选索引、唯一索引、普通索引。其中,主索引只能在数据库表中创建。当数据库表移出数据库变成自由表时,索引仍然有效,只是主索引将自动变成候选索引。,候选索引:以表的候选关键字为索引表达式而创建的索引,所以,对于表中记录来说,指定的索引表达式的值不可重复。如果在任何已经含有重复数据的字段中指定候选索引,系统将产生错误信息;如果表已经建立了候选索引,在追加新记录或修改记录时,系统会检测索引表达式的值是否有重复,如有重复则拒绝接收数据的输入或修改。一个表可以建立多个候选索引。主索引:对于数据库表来说,可以从候选索引中选取一个作为主索引。每个数据库表只能创建一个主索引,且主索引的索引表达式在表的所有记录中不允许有重复的值,也不允许NULL值。,注:在实际应用中,一个表一般创建一个主索引,根据需要可创建多个普通索引。,结构复合索引文件将表的一个或多个索引的索引信息存储在一个索引文件中,且索引文件名与表名相同,扩展名为.CDX。结构复合索引能自动地与表同步打开、更新和关闭。不要建立无用的索引,过多索引将会降低系统性能。非结构复合索引文件与结构复合索引文件一样,索引文件扩展名为.CDX,但其文件名不与表同名,非结构复合索引也不会随表的打开而自动打开。独立索引文件只存储一种索引的索引文件,其扩展名为.IDX,文件名由用户指定。与非结构复合索引一样,独立索引也不会随表的打开而自动打开。,4.索引文件的类型,排序:对索引表达式值的整体升序或降序,默认为升序。索引名:也叫索引标识(Tag),其长度最多10个。筛选:指定仅有符合条件的记录参加索引。,5.使用表设计器创建结构复合索引,使用USE命令打开表时,通过ORDER子句指定主控索引。如:USE xs ORDER xh&主控索引为xh界面方式:表浏览状态,菜单“表”“属性”“工作区属性”“索引顺序”如果表已经打开,用SET ORDER TO命令设置主控索引:SET ORDER TO 索引标识名IN 工作区|别名ASCENDING|DESCENDING,6.索引的使用,起作用的索引,(1)设置主控索引,SEEK 表达式 ORDER 索引标识名IN 工作区|别名ASCENDING|DESCENDING 如:USE xs ORDER xh SEEK“040701004”,(2)利用索引快速定位,【注】SEEK命令可在表中搜索指定表达式的值首次出现的记录,这个记录的索引关键字必须与指定表达式类型匹配。SEEK命令只能在索引过的表中使用,且只能基于索引关键字进行搜索。如果找到与索引关键字相匹配的记录,则RECNO()返回定位的记录号,FOUND()函数返回.T.,EOF()函数返回.F.;否则RECNO()函数返回表中记录数加1,FOUND()函数返回.F.,EOF()函数返回.T.。,3.3.7 自由表,自由表就是不隶属于任何一个数据库的表。自由表的创建与数据库表的创建相似,但自由表不能创建数据库表的那些扩展属性,也不能创建主索引,不能建立表间的永久性关系与设置参照完整性等。自由表可以添加到数据库中,使之成为一个数据库表(此时该表可以设置数据库表的一切属性);反之,可以将一个数据库表从数据库中移出,使之成为一个自由表。注意:一个数据库表变成自由表后,一切扩展属性均自动丢失,索引仍然保留,如果有主索引将自动变成候选索引。,用CREATE-SQL命令创建表结构CREATE TABLE 表文件名(字段名1 字段类型;(字段宽度,小数位数)NULL|NOT NULL;,字段名2,)例:学生表结构的创建用命令实现。Create Table xs(xh C(8),xm C(8),xb C(2),zydh C(6)Create Table js(gh C(5),xm C(8),gzrq D,jbgz N(7,2),jl M)【注】上面建立的表结构是针对“自由表”而言,而“数据库表”是属于某一数据库的,所以要在项目列表中先选择已存在的数据库,然后再点“新建”,后面方法同上。“数据表”还可以通过添加已有的“自由表”而产生。,3.3.8 利用命令创建和修改表结构,用ALTER TABLE-SQL命令更改表的结构添加字段 ALTER TABLE xs ADD COLUMN bjmc c(12)重命名字段 ALTER TABLE xs RENAME COLUMN bjmc TO bj删除字段 ALTER TABLE xs DROP COLUMN bj修改字段ALTER TABLE xs ALTER COLUMN xh c(6),3.3.8 利用命令创建和修改表结构,一对一关系 设A、B两张表,A表中的一个记录在B表中只有一个记录与之对应,B表中的一个记录在A表中也只有一个记录与之对应。在很多情况下,两张表可以简单地合并成一个表。一对多关系 如A表中的任意一个记录在B表中可有多个记录与之对应,而B表中的每个记录,在A表中仅有一个记录与之对应,则称两表之间存在一对多关系。A为主表,B为子表。,3.4 永久性关系与参照完整性,3.4.1 表之间的永久性关系,1.表之间关系的类型,多对多关系 若A表的一个记录在B表中可对应多个记录,而B表中的一个记录在A表中也对应多个记录,则称为多对多关系。遇到多对多关系时,必须建立第三张表,把多对多关系分解成两个一对多关系。第三张表就称作“纽带表”。把两张表的主关键字都放在这个纽带表中。对于纽带表,除了包含两个外部关键字外,还可以有其他字段。纽带表的主关键字可以由两个外部关键字组成。,它是库表之间的一种关系,不仅在运行时存在,而且一直保留,拥有永久关系的表必须的数据库中。表间的永久关系是通过索引建立的,永久关系的类型决定了所使用的索引的类型:在一对多中,主表必用主索引关键字(或侯选索引关键字),子表则用普通索引关键字;一对一中,两张表都用主索引关键字(或侯选索引关键字)。,2.表之间的永久关系,(1)永久关系的作用 在“查询(视图)设计器”中,自动作为默认联接条件;作为表单和报表的默认临时关系,在“数据环境设计器”中显示 用来存储参照完整性信息。,(2)永久关系的建立确定两张具有一对多或一对一关系的表建立主表的主索引或侯选索引如是一对多,在子表中以外部关键字建立普通索引;如是一对一,在子表中以与主表相同的关键字建立主索引或侯选索引。建立主表与子表的永久关系,即在数据库设计窗口中,将主表的主索引或候选索引标识拖放到子表相应的索引标识上。(3)删除、编辑永久关系 在“数据库设计器”中单击关系连线后(这时连线变粗),按键;编辑关系时,可双击连线打开“编辑关系”对话框进行编辑修改。,“参照完整性”是用来控制数据的一致性,尤其是控制数据库相关表之间的主关键字和外部关键字之间数据一致性的规则。1.参照完整性的一般要求(一对多或一对一)子表的每一个记录在对应的父表中有一个父记录。在父表中修改记录时,如改了主关键字的值,则子表中相关记录的外部关键字值必须同时改。在子表中插入记录时,其外部关键字必须是主表主关键字值中的一个。在父表中删除记录,与该记录相关的子表中的记录必须全部删除。,3.4.2 参照完整性,2023/7/8,55,用“参照完整性生成器”完成。参照完整性规则包括更新规则、删除规则、插入规则。,2.参照完整性的设置,父表:显示一个关系中的父表名子表:显示一个关系中的子表名更新:可取“级联”、“限制”、“忽略”删除:可取“级联”、“限制”、“忽略”插入:可取“限制”、“忽略”父标记:建立该永久性关系的父表的主索引(或候选索引)标识名子标记:建立该永久性关系的子表的索引标识名,【注】在利用“参照完整性生成器”对话框设置参照完整性规则时,系统会自动地生成完成该规则的程序代码。规则的代码被保存在数据库的存储过程中,而规则的实施由主表和子表的触发器完成(系统会自动地设置表的触发器。),完整性包括:实体完整性、参照完整性和用户自定义完整性。实体完整性包括两级:(通过对应的有效性规则实现)字段的数据完整性:输入到字段的数据的类型或值必须符合某个特定的要求。记录的数据完整性:为记录赋予数据完整性规则。参照完整性:指相关表之间的数据一致性。用户自定义完整性:指由用户通过编程实现对数据完整性的约束。,3.4.3 Visual FoxPro数据完整性综述,SELECT(0|1|别名):测试工作区号 0当前工作区号。1当前未被使用最大工作区号。别名表别名所在的工作区号,别名必加引号。USED(区号|别名):测试指定表或工作区是否打开。ALIAS(区号):测试指定工作区中的表别名。FIELD(字段顺序号,区号|别名):返回已打开表的指定序号的字段名。FCOUNT(区号|别名):返回已打开表的字段数。DELETE():测试表的当前记录是否带删除标记。,3.5 有关数据库及其对象的常用函数,DBC()与DBUSED()函数DBC():返回当前打开的数据库的完整文件名(字符型)DBUSED():返回指定数据库文件是否已打开(逻辑型)DBGETPROP()函数 返回当前数据库或数据库中字段、表、视图的属性。语法:DBGETPROP(cName,cType,cProperty)cName:指定数据库、字段、表或视图的名称cType:指定cName是否为当前数据库,或当前数据库中的一个字段、表或视图cProperty:指定属性名称例如:?DBGETPROP(Cj.cj,FIELD,Caption)查看Cj表的cj字段的标题,字段名前面的表名不要省。,2023/7/8,60,DBSETPROP()函数 给当前数据库或当前数据库中的一个字段、表或视图设置属性。在主窗口中显示.T.或.F.。语法:DBSETPROP(cName,cType,cProperty,ePropertyValue)ePropertyValue:指定cProperty的设定值 例如:?DBSETPROP(“Xs.xh,FIELD,Caption,学号),【注】DBGETPROP()函数的类型允许值有DATEBASE、TABLE、FIELD、VIEW;DBSETPROP()函数的常用属性名有Caption、DefaultValue、PrimaryKey、RuleExpression、RuleText,Thank You!,