数据表的分类排序命令格式sortto文件名on字段1[/a][/d][/c]……产生的表是关闭的(教科书P73)分类排序有什么缺点数据表的索引排序索引是按索引关键字表达式的值使数据表中的记录有序排列的一种技术,在VisualFoxPro系统中是借助于索引文件实现的。1、什么是索引索引关键字的值、记录号(教科书P74)VisualFoxPro系统提供了四种不同的索引类型,它们分别是:2、索引的类型主索引:仅适用于数据库表,不允许关键字段有重复值,一个数据表只能建一个主索引。候选索引:不允许索引关键字段有重复值普通索引:最常用的索引类型,无任何限制唯一索引:允许索引关键字段有重复值VisualFoxPro系统支持单索引文件(.idx)和复合索引文件(.cdx)。3、索引文件的类型(1)单索引文件(略)单索引文件是每个索引存放在一个独立的文件(.idx)中。(2)结构化复合索引文件结构化复合索引文件(.cdx)可以在同一个文件中包含多个索引,其中每个索引称为索引标识。更重要的是,对于结构复合索引,无论何时打开表文件,该索引都会自动打开。其文件名与表名相同,一个表文件只产生一个结构化复合索引文件。(3)独立复合索引文件(略)4、索引的建立(教科书P75)Indexon索引关键字表达式tag索引标识名[ascending|descending]……自动产生与表同名的.CDX文件结构化复合索引文件的建立(命令方式)特别注意:建立索引时,当索引关键字表达式涉及到两个或两个以上的不同类型的字段时:1)顺序若相同,则将非字符型转换为字符型,然后用“+”连接成一个字符表达式。2)顺序若不同,则以字符型字段的顺序为准,若数字型字段的顺序与字符型不同,则用一个较大数减去该字段,再转化为字符型;若日期型字段的顺序与字符型不同,则用一个较大的日期减去该字段,再转化为字符型,然后用“+”连接成一个字符表达式。【例】就学生表建立结构复合索引文件,其中包含2个索引:(1)按学号的升序排列,编号相同的记录只显示第一条。(2)先按性别升序,性别相同再按入学成绩降序排列。USE学生INDEXON学号TAGsy1UNIQUEINDEXON性别+STR(1000-入学成绩)TAGsy2在表设计器中建立索引表设计器中的“索引”选项卡5、索引的使用一个表文件可以建立多个索引,在操作中可以同时打开多个索引,但是任何时候只有一个索引起作用。索引依赖于表文件而存在,它随表的关闭而自动关闭。当前起作用的索引标识称为主控索引。要使用索引必须满足以下条件:打开表;确定主控索引;setorderto[[tag]索引标识名](1)确定主控索引命令格式:(教科书P77)(2)删除索引deletetagall|索引标识1……(3)索引更新自动更新使用索引文件后,虽然表中各记录的物理顺序并未改变。但记录指针不再按物理顺序移动,而是按主控索引文件中记录的逻辑顺序移动,于是整个表中的记录是按索引关键表达式值排序的效果。使用索引文件时,还要特别注意以下几点:(1)在使用GO命令时,GO数值表达式使记录指针指向具体的物理记录号,而与索引无关,而GOTOP|BOTTOM将使记录指针指向逻辑首或逻辑尾记录,这时GOTOP不再等同于GO1。(2)SKIP命令按逻辑顺序移动记录指针。(3)表被打开后,记录指针位于TOP位置。【例】当索引起作用时,分析记录指针的移动规律。USE学生INDEXON入学成绩TAGsy3GO6?RECNO(),姓名&&显示6李勤奋SKIP?RECNO(),姓名&&显示5欧阳天地复合结构索引文件的类型名称是()A)PJTB)PRGC)CDXD)MEM不允许字段值出现重复的索引是()。A)侯选索引和主索引B)普通索引和惟一索引C)惟一索引和主索引D)惟一索引自由表gz.dbf有姓名/C/8、出生年月/D、基本工资/N/6/2等字段,要建立以“姓名、基本工资”两字段的组合索引,其索引关键字表达式是()。(A)姓名+基本工资(B)“姓名”+“基本工资”(C)“姓名”+基本工资(D)姓名+str(基本工资,6,2)有数据表文件CJ.DBF,按姓名(C,8)的升序,上机成绩(N,6,2)的降序建立索引,正确的命令是()。A.INDEXON姓名-上机成绩TAGCJIDXB.INDEXON姓名+STR(-上机成绩,6,2)TAGCJIDXC.INDEXON姓名+STR(1000-上机成绩)TAGCJIDXD.INDEXON姓名/A,上机成绩/DTAGCJIDX某数据表有字段:学号/C、生日/D、成绩/N等。要建立学号、成绩、生日的组合索引,其索引关键字表达式是()。A)学号+成绩+生日B)学号+成绩+生日C)学号+STR(成绩,5,1)+STR(生日,8)D)学号+STR(成绩,5,1)+DTOC(生日,1)多表操作若要使用多个表,就要使用多个工作区。一个工作区是一个编号区域,它标识一个已打开的表。在应用程序中通常通过使用工作区号和工作区别名来标识。(教科书P82)1、工作区号VisualfoxPro提供了32767个工作区,编号从1到32767。每个工作区只允许打开一个表,一个表只能在一个工作区打开,系统默认的工作区为1号工作区。2、别名(1)前十个工作区除了可用1~10来标识外,还可用A~J来表示工作区的别名。(2)定义别名use文件名alias别名格式:3、选择当前工作区select工作区号|别名如没有给表定义别名,则可以用数据表名作为别名。sele0表示选定当前未使用的最小号工作区。use表名in工作区号|别名不改变当前工作区【例】在不同的工作区分别打开学生.dbf、选课.dbf和课程.dbf3CLOSEALL&&SELECT2USE学生&&选择2SELECTCUSE课程&&选择3USE选课IN5&&在5号工作区打开选课表引用非当前工作区表的字段必须冠以别名,引用格式为:别名.字段名别名-字段名【例】在1号工作区打开学生表,在2号工作区打开选课表;当前工作区为1号,显示选课表中当前记录的学号、姓名、课程号和成绩字段的值。CLOSEALL&&SELECT1USE学生&&选择1USE选课IN2&&在2号工作区打开选课表,当前工作区为1?学号,姓名,选课.课程号,选课-成绩学生管理数据库中的表bof(工作区):文件开始的测试函数eof(工作区):文件结束的测试函数recno(工作区):返回当前记录号sele():返回当前工作区区号4、工作区常用函数建立表间的关联关系(临时关系)要在两个或两个以上的表之间进行数据操作时,通常有关联和连接两种方法。1、关联的概念每个工作区打开的表中都存在一个记录指针,指针指向的记录是当前记录,如果表之间没有关系,则各个表的记录指针相互独立,即当前工作区指针移动时,其他工作区的指针不移动。所谓关联,就是让不同工作区数据表的记录指针建立一种临时的联动关系。使一个表的记录指针移动时,能带动另一个表的记录指针按一定的条件作相应地移动。前者称为关联表(主动表、父表),后者称为被关联表(被动表、子表)关键字为唯一值关键字为唯一值一一关键字为重复值关键字为唯一值多一关键字为唯一值关键字为重复值一多关键字为重复值关键字为重复值多多父表子表主动被动建立表间的关联建立数据库文件中表间关联,一是要保证建立关系的表具有相同的字段值(关键字值);二是子表要以该字段建立索引。建立两个表之间的“一对一”和“多对一”关联的步骤:①找到两个表中能够建立关联的字段(字段名可以不同,类型、宽度、小数位数必须相同)②根据关键字值确定父表,再确定子表;③先打开子表,建立索引;④最后打开父表建立关联。有重复值为父表setrelato[表达式1into别名1,…,表达式Ninto别名N][additive]说明:①发出关联命令所在工作区的表是父表建立关联的命令(教科书P83)②子表必须对关联字段索引③表达式是关联的关键字不同名的字段只要类型和数值相同也可建立关联。④关联后,父表指针移动带动子表指针移动;而如果当前工作区是子表,其指针移动,父表指针不会移动。实验指导书P35实验15任务1(1)⑤[additive]一般用于三个或三个以上的表之间建立多重关联,第2、3…个关联使用该选项。⑥关联后,当前工作区字段名可以直接使用,子表的字段在使用时要加“别名.字段名”。⑦setrelatorecn()+Ninto别名把记录号作关键字建立关联。⑧关闭或重新打开数据表,关联就会消失。(故称为临时关系)BBAASele1UseAAindeon字段tagzdSele2UseBBSetrelato字段intoA(或AA)字段sele0useAAindexon字段tagzdsele0useBBsetrelationto字段intoAAAABBCC或BBAACC字段1字段2字段13个表建关联?字段2(见实验书第16页任务1)setskipto[别名1[,别名2]…]一般不用用在setrelation命令之后,说明已建关联的性质为一对多关系。建立表间的一对多关系原则:一般建立“多对一”或“一对一”的关联;一般如果要求显示的结果是按照某个字段值的顺序排列,则包含该字段的表应作父表。例:在学生表和选课表中,显示成绩80分的学生的学号、姓名、所学课程的课程号和成绩。学生管理数据库中的表setsafetyoffcloseallclearselect1use学生aliasxsindexon学号tagxhselect2usesetrelationto学号intoxs系统环境设置表环境设置listfor成绩80fields学号,xs.姓名,课程号,成绩closeallsetsafetyoncancel数据处理恢复系统环境主索引与永久关系有些数据表格和其他数据表格之间存在着某些关系,我们需要将这些有关系的数据表格纳入同一个数据库中,并建立其彼此之间的关系,使用者才能更好的运用数据表格,更容易达到数据管理的目的。1)主索引的建立注意:只能为数据库表建立主索引,不能为自由表创建主索引。当从数据库中移走有主索引的表而成为自由表时,他们的主关键字将会随之消失。2)永久关系和临时关系永久性关系建立在数据库本身,只要数据库存在,永久关系就存在,不会因其他命令的执行而消失。在“数据库设计器”窗口中,两个数据表格之间的连线,就是“永久性关系”。(见教科书90页图5.3)字段之间的关系(不管是永久性的还是临时性的),都是要靠索引来达成的,也就是说,某个字段欲建立关系,需先以此字段的内容建立索引,再利用此索引建立关系。表之间的关系注意:建立“永久性关系”的父表必须以关键字建立主索引或侯选索引,而子表则可以以关键字建立任意类型的索引(一对一或一对多)。而建立“临时关系”的父表可以不需建立索引,只需子表以关键字建立任意类型的索引即可(一对一或多对一)。永久关系连线的作用是在数据表格作“更新”、“删除”、“新增”等动作时,对表格做一个检查的动作,以符合某些规则。(而存储这些规则的地方就是所谓的“参考完整性”(RI)。)在数据库中的表建立永久关系后,可以设置管理相关记录的规则。这些规则可以控制相关表中记录的插入、删除或更新操作。见书P91表5.5设置参照完整性(见教科书90-91页)数据库表之间创建的永久关系保存在()中。A)数据库表B)数据库C)表设计器D)数据环境设计器命令SELECT0的功能是()A)随机选择一个空闲工作区B)选择区号最大的空闲工作区C)选择当前工作区号加1的工作区D)选择区号最小的空闲工作区建立两个数据库表的永久关系,要求()A)两个表都必须索引B)两个表都不要索引C)只有父表必须索引,子表可以不需要索引D)只有子表必须索引,父表可以不需要索引下列叙述中,正确的是()。A)一个工作区中只能打开一个表文件,打开新的表文件后,原来所打开的表文件自动关闭B)一个表文件可以在不同的工作区同时打开,并且表别名也相同C)一个工作区中可以同时打