[计算机软件及应用]第三章-数据库表PPT课件_第1页
[计算机软件及应用]第三章-数据库表PPT课件_第2页
[计算机软件及应用]第三章-数据库表PPT课件_第3页
[计算机软件及应用]第三章-数据库表PPT课件_第4页
[计算机软件及应用]第三章-数据库表PPT课件_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,第四章数据库和数据表的操作第二部分,3.4索引文件及其应用,3.4.1索引文件及分类1.索引文件索引文件:它仅由两个字段组成,一个字段是排序的关键字值(也可以是一个表达式),另一个字段是每个关键字在原始数据表中对应的记录号。例,在Rsda.dbf数据表中,以编号为关键字段并按升序建立的索引文件的示意图如下图所示。,1.索引文件原数据表中的顺序是按输入的顺序存储在表中的,在索引文件中,记录是按索引关键字值的顺序排列的,当要查找某一编号的记录时,VFP先在索引文件中查找该编号,找到后再根据对应的记录号,在数据表中将记录指针快速移动到该记录上。一个索引文件中可以只有一个索引,也可以有多个索引。可以包含多个索引的索引文件称该文件为复合索引文件。在复合索引文件中,需要为每个索引指定一个索引标识名,以便于通过索引标识相互区分各个索引。,3.4.1索引文件及分类,2.索引文件的分类VFP支持传统的单入口索引文件(扩展名为.IDX)和复合索引文件(扩展名.CDX),其中.IDX索引文件中只包含一个索引,而.CDX索引文件中可以包含有一个或多个索引,所以称为复合索引文件。复合索引文件,又可分为结构化复合索引文件和非结构化复合索引文件两种,其区别在于:结构化复合索引的主文件名与数据表的主文件名相同,并随着数据表的打开而打开,在添加、更改或删除记录时会自动进行维护;而非结构化复合索引文件的主文件名与数据表文件不同,必须用命令打开。,3.4.1索引文件及分类,3.索引的类型(1)主索引主索引通常是数据表的关键字索引,作为主索引的字段称为主关键字。主索引不能用在自由表中,而只能用在数据库表中,可用于在永久关系中建立参照完整性。创建主索引的字段不允许有重复值,且一个表只能有一个主索引。例如,在数据表中,常用学生证号、身份证号、工作证号等作为主索引,而姓名可能有同名的情况,一般不能作为主索引。,3.4.1索引文件及分类,3.索引的类型(2)候选索引候选索引类似于主索引,其索引值就不能有重复值。与主索引不同的是,一个数据表中可以有多个候选索引,而且侯选索引不能用来在永久关系中建立参照完整性。(3)惟一索引惟一索引表示索引值只能取一个,如果有两个或两个以上的索引值,则只能取其中一个,因此,惟一索引使用时可能会隐藏一些记录。例如,若有两个同名的人员,将姓名字段作为惟一索引,则只能找到一个记录,另一个记录将不会找到。,3.4.1索引文件及分类,3.索引的类型(4)普通索引普通索引没有上面各索引的限制,是允许重复索引值的索引。作为普通索引的字段,其字段值可以重复,也可以作为排序的依据,但因为可能有多个相同的索引值,因此查询时会找到多个符合条件的记录。一个数据表中可以有多个普通索引。,3.4.2创建索引文件,1.建立结构化复合索引文件(1)在表设计器中创建索引文件,(2)命令方式创建索引【格式】INDEXON表达式TAG索引标识名FOR条件表达式ASCENDING|DESCENDINGUNIQUE|CANDIDATEADDITIVE【功能】建立结构化复合索引文件。USERSDAINDEXON编号TAGNBHCANDINDEXON性别+CTOD(出生日期)TAGXBCSRQ,2.建立独立复合索引文件独立复合索引文件的扩展名也是.CDX,但其主文件名与数据表文件名不相同,且使用时还需单独打开。独立复合索引文件主要用来创建那些使用不太频繁的索引。独立复合索引文件不能在表设计器中创建,命令建立。【格式】INDEXON表达式TAG索引标识名OF独立复合索引文件名FOR条件表达式ASCENDING|DESCENDINGUNIQUE|CANDIDATEADDITIVEUSERSDAINDEXON编号TAGbhOFRs.cdxINDEXON姓名+STR(职务补贴)TAGxbbtOFRs.cdx,3.重新建立索引文件在数据表的使用过程中,当增删记录或数据表中被索引文件使用的关键字段改动时,结构化复合索引会随着数据表的打开自动打开并能及时得到更新,但如果在使用数据表时未打开相应的独立复合索引文件或传统的单入口.IDX索引文件,则索引文件会因为无法及时更新而产生错误索引。这时须打开索引文件,并对其重新索引。重执行一遍INDEX命令即可重新索引,更简捷的方法是在浏览窗口中打开数据表,然后选择菜单“表”、“重建建立索引”命令,或打开数据表后用REINDEX命令重新建立索引。【格式】REINDEX,3.4.3索引文件的使用,1.指定主控索引一个数据表可以建立多个索引文件,每个索引文件中又可能包含多个索引,而一种索引就是一种排序方式,所以,在使用索引时,必须指明哪一个索引是对数据表记录排序起作用的,即指定主控索引。在没有指定哪一个索引为主控索引之前,数据表的访问顺序仍然是原来的物理顺序,即按记录号的顺序访问。主控索引和主索引是完全不同的概念。主索引是用来控制数据的完整性的,而主控索引是用来指定目前记录排列顺序的。,1.指定主控索引,(1)指定结构化复合索引文件中的索引为主控索引在浏览窗口中打开数据表(以表Rsgz.dbf为例),选择菜单“表”、“属性”命令,即弹出“工作区属性”对话框,单击“索引顺序”下拉列表,选择一个索引标识名,浏览窗口中记录的排列顺序会立即根据选择的主控索引发生变化设定主控索引后,利用LIST、DISPLAY命令输出的记录顺序也是排序后的顺序。需要特别强调的是,主控索引只是改变了记录的输出顺序,记录在数据库中的顺序并没有发生变化。,通过VFP的USE命令和SETORDERTO命令也可以指定主控索引。【格式一】USE数据表名ORDERTAGASCENDING|DESCENDING【格式二】SETORDERTOTAGASCENDING|DESCENDING【功能】指定结构化复合索引文件的索引为主控索引。,(2)指定独立复合索引文件中的索引为主控索引对于独立的复合索引文件或单入口的索引文件,需要用命令将其打开和关闭,只有打开要使用的独立复合索引文件后,才能指定其中的索引为主控索引。【格式一】USEORDERTAGOFASCENDING|DESCENDING【格式二】SETINDEXTOTAGOF,(4)关闭索引文件【格式一】SETINDEXTO【格式二】CLOSEINDEX,2.控制重复值人事档案Rsda表中的编号字段,是用来惟一标识一位职工的,所以该字段的值是不允许重复的。利用主索引可以解决这个问题,只要为编号字段建立索引,并将索引类型设置为主索引3.使用索引快速查找记录FIND命令和SEEK命令都可在指定主控索引的情况下进行记录的查找操作。】SEEK表达式,USERsdaORDERTAGbh&打开Rsda同时指定BH为主控索引SEEK03001SETORDERTOrq&重新指定rq为主控索引SEEKCTOD(1988.09.06)&日期格式要与设置相同,否则会出错DISPLAY,3.5数据表的统计计算,3.5.1累加求和及求平均值对每个记录的横向求和和统计可以用前面介绍的操作或命令方便地给出,如REPLACE命令。对于每个记录的纵向求和统计可以用累加求和命令实现。【格式】SUM|AVERAGE表达式表范围FOR条件表达式WHILE条件表达式TO内存变量名表|TO数组变量名,【例】求出Rsgz.dbf中计算机系所有职工的月基本工资平均值及全年实发工资之和并显示。CLEARSETTALKOFFUSERsgzAVERAGE基本工资TOpj_jbgzFORSUBSTR(编号,1,2)=03SUM实发工资*12TOqn_sfgzFORSUBSTR(编号,1,2)=03?计算机系职工的月平均工资为:,pj_jbgz?计算机职工的全年实发工资之和为:,qn_sfgzUSESETTALKONRETURN,3.5.2统计记录个数【格式】COUNT范围FOR条件表达式WHILE条件表达式TO内存变量名表|TO数组变量名,3.5.3分类汇总分类汇总对已经建立了索引并且指定了主控索引的数据表,可以按关键字进行分类求和【格式】TOTALON关键字表达式TO新表名FIELDS字段名表范围FOR条件表达式WHILE条件表达式2,当前数据表必须是按关键字表达式索引过,并指定该索引为主控索引,以保证具有相同关键字值的记录能连续访问。FIELDS短语给出了需分类求和的字段名,这些字段只能是数值型或货币型的,如果缺省,则对当前表中的所有数值型或货币型字段分类求和。不管选不选FIELDS短语,新表与当前表的结构是一样的。对当前数据表中的若干个关键字表达式相同的记录,生成新表中的一条记录。这条记录的非数值型或非货币型字段取自关键字相同的一组记录中首记录的相应字段,参加求和的字段值取自求和结果。,3.6数据交换,3.6.1数组与数据表的数据交换1.将数据表中的记录数据保存到数组中【格式一】SCATTERFIELDS字段名表MEMOTO数组名【格式二】COPYTOARRAY数组名FIELDS字段名表范围FOR逻辑表达式【功能】将当前打开的数据表中的某些记录数据存储在数组中。,2.将数组中的数据传递到当前数据表中【格式一】GATHERFROM数组名FIELDS字段名表MEMO【格式二】APPENDFROMARRAY数组名FOR逻辑表达式FIELDS字段名表【功能】将数组中各元素的数据传递给当前打开的数据表中。注意:请读者将COPYTOARRAY与SCATTER、APPENDFROMARRAY与GATHERFROM的差别搞清楚。,3.6.2文件复制,1.复制部分记录或整个数据表【格式】COPYTO表文件名FOR|WHILEFIELDSDATABASENAMEWITHCDX|WITHPRODUCTION|SDF|SYLK|WK1|WKS|WR1|WRK|XLS|XL5|DELIMITEDWITH|WITHBLANK|,2.复制数据表的结构【格式】COPYSTRUCTURETO表文件名FIELDS字段名表WITHCDX|WITHPRODUCTION,说明:若不选可选项,生成的表结构具有与原数据表相同的字段名、类型和宽度。若选FIELDS子句,生成的表结构只有字段名表中的字段,字段名之间用逗号隔开。CDX和PRODUCTION的意义与复制记录时的意义一致。,3.7多数据表操作,在一个数据库中,一般都有着许多个数据表。而在对这些表的使用中,也经常是多个表中的数据同时被用到。VFP提供了强有力的多数据表操作能力,引入了工作区和表的别名这两个概念。用户可以在不同的工作区中同时打开多个表,也可以在不同的工作区打开同一个表,通过表的别名,用户可以引用在不同工作区打开的表中的数据。,3.7.1工作区的基本概念所谓“打开”数据表,实际上就是VFP在内存中开辟了一个区域(亦称缓冲区)与磁盘上数据表之间建立起一种映射关系,使VFP通过缓冲区使用磁盘上数据表里的数据,这个内存中的缓冲区就称为工作区。1.工作区的性质(1)在每一个工作区中只能打开一个表,VFP最多可以开辟32767个工作区,打开32767个表。允许一个表在几个工作区中同时打开。(2)在某一时刻只能选择一个工作区为“当前工作区”,对其中的表进行操作。系统初始状态默认1号工作区为当前工作区。,(3)每一工作区打开的数据表都有各自的记录指针。在一般情况下,对数据表的操作只能移动当前工作区的记录指针。当使得数据表之间建立临时关系以后,另一工作区的记录指针才能根据要求伴随当前工作区的记录指针作相应的移动。(4)内存变量对各工作区是公用的,每一工作区的字段变量对其它各工作区也是公用的。在任意工作区都可以对其它工作区的当前记录进行读、写操作。,工作区的编号和别名为了标识每一个工作区,系统给每一工作区编号,号码为1、2、32767。同时还为工作区规定了别名,其中1至10号工作区别名为A、B、J;11至32767号工作区别名为W11、W12、W32767。给数据表命名时,不要与工作区的别名冲突,否则容易引起混乱。,数据表别名在打开数据表的同时,可以为数据表起一个别名,这个别名也作为打开该数据表的工作区别名。格式USEALIASIN|AGAIN说明:若不指定工作区,则默认为在当前工作区上打开指定的数据表,并同时关闭以前在当前工作区上打开的数据表。ALIAS为可选项,不指定别名时,原数据表名就是它的别名。例如,当执行了命令“USERsdaALIASda”后,表Rsda的别名就是da;而执行了命令“USERsda”后,则默认Rsda表的别名。,若选择了IN0短语,表示在当前没有使用的编号最小工作区上打开数据表。该命令只是在指定的工作区上打开数据表,并不能改变当前工作区。改变当前工作需要单独的命令。一旦一个工作区上打开了一个数据表,数据表就和该工作区建立起对应关系,所以打开数据表后可以用数据表的别名来代替工作区别名。,3.7.2工作区的选择和使用,1.选择工作区(1)利用“数据工作区”窗口选择工作区选择窗口菜单中的数据工作期命令,或单击常用工具栏中的数据工作期窗口按钮,打开数据工作期窗口。这时默认当前工作区为1。单击打开按钮选择一个数据表打开。若再次单击打开按钮,可以依次在其它工作区打开其它数据表,并且可以用显示的别名选择工作区。在数据工作期窗口还可以浏览各工作区打开的数据表,还可以关闭他们。,(2)利用SELECT命令选择工作区格式SELECT|说明:选择当前工作区,选择的工作区中可以是在前面已经打开了数据表,也可以是未曾打开表。,例:USERsda&默认在1号工作区打开Rsda.dbfSELECTd&选择4号工作区为当前工作区USERsgl&在当前(4号)工作区打开Rsgl.dbfUSERsgzALIASgz&在当前4号工作区打开Rsgz,同时关闭RsglSELECT1&选择1区为当前工作区LIST&显示当前(1号)工作区数据表(Rsda)的记录SELECTgz&或SELE4,SELEd,但不能SELERsgzLIST&显示Rsgz的记录SELERsda&是否可以?为什幺?LIST?SELECT()&给出当前工作区号函数,返回当前工作区号USERsglIN10?SELECT()USE&关闭当前工作区上的数据表USERsglIN0?SELECT(),2在不同工作区打开同一个数据表例SELE1USERsdaUSERsdaALIASdaIN3AGAINSELE2USERsdaAGAIN,3.使用非当前工作区中表的数据方法是在非当前工作区的表的字段名前加注工作区别名或表的别名。格式为:-或.注意,这里的符号“-”是“-”和“”两个(均为半角)符号复合而成。,例SELE2USERsgl&未指定主索引顺序,指向号记录USERsdaIN3SELE3LOCATEFOR姓名=b-姓名&指向同个人DISPLY部门名,姓名,出生日期,c.工作日期显示结果如下:记录号部门名姓名出生日期C-工作日期1机关韩伟东1960.10.101985.09.04,在VFP中,表之间关联有临时关系和永久关系两种关联1.设置表的临时关系(1)利用数据工作期窗口建立表的临时关系,3.7.3数据表的关联,(2)利用命令建立表之间的临时关系【格式】SETRELATIONTO关键字表达式|数值表达式1INTO工作区别名1|子表别名1,关键字表达式2|数值表达式2INTO工作区别名2|表别名2ADDITIVE说明:必须选择父表所在工作区为当前工作区,然后再使用本命令与非当前工作区中的数据表(子表)建立关联。选ADDITIVE项可使父数据表与子表建立关联时,原先已存在的关联仍然保留。如果不选用该项,则建立新关联时将取消原有关联。,子表必须按关键字表达式中的关键字段建立索引,且被指定为主控索引。若选择数值表达式,则两个表是按照记录号相联系,此时子表不要求索引。通常情况下,用两个表都具有的相同字段作为建立临时关系的关键字表达式。不选任何可选项则取消已与当前表建立的关联。父表可以与多个子表建立关联。建立临时关系以后,父表和子表记录指针的移动的规则是:父表指针每移动到一个记录,子表则按关键字表达式的值进行索引查找,并将记录指针定位在相应记录上。若子表中没有记录和父表的当前记录相关联,子表的记录指针将指向EOF;若子表中有多个记录和父表的当前记录相关联,则子表的记录指针将指向第一个相匹配的记录。,【例】某书店有一个图书库存数据表Tskc.dbf,存放有该书店所有的图书信息,另有一个图书调价数据表tstj.dbf,其中存放着图书调价后的新价格,现要求编制程序,用Tstj.dbf中的单价数据更新Tskc.dbf中的单价数据。假设Tstj.dbf数据表中的记录和Tskc.dbf中的记录是一一对应的,即凡是出现在Tskc.dbf中图书都调价了,则可用如下的程序:,SETTALKOFFSETSAFETYOFFUSETSKCSELECT2USETSGXTJINDEXON图书编号TAGTSBHSETORDERTOTSGHSELECT1SETRELATIONTO图书编号INTOBREPLACEALL单价withTSTJ.单价CLOSEALLSETSAFETYONSETTALKONRETURN,2设置表间的永久关系永久关系是存储在数据库文件(.DBC)中的数据表之间的关系,它作为数据库的组成部分一直保留。它不像临时关系每次打开数据表时都要重新建立。数据库中的数据表建立永久关系后,借助这种关系不仅仅从当前选定的表中访问数据,而且还可以访问相关数据表中的数据。当在查询设计器,视图设计器、表单设计器中的数据环境中使用这些数据表时,这些永久关系将作为这些表之间的默认连接关系自动出现。而且以后使用查询文件,视图文件及表格文件时,这些永久关系也自动把相关数据表连接起来。,与永久关系的作用不同,临时关系是控制表之间记录指针的连动关系。永久关系不具有这个功能,而是使相关数据建立连接关系。在永久关系中还可以建立参照完整性,对各数据表之间进行完整性约束。,表之间关系的类型表与表之间的关系实际上就是,按照某一关键字建立的几个数据表之间相关记录的关系。根据一个表中的记录与另一表中相关记录之间的对应数量关系,关系的类型可分为:一对一关系:是指一个表中的一个记录与另一表中的唯一记录相关联。一对多关系:是指一个表中的一个记录与另一表中的多个记录相关联,但另一表中的一个记录则只能与这个表中的唯一记录相对应。,在关系数据库设计时,应避免将表设计成“多对多关系”,通过数据规范化设计将“多对多关系”转换成“一对多关系”来建立数据库。也可以在两个表间建立一个连接表,两个表分别和连接表建立一对多关系,间接实现多对多关系,(1)建立表间的永久连接建立Rsbm与Rsgl的关联、Rsgl与Rsda的关联。Rsgl与Rsda根据编号建立一对一的关联;由于在Rsbm中一个部门可以在Rsgl中找到多条记录,所以两个数据表之间的关系为一对多的关系。两个表已根据共同字段“部门名”建立了索引,“一”方(Rsbm)建立了以“部门名”为索引标识的主索引,“多”方建立了以“部门名”为索引标识的普通索引。,在数据库设计器中建立永久关系,(2)编辑数据表之间的关联,3.8管理数据库,3.8.1使用多个数据库1在项目中新建或添加数据库2从项目中移去数据库3打开多个数据库4设置当前数据库,5访问其它数据库中的表OPENDATABASERsgl.dbc&打开数据库RsglOPENDATABASEExample.dbc&打开Example并自动将其设为当前数据库?DBC()&显示当前数据库名SELECT4&选择第4工作区为当前工作区USERsgl!Rsda.dbf&在第4工作区上打开数据表BROWSE&浏览当前工作区(第4工作区)上的数据SELE2&选择第2工作区为当前工作区?Rsda.姓名&显示Rsda数据表的当前记录的姓名字段,6关闭数据库SETDATABASETORsglCLOSE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论