程序设计基础(vfp)第三章数据库表_第1页
程序设计基础(vfp)第三章数据库表_第2页
程序设计基础(vfp)第三章数据库表_第3页
程序设计基础(vfp)第三章数据库表_第4页
程序设计基础(vfp)第三章数据库表_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

,第三章数据库和数据表的操作第二部分,3.4索引文件及其应用,数据表中的顺序是按输入的顺序存储在表中。如果查找某条记录怎么办?,3.4.1索引文件及分类,1.索引文件索引文件:它仅由两个字段组成,一个字段是排序的关键字值(也可以是一个表达式),另一个字段是每个关键字在原始数据表中对应的记录号。例,在Rsda.dbf数据表中,以编号为关键字段并按升序建立的索引文件的示意图如下图所示。,在索引文件中,记录是按索引关键字值的顺序排列的,当要查找某一编号的记录时,VFP先在索引文件中查找该编号,找到后再根据对应的记录号,在数据表中将记录指针快速移动到该记录上。一个索引文件中可以只有一个索引,也可以有多个索引。可以包含多个索引的索引文件称该文件为复合索引文件。在复合索引文件中,需要为每个索引指定一个索引标识名,以便于通过索引标识相互区分各个索引。,3.4.1索引文件及分类,2.索引的类型(1)主索引主索引通常是数据表的关键字索引,作为主索引的字段称为主关键字。主索引不能用在自由表中,而只能用在数据库表中,可用于在永久关系中建立参照完整性。创建主索引的字段不允许有重复值,且一个表只能有一个主索引。例如,在数据表中,常用学生证号、身份证号、工作证号等作为主索引,而姓名可能有同名的情况,一般不能作为主索引。,3.4.1索引文件及分类,(2)候选索引候选索引类似于主索引,其索引值就不能有重复值。与主索引不同的是,一个数据表中可以有多个候选索引,而且侯选索引不能用来在永久关系中建立参照完整性。(3)惟一索引惟一索引表示索引值只能取一个,如果有两个或两个以上的索引值,则只能取其中一个,因此,惟一索引使用时可能会隐藏一些记录。例如,若有两个同名的人员,将姓名字段作为惟一索引,则只能找到一个记录,另一个记录将不会找到。,3.4.1索引文件及分类,(4)普通索引普通索引没有上面各索引的限制,是允许重复索引值的索引。作为普通索引的字段,其字段值可以重复,也可以作为排序的依据,但因为可能有多个相同的索引值,因此查询时会找到多个符合条件的记录。一个数据表中可以有多个普通索引。,3.4.1索引文件及分类,3.索引文件的分类单入口索引文件(扩展名为.IDX)(IDX索引文件中只包含一个索引)复合索引文件(扩展名.CDX),.CDX索引文件中可以包含有一个或多个索引,所以称为复合索引文件。结构化复合索引文件非结构化复合索引文件(独立符合索引文件),结构化复合索引的主文件名与数据表的主文件名相同,并随着数据表的打开而打开,在添加、更改或删除记录时会自动进行维护;非结构化复合索引文件(独立符合索引文件)的主文件名与数据表文件不同,必须用命令打开。,3.4.2创建索引文件,1.建立结构化复合索引文件(1)在表设计器中创建索引文件,(2)命令方式创建索引【格式】INDEXON表达式TAG索引标识名FOR条件表达式ASCENDING|DESCENDINGUNIQUE|CANDIDATEADDITIVE【功能】建立结构化复合索引文件。对rsda表(1)按编号升序建立索引;(2)按工作日期降序;(3)先按性别升序,若性别相同,则按工作日期升序建立索引(rsda.cdx)USErsdaINDEXON编号TAGbhINDEXON工作日期TAGgzrqdescINDEXON性别+dtoc(工作日期)TAGxbrq,2.建立独立复合索引文件独立复合索引文件的扩展名也是.CDX,但其主文件名与数据表文件名不相同,且使用时还需单独打开。独立复合索引文件主要用来创建那些使用不太频繁的索引。独立复合索引文件不能在表设计器中创建,命令建立。,【格式】INDEXON表达式TAG索引标识名OF独立复合索引文件名FOR条件表达式ASCENDING|DESCENDINGUNIQUE|CANDIDATEADDITIVE,例:对rsgl.dbf表,(1)编号升序建立索引;(2)先按性别升序,若性别相同,则按工作日期升序建立独立索引文件gl.cdxusersglindexon编号tagbhcandofgl.cdxindexon性别+dtoc(出生日期)tagxbcsrqofgl.cdx,3.重新建立索引文件在数据表的使用过程中,当增删记录或数据表中被索引文件使用的关键字段改动时,结构化复合索引会随着数据表的打开自动打开并能及时得到更新,但如果在使用数据表时未打开相应的独立复合索引文件或传统的单入口.IDX索引文件,则索引文件会因为无法及时更新而产生错误索引。这时须打开索引文件,并对其重新索引。,菜单方式:打开数据表“显示”“浏览”,菜单“表”、“重建建立索引”命令,或打开数据表后用REINDEX命令重新建立索引。命令方式【格式】REINDEX,4、索引的删除若单索引:直接在windows中删除若复合索引,删除索引标识删除所有的索引标识:Deletetagall删除特指的索引标识Deletetag,3.4.3索引文件的使用,1.指定主控索引一个数据表可以建立多个索引文件,每个索引文件中又可能包含多个索引,而一种索引就是一种排序方式在使用索引时,必须指明哪一个索引是对数据表记录排序起作用的,即指定主控索引。在没有指定哪一个索引为主控索引之前,数据表的访问顺序仍然是原来的物理顺序,即按记录号的顺序访问。,主控索引和主索引有什么区别?主控索引和主索引是完全不同的概念。主索引是用来控制数据的完整性的,而主控索引是用来指定目前记录排列顺序的。,1.指定主控索引,(1)指定结构化复合索引文件中的索引为主控索引菜单方式:“浏览”“表”“属性”命令-即弹出“工作区属性”对话框,设定主控索引后,利用LIST、DISPLAY命令输出的记录顺序也是排序后的顺序。主控索引只是改变了记录的输出顺序,记录在数据库中的顺序并没有发生变化。,命令方式【格式一】USE数据表名ORDERTAGASCENDING|DESCENDING【功能】打开表,同时指定结构化复合索引文件的索引为主控索引。【格式二】SETORDERTOTAGASCENDING|DESCENDING【功能】打开表后,指定结构化复合索引文件的索引为主控索引。,(2)指定独立复合索引文件中的索引为主控索引对于独立的复合索引文件或单入口的索引文件,需要用命令将其打开和关闭,只有打开要使用的独立复合索引文件后,才能指定其中的索引为主控索引。【格式一】USEORDERTAGOFASCENDING|DESCENDING【格式二】SETINDEXTOTAGOF,(4)关闭索引文件【格式一】SETINDEXTO【格式二】CLOSEINDEX,2.使用索引快速查找记录,FIND命令和SEEK命令都可在指定主控索引的情况下进行记录的查找操作。SEEK表达式,USERsdaORDERTAGbh&打开Rsda同时指定BH为主控索引SEEK03002dispSETORDERTOgzrq&重新指定rq为主控索引seek1963/09/02&日期格式要与设置相同,否则会出错disp,Usersdasetordertobh,3.5数据表的统计计算,3.5.1累加求和及求平均值对每个记录的横向求和和统计可以用前面介绍的操作或命令方便地给出,如REPLACE命令。对于每个记录的纵向求和统计可以用累加求和命令实现。【格式】SUM|AVERAGE表达式表范围FOR条件表达式TO内存变量名表|TO数组变量名,【例】求出Rsgz.dbf中计算机系所有职工的月基本工资平均值及全年实发工资之和并显示。AVERAGE基本工资TOaFORSUBSTR(编号,1,2)=03SUM实发工资*12TObFORSUBSTR(编号,1,2)=03“,【例】求出xscj每门课的平均成绩,每个同学的平均成绩和总成绩。usexscj.dbfbrowaverage英语,数学,计算机toa,b,c?a,b,creplall总成绩with英语+数学+计算机,平均成绩with总成绩/3,3.5.2统计记录个数【格式】COUNT范围FOR条件表达式WHILE条件表达式TO内存变量名表|TO数组变量名例:统计每门课成绩均在90分以上的人数,以及不及格的人数。countfor英语=90and数学=90and计算机=90tos1countfor英语60or数学或.注意,这里的符号“-”是“-”和“”两个(均为半角)符号复合而成。,例(rsgl(编号、部门名、姓名、性别、出生日期、文化程度、职位、婚否),Rsda(编号、姓名、性别、工作日期、职称、简历、照片)select1usersglusersdain2sele1List姓名,部门名,出生日期,b-姓名,b-工作日期显示结果如下:,在VFP中,表之间关联有临时关系和永久关系两种关联1.设置表的临时关系(1)利用数据工作期窗口建立表的临时关系,3.7.3数据表的关联,1,2,3,List姓名,部门名,出生日期,b-姓名,b-工作日期,(2)利用命令建立表之间的临时关系【格式】SETRELATIONTO关键字表达式|数值表达式1INTO工作区别名1|子表别名1,关键字表达式2|数值表达式2INTO工作区别名2|表别名2ADDITIVE说明:建立临时关系以后,父表和子表记录指针的移动的规则是:父表指针每移动到一个记录,子表则按关键字表达式的值进行索引查找,并将记录指针定位在相应记录上。若子表中没有记录和父表的当前记录相关联,子表的记录指针将指向EOF;若子表中有多个记录和父表的当前记录相关联,则子表的记录指针将指向第一个相匹配的记录。必须选择父表所在工作区为当前工作区,然后再使用本命令与非当前工作区中的数据表(子表)建立关联。,选ADDITIVE项可使父数据表与子表建立关联时,原先已存在的关联仍然保留。如果不选用该项,则建立新关联时将取消原有关联。子表必须按关键字表达式中的关键字段建立索引,且被指定为主控索引。通常情况下,用两个表都具有的相同字段作为建立临时关系的关键字表达式。不选任何可选项则取消已与当前表建立的关联。父表可以与多个子表建立关联。,【例】某书店有一个图书库存数据表Tskc.dbf,存放有该书店所有的图书信息,另有一个图书调价数据表tstj.dbf,其中存放着图书调价后的新价格,现要求编制程序,用Tstj.dbf中的单价数据更新Tskc.dbf中的单价数据。假设Tstj.dbf数据表中的记录和Tskc.dbf中的记录是一一对应的,即凡是出现在Tskc.dbf中图书都调价了,则可用如下的程序:,select1usetskcselect2usetstjindexon图书编号tagtsbhsetordertotsbhselect1setrelationto图书编号intobreplall单价withb-单价list,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关闭数据库SETDATABASETORsglCLOSEDATABASE另外,用CLOSEALL命令可以关闭所有打开着的数据库及其他文件。,3.8.2向数据库中添加和删除表,1向数据库中添加表2将数据表从数据库中移走项目管理器中选择要移走的数据表,单击“移去”按钮,系统即弹出确认对话框,单击“移去”命令即可将选定的数据表从数据库中移走,成为自由表;若单击“删除”按钮则可将选定的数据表从磁盘上删除。,3.8.3参照完整性,参照完整性是为确保数据库中表间关系不被破坏而设置的一组规则。在用户修改、增加或删除相关表中的记录时,参照完整性将起保护作用。怎样才算破坏了连接关系呢?如建立了Rs

温馨提示

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

评论

0/150

提交评论