《VFP数据库与表的创建及使用课件.pptx》由会员分享,可在线阅读,更多相关《VFP数据库与表的创建及使用课件.pptx(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/5/291第第3 3章章 数据库与表的创建和使用数据库与表的创建和使用 信息系统的基础是数据库。设计一个完善、高效、结构优化的数据库,是创建信息系统过程中必不可少的重要环节。在VFP中,表是数据的容器表是数据的容器,系统使用表以行和列的形式存储数据,这些行和列就是记录和字段;数据库是表的容器数据库是表的容器,它联合、组织以及使用表和视图提供的结构和操作环境。在VFP中,构建数据库也包含创建表。但要注意的是,数据库数据库和表表均以文件形式存储在磁盘上,其中数据库文件扩展名为.dbc、表文件扩展名为.dbf,只是表可以属于数据库管理。2023/5/292本章要点本章要点数据库概述数据库的
2、创建、打开与使用表的创建与使用永久性关系与参照完整性有关数据库及其对象的常用函数2023/5/2933.1 3.1 数据库概述数据库概述确定建立数据库的目的,进行数据需求分析。确定需要的各种表,即将信息分为若干个独立的主题,每个主题都将是数据库中的一个表。确定所需字段,也就是将在表中保存的信息。确定表之间的关系,形象而又直观地反映现实世界中各实体间的真正关系。改进设计、优化设计。3.1.1 数据库设计的过程 数据库的概念设计数据库的概念设计数据库的逻辑设计数据库的逻辑设计2023/5/2943.1 3.1 数据库概述数据库概述3.1.2 数据库的组成 1.表表(Table)属于某一数据库的表称
3、为“数据库表”。与自由表相比,数据库表具有许多扩展功能和管理特性。表与数据库之间的相关性是通过表文件与库文件之间的双向链接(前链和后链)实现的。前链是保存在数据库文件中的表文件的路径和文件名信息;后链是存放在表文件中的数据库文件的路径和文件名信息。数据库文件数据库文件数据库文件数据库文件前链前链前链前链前链前链前链前链后链后链表文件表文件后链后链表文件表文件后链后链表文件表文件后链后链表文件表文件2023/5/2952.视图视图(View)视图是从分散在相关表中的数据通过链接条件收集在一起的“虚表”。视图兼有表和查询的特点。3.连接连接(Connection)连接是保存在数据库中的一个定义,它
4、指定了数据源的名称。这里所说的数据源是指远程数据源,一个远程数据源通常是一个远程数据库服务器或文件,并且已为它在本地安装了ODBC驱动程序和设置了ODBC数据源名称。4.存储过程存储过程(Stored Procedure)存储过程是在数据库数据上执行特定操作并储存在数据库文件中的程序代码。在数据库打开时会自动加载到内存中。2023/5/296表中字段的标题、注释、默认值、输入掩码和显示格式,以及字段在表单中使用的默认控件类。表的主索引关键字数据库表之间的永久性关系长表名和表注释字段级和记录级有效性规则存储过程插入、更新和删除事件的触发器3.1 3.1 数据库概述数据库概述3.1.3 数据字典
5、数据字典是指存储在数据库中用于描述所管理的表和对象的数据,即关于数据的数据(元数据元数据)。数据字典可创建和指定如下内容:2023/5/297界面操作方式创建数据库用项目管理器创建用菜单命令或工具栏创建命令方式创建数据库CREATE DATABASE DatabaseName|?数据库设计器与“数据库”菜单3.2 3.2 数据库的创建、打开与使用数据库的创建、打开与使用 在VFP中,每创建一个数据库都将在磁盘上产生三个文件:数据库文件数据库文件(.dbc)、关联的数据库备注数据库备注文件文件(.dct)、关联的数据库索引文件数据库索引文件(.dcx)。3.2.1 数据库的创建2023/5/29
6、8新建的数据库,保存后自动以独占方式打开;打开数据库中的表,系统会自动打开相应的数据库;在项目管理器中选择一个数据库并单击“修改”按钮;OPEN DATABASE DatabaseName EXCLUSIVE|SHAREDNOUPDATEVALIDATE打开多个数据库可重复进行数据库打开操作即可,系统默认最后一个打开的数据库为当前数据库。根据需要可用SET DATABASE TO命令将另一个被打开的数据库设为当前数据库或在“常用”工具栏“数据库”下拉列表中选择一个已打开的数据库作为当前数据库。3.2.2 数据库的打开与关闭1.打开数据库使用数据库前必须打开数据库2023/5/2992.检查数据
7、库的有效性 在使用命令打开数据库时若使用了VALIDATE关键字,则系统会检查数据库的有效性;也可在打开数据库后用VALIDATE DATABASE命令检查数据库的有效性和更新链接。VALIDATE DATABASE RECOVER TO PRINTER|TO FILE FileName【注】RECOVER用于说明更新链接,缺省时仅检查数据库的有效性TO FILE用于说明检查结果信息的去向,缺省时在VFP主窗口显示;VALIDATE DATABASE命令只能处理以独占方式打开的当前数据库。2023/5/2910在项目管理器中选择要关闭的数据库后单击“关闭”按钮;使用CLOSE DATABASE
8、命令关闭当前数据库;使用CLOSE DATABASE ALL关闭所有打开的数据库;关闭(退出)Visual FoxPro系统。3.关闭数据库【注】在关闭数据库时,从属于该数据库的表同时被关闭(如果表已被打开);使用CLOSE DATABASE命令可关闭当前数据库和表,若没有打开的数据库,则关闭所有工作区内所有打开的自由表、索引,并将当前工作区设为1。2023/5/2911用Windows操作系统删除;非正常删除用DELETE FILE命令删除;非正常删除在项目管理器中通过“移去”操作进行删除。正常删除,这样才能删除数据库中所包含的表的链接信息,数据库表将自动变成自由表。否则,只能用命令FREE
9、 TABLE 强行解除数据库与表间的链接,将表变成自由表。4.删除数据库 删除数据库意味着删除存储在数据库中的一切数据,包括存储过程、视图、表之间的关系、数据字典等。2023/5/2912VFP中的表(Table)是指存放在磁盘文件中的一张二维表,通常用来描述一个实体。表中的一列称为字段(Field),字段规定了数据的特征。表中的一行称为记录(Record),记录是字段值的集合。表的记录必须用一个公共结构来存储,这个结构就是表结构。表分为数据库表(简称“表”)与自由表两种类型。表文件名队要遵守Windows中的约定外,不可使用AJ中的单个字母作为文件名,且最好不要包含空格字符。3.3 3.3
10、表的创建与使用表的创建与使用2023/5/2913字段名字段名:用以在表中标识该字段。字段的数据类型字段的数据类型:表中每个字段都有特定的数据类型(参见课本P.76表3-1)字段的宽度字段的宽度:是指该字段所能容纳数据的最大字节数。有一些数据类型的宽度是固定的。小数位数小数位数:对于数值型、浮点型和双精度型的字段,可以指定其小数的位数。如数据的整数部分不为0,则整个宽度至少应比小数位数大2,如是纯小数,则整个宽度只要比小数位数大1。空值支持(空值支持(NULLNULL):通过使用空值(NULL),就有了一个判定某个字段是否具有一个值的办法。3.3.1 表结构概述3.3 3.3 表的创建与使用表
11、的创建与使用2023/5/2914用“表设计器”创建表结构项目中的表:项目自由表新建新表保存(表向导另存为保存)非项目中的表:新建新建文件保存(向导另存为保存)3.3.2 创建和修改表结构【注注】在在“表设计器表设计器”中创建结构完成后,会出现一中创建结构完成后,会出现一对话框,问你是否立即输入数据。如果要立即输入数对话框,问你是否立即输入数据。如果要立即输入数据,可单击据,可单击“是是”按钮,否则单击按钮,否则单击“否否”按钮。创建按钮。创建表结构后,在磁盘上会生成扩展名为表结构后,在磁盘上会生成扩展名为.DBF.DBF和和.FPT.FPT的两的两个文件。个文件。用“表设计器”修改表结构项目
12、表修改或用命令MODIFY STRUCTURE表设计器2023/5/2915字段的标题和注释标题:浏览表时代表字段的标签,但引用字段时必须使用其字段名。注释:字段的说明信息,在项目管理器中选择一个字段时,在窗口下部将显示该注释。字段的显示属性格式(Format):用于指定输入和显示时的格式(对输入字段值的整体约束)。P.79表3-2输入掩码(InputMask):用于指定字段中输入数据的格式(对输入字段的每位约束)。P.79表3-33.3.3 字段属性与表属性1.字段的扩展属性2023/5/2916默认值为字段所指定的最初的值。设定默认值时必须是一个与字段类型相同的表达式。如果字段设置为允许N
13、ull,则字段默认值可设置为“Null”,否则字段的默认值不可设置为“Null”。如果用户未指定字段的默认值且字段不允许为空值,则系统按下表所述的方式设置字段的默认值。字段数据类型默认值字符型长度与字段宽度相等的空串数值型、整型、双精度型、浮点型、货币型0逻辑型.F.备注型、通用型(无)日期型、日期时间型空的日期2023/5/2917字段的有效性规则和有效性信息字段有效性规则:用来控制输入到字段中的数据的取值范围。该规则是一个包含当前字段的逻辑表达式,如果输入的值不满足规则要求(即逻辑表达式的值为.F.)则拒绝该字段值并显示一个消息框。字段有效性信息:也称字段有效性说明,是一个字符型表达式,通
14、常与字段的有效性规则配合使用,用于指定在不满足规则要求时所显示的消息框中的说明信息。字段的默认控件类作用是指定使用“表单向导”生成表单或从数据环境中将字段拖放到表单上时,与该字段相应的控件类。2023/5/2918显示打开显示打开 用菜单等界面操作方法或USE命令直接打开表隐式打开隐式打开 指在执行某些操作时系统会自动打开相应的表。如在项目管理器窗口中选择一个表后单击“修改”或“浏览”按钮时,会自动打开表;在执行SELECT-SQL语句进行查询时,也会自动打开数据源表等。3.3.4 表的打开与关闭 在VFP中,表使用前必须打开。表的打开可以是显式打开,也可以是隐式打开。2023/5/2919概
15、念 在打开一张表时,必须为该表指定一个“工作区”。它是用以标志一张打开的表的区域。编号132767,前10个也可用AJ工作区中表的别名USE 表文件名 ALIAS 别名函数ALIAS(工作区号)可得到指定工作区的表别名。函数SELECT(别名)可测试指定表别名的工作区号。当前工作区 在“数据工作期”中设置当前工作区命令:SELECT 工作区号|别名3.3.4 表的打开与关闭1.工作区2023/5/2920【注】操作非当前工作区中的表的方法:一是把非当前工作区的表选为当前工作区(用SELECT命令);二是在命令中强行指定工作区(用IN 工作区号|别名)如:GO TOP IN js。SELECT
16、0 指将未被使用的编号最小的工作区设为当前工作区2.数据工作期窗口 数据工作期窗口是当前数据动态工作环境的一种表示。数据工作期窗口是当前数据动态工作环境的一种表示。VFPVFP启动后,系统自动生成一个数据工作期,称为启动后,系统自动生成一个数据工作期,称为“默认工作期默认工作期”。数据工作期窗口的打开方法:。数据工作期窗口的打开方法:窗口窗口数据工作期数据工作期常用工具栏上的常用工具栏上的“数据工作期窗口数据工作期窗口”按钮按钮2023/5/2921界面方式文件打开 数据工作期打开项目管理器修改或浏览在命令窗口中用命令USE?打开“使用”窗口命令方式USE 表名 IN 别名|区号AGAINAL
17、IAS 表别名;NOUPDATE3.表的打开【注注】如如一一张张表表同同时时在在多多个个工工作作区区中中打打开开且且均均未未指指定定别别名名,则则在在第第一一次次打打开开的的工工作作区区中中,别别名名与与表表名名相同,其他工作区中用相同,其他工作区中用AJAJ以及以及W11W32767W11W32767表示。表示。2023/5/2922界面方式在数据工作期中关闭命令方式USE IN 别名|工作区关闭所有的表 CLOSE TABLES ALLCLOSE DATABASE ALLCLOSE ALL4.表的打开【注注注注】在在在在退退退退出出出出Visual Visual Visual Visual
18、 FoxProFoxProFoxProFoxPro系系系系统统统统时时时时,所所所所有有有有的的的的表表表表都都都都将将将将被关闭。被关闭。被关闭。被关闭。2023/5/2923设置独占与共享打开表的默认状态 工具选项数据 SET EXCLUSIVE ON默认“共享”打开 SET EXCLUSIVE OFF默认“独占”打开强行用一种方式打开表 在“打开”窗口中设置 USE 表名 SHARED|EXCLUSIVE5.表的独占与共享【注注】当当一一个个表表被被多多次次打打开开时时,只只能能以以第第一一次次打打开开方方式式为为准准。SET EXCLUSIVE的的设设置置并并不不能能改改变变已已经打开
19、表的状态。经打开表的状态。2023/5/2924表结构创建后立即输入记录在浏览窗口中追加记录菜单命令“表表”“追加新记录追加新记录”菜单命令“显示显示”“追加方式追加方式”使用INSERT-SQL命令追加记录INSERT INTO 表名(字段名1,字段名2,);VALUES(表达式1,表达式2,)举例:INSERT INTO xs(xh,xm,xb,xzydm);VALUES(050503017,高山,男,050301)3.3.5 记录的处理1.记录的输入【注注】VALUESVALUES后后面面括括号号中中的的具具体体记记录录的的值值要要和和INSERT INSERT INTOINTO后面的字
20、段名列表保持位置和类型上的一致。后面的字段名列表保持位置和类型上的一致。2023/5/2925使用使用APPEND与与APPEND FROM命令追加记录命令追加记录APPEND BLANKIN 工作区号|别名APPEND FROM 文件名FIELDS 字段列表FOR 条件;DELIMITED|XLS 其中,DELIMITED用于说明追加文件为文本文件;XLS用于说明追加文件为Excel文件,缺省时追加文件为表文件。该命令也可通过界面完成:“表表”“追加记录追加记录”备注型字段与通用型字段的数据输入备注型字段与通用型字段的数据输入备注型:浏览窗口中,备注型字段上显示memo表示无内容;Memo表
21、示有内容。备注型字段内容输入方法是光标定位到该字段上,按+或双击双击通用型:浏览窗口中,通用型字段上显示gen表示无内容;Gen表示有内容。通用型字段内容输入方法同上,然后再用菜单命令“编辑编辑”“插入对象插入对象”插入其内容。2023/5/2926界面菜单命令“显示显示”“浏览浏览”(编辑)命令BROWSE FIELDS 字段列表FOR 条件;RREEZE 字段名NOAPPEND;NODELETE NOMODIFYTITLE 表达式例:CLOSE TABLES ALL USE xs BROWSE FIELDS xh,xm FOR xb=女;NOMODIFY TITLE 女学生2.浏览窗口3.
22、记录的筛选(横向筛选横向筛选)界面 菜单命令“表表”“属性属性”“数据过滤器数据过滤器”命令SET FILTER TO 条件2023/5/2927界面菜单命令“表表”“属性”“字段筛选”命令SET FIELD TO 字段列表SET FIELD TO ALL列出所有字段(取消筛选)4.限制对字段的访问访问(纵向筛选纵向筛选)5.记录定位(1)记录指针表被打开后,有三个控制记录表被打开后,有三个控制记录的标志:的标志:开始标志开始标志、指针标志指针标志、结束标志结束标志。每当打开表文件时,每当打开表文件时,指针总是指向第一个记录指针总是指向第一个记录。文件头文件头(包含(包含表结构表结构等信息)等
23、信息)第第1 1条记录条记录第第2 2条记录条记录第第n n条记录条记录录开始标录开始标志志记录结束记录结束标志标志记录指记录指针针2023/5/2928【注】RECNO()测试当前记录指针的位置,开始标志用BOF()测试,结束标志用EOF()测试。打开表时记录指打开表时记录指打开表时记录指打开表时记录指针情况针情况针情况针情况如下表:表中记录情况表中记录情况BOF()BOF()值值RECNO()RECNO()值值EOF()EOF()值值无记录无记录.T.T.1 1.T.T.有记录有记录.F.F.1 1.F.F.记录指针的初始值总是1,不可能为0或负数,最大值是表中记录总数+1。2023/5/
24、2929界面操作表转到记录 在浏览窗口移动光标“记录号”:绝对定位“定位”:条件定位 范围选项有ALL、NEXT、RECORD n、REST5.记录定位(2)记录定位的实现2023/5/2930【注注注注】若定位时未找到相应记录,则指针指向若定位时未找到相应记录,则指针指向若定位时未找到相应记录,则指针指向若定位时未找到相应记录,则指针指向指定范围的结尾。指定范围的结尾。指定范围的结尾。指定范围的结尾。首记录首记录当前记录当前记录末记录末记录ALLNEXT nRESTRECORD nn2023/5/2931n 使用命令n 绝对定位:GOTO 记录号|TOP|BOTTOM IN 区号|别名n 相
25、对定位:SKIP nRecordsn 条件定位:LOCATE FOR 条件表达式 范围(2)记录定位的实现【注】若从第一条记录向上移动一条记录,记录指针指向开始标志,BOF()函数值为.T.,RECNO()值仍为1。若再执行SKIP-1命令,系统将显示出错信息“已到文件头”,此时记录指针仍然指向记录开始标志。若从最后一条记录向下移动一条记录,记录指针指向结束标志,EOF()函数值为.T.,RECNO()值为表记录数加1。若再执行SKIP命令,系统将显示出错信息“已到文件尾”,此时记录指针仍然指向记录结束标志。如果表有一个主控索引,SKIP命令将使记录指针移动到索引顺序决定的记录上。对于条件定位
26、来说,可使用CONTINUE命令从当前记录继续进行条件定位到下一条满足条件的记录。2023/5/2932界面方式的记录修改对于当前工作区中的表,可在浏览窗口中修改记录批量修改:在浏览表状态下,用菜单“表”“替换字段”6.记录的修改2023/5/2933使用命令修改记录UPDATE命令 UPDATE 表名 SET 字段名1=表达式1;,字段名2=表达式2WHERE 条件REPLACE命令REPLACE 字段名1 WITH 表达式1 ADDITIVE;,字段名2 WITH 表达式2 ADDITIVE范围FOR 条件6.记录的修改【注注注注】REPLACEREPLACEREPLACEREPLACE命
27、令只能用于修改当前工作区打开的命令只能用于修改当前工作区打开的命令只能用于修改当前工作区打开的命令只能用于修改当前工作区打开的表,而表,而表,而表,而UPDATEUPDATEUPDATEUPDATE命令在执行时命令在执行时命令在执行时命令在执行时不需事先打开表不需事先打开表不需事先打开表不需事先打开表,系统会,系统会,系统会,系统会自动在最小未使用的工作区中打开表;自动在最小未使用的工作区中打开表;自动在最小未使用的工作区中打开表;自动在最小未使用的工作区中打开表;ADDITIVEADDITIVEADDITIVEADDITIVE仅对备注型字段有效,使用时表示替换的仅对备注型字段有效,使用时表示
28、替换的仅对备注型字段有效,使用时表示替换的仅对备注型字段有效,使用时表示替换的内容追加到原备注中,否则替换原内容;内容追加到原备注中,否则替换原内容;内容追加到原备注中,否则替换原内容;内容追加到原备注中,否则替换原内容;2023/5/2934UPDATEUPDATE命令中没有命令中没有“范围范围”选项;缺省选项;缺省WHEREWHERE选项时选项时更新所有记录,执行完记录指针指向最后一条记录;更新所有记录,执行完记录指针指向最后一条记录;带有带有WHEREWHERE选项时更新满足条件的所有记录,执行完记选项时更新满足条件的所有记录,执行完记录指针指向满足条件的最后一条记录上。录指针指向满足条
29、件的最后一条记录上。REPLACEREPLACE命令中有命令中有“范围范围”选项和选项和”FORFOR条件条件“选项,选项,用法比较复杂:两者都有时,表明更新指定范围内满用法比较复杂:两者都有时,表明更新指定范围内满足条件的记录,执行完指针指向指定范围的末尾记录;足条件的记录,执行完指针指向指定范围的末尾记录;两者均缺省时,仅对当前记录(一条记录)进行替换;两者均缺省时,仅对当前记录(一条记录)进行替换;只有只有“范围范围”选项,替换指定范围内所有记录,执行选项,替换指定范围内所有记录,执行完指针指向指定范围的末尾记录;只有完指针指向指定范围的末尾记录;只有FORFOR子句,则替子句,则替换表
30、中所有满足条件的记录,执行完指针指向表中最换表中所有满足条件的记录,执行完指针指向表中最后一条记录。后一条记录。UPDATEUPDATE命令执行时虽然可自动打开要更新的表,但命令执行时虽然可自动打开要更新的表,但不会改变当前工作区。不会改变当前工作区。2023/5/2935标记要删除的记录(逻辑删除)浏览表时,手动删除浏览表时,用菜单“表”“删除记录”打开“删除”对话框进行删除DELETE-SQL命令删除:DELETE FROM 表名 WHERE 条件DELETE命令删除:DELETE 范围FOR 条件IN 工作区|别名7.记录的删除与恢复【注注注注】DELETE-SQLDELETE-SQLD
31、ELETE-SQLDELETE-SQL命令执行时命令执行时命令执行时命令执行时不需事先打开表不需事先打开表不需事先打开表不需事先打开表,系,系,系,系统会自动在最小未使用的工作区中打开表,但不改变统会自动在最小未使用的工作区中打开表,但不改变统会自动在最小未使用的工作区中打开表,但不改变统会自动在最小未使用的工作区中打开表,但不改变当前工作区;其当前工作区;其当前工作区;其当前工作区;其WHEREWHEREWHEREWHERE选项的使用情况同选项的使用情况同选项的使用情况同选项的使用情况同UPDATEUPDATEUPDATEUPDATE命令。命令。命令。命令。DELETEDELETEDELET
32、EDELETE命令执行时必须先打开表,其命令执行时必须先打开表,其命令执行时必须先打开表,其命令执行时必须先打开表,其“范围范围范围范围”和和和和“FORFORFORFOR”子句的使用同子句的使用同子句的使用同子句的使用同REPLACEREPLACEREPLACEREPLACE命令。命令。命令。命令。2023/5/2936恢复带删除标记的记录RECALL 范围FOR 条件(两个可选项的使用同两个可选项的使用同DELETE命令)命令)彻底删除记录(物理删除)在表浏览状态,用菜单“表”“彻底删除”对当前工作区中的表对当前工作区中的表,用命令用命令PACK用ZAP命令命令物理删除当前工作区中打开表的
33、所有记录而不论记录是否有删除标记对带有删除标记的记录的访问对带有删除标记的记录,在默认情况下有些命令仍然可以对其进行操作,而有些命令则忽略这些记录。可用SET DELETED ON|OFF来指定VFP是否处理带有删除标记的记录,但该设置也不是对所有命令或函数起作用。DELETE()函数可用于测试记录是否被删除。2023/5/2937该命令只能用于当前工作区中打开的表的数据复制缺省FIELDS子句则复制表中所有字段,但如果复制产生的文件不是默认的表文件,则即使备注字段包含在字段列表中,也不把备注字段复制到新文件中SDF选项指明产生的新文件类型为文本文件(.TXT)而XLS选项指明产生文件为电子表
34、格文件(.XLS)8.数据的复制COPY TOCOPY TO 文件名 FIELDS FIELDS 字段列表范围;FORFOR 条件SDFSDF|XLSXLS例:USEUSE xs xsCOPY TOCOPY TO xs01 xs01 FORFOR xb=xb=女女 COPY TOCOPY TO xs01 xs01 FIELDFIELD xh,xm xh,xm SDFSDFCOPY TOCOPY TO xs01 xs01 XLSXLS2023/5/2938记录的物理顺序按输入记录时间顺序实际存放的顺序,用记录号来标识不同的记录,函数RECNO()RECNO()可测试当前记录号。记录的逻辑顺序为实
35、现对表记录的快速查询,可根据需要对表文件中的记录按某个字段(单字段索引)或某些字段(多字段索引)值排序,这就是逻辑顺序。3.3.6 索引的创建与使用1.索引概述【注注】索引排序并没有真正更改表记录的物理顺序,索引排序并没有真正更改表记录的物理顺序,只是建立了一个逻辑顺序与原表物理顺序的记录号之只是建立了一个逻辑顺序与原表物理顺序的记录号之间的对照表,并把对照表保存到一个索引文件中。间的对照表,并把对照表保存到一个索引文件中。2023/5/2939字符+字符:数值+字符:数值+数值:日期+字符:其它:逻辑型、物理顺序等一升序一降序问题:2.索引表达式 索引表达式也叫索引关键字,它是建立一个索引的
36、排序依据,通常是一个字段或由多个字段组成的表达式。需注意需注意:不能基于备注字段或通用字段建立索不能基于备注字段或通用字段建立索引引。如索引表达式是基于多个字段的,系统将根据整个表达式的值进行排序。书写表达式时要注意:2023/5/2940普通索引:索引表达式的值允许重复,即在普通索引上查找的记录不具有唯一性。一个表可以创建多个普通索引。唯一索引:索引表达式的值可以重复,但在索引文件中重复的值仅存储一次。一个表可以创建多个唯一索引。3.索引类型 在VFP中,表的索引类型总共有4种:主索引主索引、候选索引候选索引、唯一索引唯一索引、普通索引普通索引。其中,主索引只主索引只能在数据库表中创建能在数
37、据库表中创建。当数据库表移出数据库变成自由表时,索引仍然有效,只是主索引将自动变成候选索引。2023/5/2941候选索引:以表的候选关键字为索引表达式而创建的索引,所以,对于表中记录来说,指定的索引表达式的值不可重复。如果在任何已经含有重复数据的字段中指定候选索引,系统将产生错误信息;如果表已经建立了候选索引,在追加新记录或修改记录时,系统会检测索引表达式的值是否有重复,如有重复则拒绝接收数据的输入或修改。一个表可以建立多个候选索引。主索引:对于数据库表来说,可以从候选索引中选取一个作为主索引。每个数据库表只能创建一个主索引,且主索引的索引表达式在表的所有记录中不允许有重复的值,也不允许NU
38、LL值。注:在实际应用中,一个表一般创建一个主索引,注:在实际应用中,一个表一般创建一个主索引,根据需要可创建多个普通索引。根据需要可创建多个普通索引。2023/5/2942结构复合索引文件将表的一个或多个索引的索引信息存储在一个索引文件中,且索引文件名与表名相同,扩展名为.CDX。结构复合索引能自动地与表同步打开、更新和关闭。不要建立无用的索引,过多索引将会降低系统性能。非结构复合索引文件与结构复合索引文件一样,索引文件扩展名为.CDX,但其文件名不与表同名,非结构复合索引也不会随表的打开而自动打开。独立索引文件只存储一种索引的索引文件,其扩展名为.IDX,文件名由用户指定。与非结构复合索引
39、一样,独立索引也不会随表的打开而自动打开。4.索引文件的类型2023/5/2943排序:对索引表达式值的整体升序或降序,默认为升序。索引名:也叫索引标识(Tag),其长度最多10个。筛选:指定仅有符合条件的记录参加索引。5.使用表设计器创建结构复合索引2023/5/2944使用USE命令打开表时,通过ORDER子句指定主控索引。如:USE xs ORDER xh&主控索引为xh界面方式:表浏览状态,菜单“表”“属性”“工作区属性”“索引顺序”如果表已经打开,用SET ORDER TO命令设置主控索引:SET ORDER TO 索引标识名IN 工作区|别名ASCENDING|DESCENDING
40、 6.索引的使用起作用的索引起作用的索引(1)设置设置主控索引主控索引主控索引主控索引2023/5/2945SEEK 表达式 ORDER 索引标识名IN 工作区|别名ASCENDING|DESCENDING 如:USE xs ORDER xh SEEK “040701004”(2)利用索引利用索引快速定位快速定位快速定位快速定位【注】SEEK命令可在表中搜索指定表达式的值首次出现的记录,这个记录的索引关键字必须与指定表达式类型匹配。SEEK命令只能在索引过的表中使用,且只能基于索引关键字进行搜索。如果找到与索引关键字相匹配的记录,则RECNO()返回定位的记录号,FOUND()函数返回.T.,
41、EOF()函数返回.F.;否则RECNO()函数返回表中记录数加1,FOUND()函数返回.F.,EOF()函数返回.T.。2023/5/29463.3.7 自由表 自由表就是不隶属于任何一个数据库的表。自由表的创建与数据库表的创建相似,但自由表不能创建数据库表的那些扩展属性,也不能创建主索引,不能建立表间的永久性关系与设置参照完整性等。自由表可以添加到数据库中,使之成为一个数据库表(此时该表可以设置数据库表的一切属性);反之,可以将一个数据库表从数据库中移出,使之成为一个自由表。注意:一个数据库表变成自由表后,一切扩展属性均自动丢失,索引仍然保留,如果有主索引将自动变成候选索引。2023/5
42、/2947用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)【注】上面建立的表结构是针对“自由表”而言,而“数据库表”是属于某一数据库的,所以要在项目列表中先选择已存在的数据库,然后再点“新建”,后面方法同上。“数据表”还可以通过添加已有的“自由表”而
43、产生。3.3.8 利用命令创建和修改表结构2023/5/2948用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 利用命令创建和修改表结构2023/5/2949一对一关系一对一关系 设A、B两张表,A表中的一个记录在B表中只有一个记录与之
44、对应,B表中的一个记录在A表中也只有一个记录与之对应。在很多情况下,两张表可以简单地合并成一个表。一对多关系一对多关系 如A表中的任意一个记录在B表中可有多个记录与之对应,而B表中的每个记录,在A表中仅有一个记录与之对应,则称两表之间存在一对多关系。A为主表,B为子表。3.4 3.4 永久性关系与参照完整性永久性关系与参照完整性3.4.1 表之间的永久性关系1.表之间关系的类型2023/5/2950多对多关系多对多关系 若A表的一个记录在B表中可对应多个记录,而B表中的一个记录在A表中也对应多个记录,则称为多对多关系。遇到多对多关系时,必须建立第三张表,把多对多关系分解成两个一对多关系。第三张
45、表就称作“纽带表”。把两张表的主关键字都放在这个纽带表中。对于纽带表,除了包含两个外部关键字外,还可以有其他字段。纽带表的主关键字可以由两个外部关键字组成。2023/5/2951 它是库表之间的一种关系,不仅在运行时存在,而且一直保留,拥有永久关系的表必须的数据库中。表间的永久关系是通过索引建立的,永久关系的类型决定了所使用的索引的类型:在一对多中,主表必用主索引关键字(或侯选索引关键字),子表则用普通索引关键字;一对一中,两张表都用主索引关键字(或侯选索引关键字)。2.表之间的永久关系(1 1)永久关系的作用)永久关系的作用)永久关系的作用)永久关系的作用n n 在在“查询(视图)设计器查询
46、(视图)设计器”中,自动作为默认联接条件;中,自动作为默认联接条件;n 作为表单和报表的默认临时关系,在作为表单和报表的默认临时关系,在“数据环境设计器数据环境设计器”中显中显示示n 用来存储参照完整性信息。用来存储参照完整性信息。2023/5/2952(2 2)永久关系的建立)永久关系的建立确定两张具有一对多或一对一关系的表建立主表的主索引或侯选索引如是一对多,在子表中以外部关键字建立普通索引 ;如是一对一,在子表中以与主表相同的关键字建立主索引或侯选索引。建立主表与子表的永久关系,即在数据库设计窗口中,将主表的主索引或候选索引标识拖放到子表相应的索引标识上。(3 3)删除、编辑永久关系)删
47、除、编辑永久关系 在“数据库设计器”中单击关系连线后(这时连线变粗),按键;编辑关系时,可双击连线打开“编辑关系”对话框进行编辑修改。2023/5/2953 “参参照照完完整整性性”是用来控制数据的一致性,尤其是控制数据库相关表之间的主关键字和外部关键字之间数据一致性的规则规则。1.1.参照完整性的一般要求(一对多或一对一参照完整性的一般要求(一对多或一对一)子表的每一个记录在对应的父表中有一个父记录。在父表中修改记录时,如改了主关键字的值,则子表中相关记录的外部关键字值必须同时改。在子表中插入记录时,其外部关键字必须是主表主关键字值中的一个。在父表中删除记录,与该记录相关的子表中的记录必须全
48、部删除。3.4.2 参照完整性2023/5/2954 用“参照完整性生成器”完成。参照完整性规则包括更新规则、删除规则、插入规则。2.参照完整性的设置更新规则更新规则删除规则删除规则插入规则插入规则(当父表中记录的关键字被更新时触发)(当父表中记录被删除时触发)(当父表中插入或更新记录时触发)级联用新的关键字值更新子表中所有相关记录删除子表中所有相关记录限制若子表中有相关记录,则禁止更新若子表中有相关记录,则禁止删除若父表中不存在匹配的关键字,则禁止插入忽略允许更新,不管子表中的相关记录允许删除,不管子表中的相关记录允许插入2023/5/2955父表:显示一个关系中的父表名子表:显示一个关系中
49、的子表名更新:可取“级联”、“限制”、“忽略”删除:可取“级联”、“限制”、“忽略”插入:可取“限制”、“忽略”父标记:建立该永久性关系的父表的主索引(或候选索引)标识名子标记:建立该永久性关系的子表的索引标识名【注注】在利用在利用在利用在利用“参照完整性生成器参照完整性生成器参照完整性生成器参照完整性生成器”对话框设置参照对话框设置参照对话框设置参照对话框设置参照完整性规则时,系统会自动地生成完成该规则的程序完整性规则时,系统会自动地生成完成该规则的程序完整性规则时,系统会自动地生成完成该规则的程序完整性规则时,系统会自动地生成完成该规则的程序代码。规则的代码被保存在数据库的存储过程中,而代
50、码。规则的代码被保存在数据库的存储过程中,而代码。规则的代码被保存在数据库的存储过程中,而代码。规则的代码被保存在数据库的存储过程中,而规则的实施由主表和子表的规则的实施由主表和子表的规则的实施由主表和子表的规则的实施由主表和子表的触发器触发器触发器触发器完成(系统会自动完成(系统会自动完成(系统会自动完成(系统会自动地设置表的触发器。)地设置表的触发器。)地设置表的触发器。)地设置表的触发器。)2023/5/2956 完整性包括:实体完整性、参照完整性和用户自定义完整性。实实体体完完整整性性包包括括两两级级:(通过对应的有效性规则实现)字段的数据完整性:输入到字段的数据的类型或值必须符合某个