,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第三章 数据库的创立与操作,如何建立数据库?,如何设置库表的属性?,如何建立永久关系?,如何设置参照完整性?,1,第三章 数据库的创立与操作,3.1 数据库的创立与使用,3.2 数据库表的特性及设置,3.3 库表间的永久关系与参照完整性,3.4 多表操作,2,3.1 数据库的创立与使用P90,数据库(.dbc):,表与表之间关系的集合,数据库设计器:,能显示当前数据库全部的表、视图及其关系,并能让用户操作这些对象。,一、数据库的创建,菜单方式,:文件,新建、数据库,。,命令:,create database,说明:新创建的库自动处于打开状态。,Ex0301,3,二、数据库的相关命令操作(1),1、数据库的翻开,OPEN DATABASE,2、数据库的关闭,CLOSE DATAbase all,说明:关闭所有翻开的数据库、库表,all选项表示同时关闭所有的自由表,3、数据库的修改,MODIFY DATABASE,说明:创立或修改数据库(翻开数据库设计器),4,二、数据库的相关命令操作(2),4、数据库的删除,DELETE DATABASE DELEtetables,说明:选择DELEtetables短语时,库中的表也一起被删除,否那么只删除库文件,原库中的表变成自由表。,5,三、库表的添加与移出,1、将表添加到库中,方法一:使用库设计器中的快捷菜单,方法二:菜单“数据库 添加表,方法三:命令:ADD TABLE,2、从库中移去表,命令:REMOve TABLes delete,功能:从翻开的库中移动或删除指定的表。,说明:选择delete短语,表示将表从库中移除的同时删除,否那么原库表将变成自由表。,注意:自由表与数据库表的比较,6,四、库表的创立(P94),1、在库设计器的空白处,从快捷方式中选择“新建表;,2、在库翻开的情况下,用前一章中创立自由表的方法创立的表,都会自动添加到当前库中,成为库表;,7,关于数据库文件的补充说明:,补充1:数据库文件本身也是一个表,其中记载了它的所有表的参数、索引、关联等有关参数。,可用USE命令翻开数据库文件(但扩展名.DBC不可缺省),用BROWse命令浏览。,补充2(P4):数据词典用于保存对数据库中各种数据的定义或设置信息,包括表的属性、字段属性、记录规那么、表间关系,以及参照完整性等,这些属性或信息均可通过数据库设计器来设置、显示或修改,并且由系统保存在数据词典中,直到表从数据库中移去。,8,3.2 数据库表的特性及设置(P95),主要包括:,显示属性,字段有效性,记录有效性,主索引,表间关系,参照完整性,等,9,一、字段选项的属性设置(P95),确定字段在浏览窗口、表单或报表中显示时的列标题。,指定字段的输入格式,确定字段在浏览窗口、表单或报表中显示时的格式,10,1、“显示设置说明(1),1)格式框(),用来确定当前字段在浏览窗口、表单或报表中显示时的格式。,如:!表示所有字母轮换为大写显示,A 表示只允许输入字母,2)输入掩码,用来指定当前字段的输入格式。以到达限制数据输入范围、减少输入错误和提高输入效率的目的。,输入掩码由一串有特定含义的字符组成,常用的输入掩码字符如下页表所示。,11,输入掩码包含的字符及功能,字符,功能,X,允许输入字符,9,只允许输入数字,#,只允许输入数字、空格、正负号,$,自动显示设定的货币符号,*,数值左端的空格用*显示,.,小数点的位置,,,用逗号分隔数值的整数部分,输入掩码必须,按位,指定格式。如:,99X#,表示左边第1、2位只能输入数字,第3位可输入任何字符,第4位只能输入数字、空格或正负号,且最多只能输入4位。,12,1、“显示设置说明(2),3)标题,确定当前字段在浏览窗口、表单或报表中显示时的列标题。,例如:当zg.dbf表中“姓名字段的标题设置为“职工姓名时,在浏览窗口中,该列的标题将显示为“职工姓名而不是“姓名,13,2、“字段有效性 设置说明,当光标离开字段时,系统自动检验该字段中输入的数据是否满足“规那么中的条件,假设为.t.,那么移到下一字段,否那么,不能移到下一字段,同时系统提示“信息中设置的错误信息提示。,1)规那么:用于设置对该字段输入数据的有效性进行检查的规那么。,此框必须输入一个条件表达式。,2)信息:用于设置该字段输入出错时显示的提示信息。,框中必须为字符型表达式。,3)默认值:指定该字段的默认值。,此框中可为一个表达式,但数据类型必须与当前字段类型一致。,14,二、表选项的属性设置(P97),可设置长表名、记录验证规那么和触发器(trigger),15,1、长表名:定义了长表名,该表就具有了另一个表名。,2、记录有效性设置:用来检查同一记录中不同字段之间的逻辑关系.,(当光标离开当前记录时进行,用此规那么检验,假设为.t.,那么允许离开,否那么不能离开当前记录,并提示“信息中设置的信息。),规那么:条件表达式。,信息:字符串。当输入的数据违反记录有效性中的“规那么设置时的出错提示信息。,16,3、设置触发器(trigger),触发器是一个对库表中的记录进行插入、删除、更新操作时引发的检验规那么。规那么可以是一个逻辑值的表达式,也可以是一个自定义函数。,插入触发器:指定记录的插入规那么,当用户向表中插入或追加记录时触发。当检验结果为.f.时,插入或追加的记录将不被接受。,更新触发器,删除触发器,17,三、索引选项的设置(P96),在该选项可设置主索引。,任何一个库表最多只能有一个主索引,主索引不允许有重复值,也不允许为空值(null)。,索引的相关内容可参阅75页,18,3.3 库表间的永久关系和参照完整性(P98),一、永久关系,数据表之间有两类关系:永久关系、临时关系,1、永久关系:建立在一个数据库中不同表之间,用于反映数据之间的内存联系的关系。该关系会作为数据库的组成局部而 被永久保存,随着库的翻开而生效。,2、临时关系:表之间因为临时的需要而建立的一种记录指针相互关联的关系。这种关系会随着表的关闭消失。可存在于自由表、不同库表等任何表之间。,19,1、永久关系的创立,1、永久关系的创立,利用数据库设计器建立永久关系,只要从一个表(父表)的主索引或候选索引拖到另一表(子表)的任一索引,表间出现连线,即建立了永久关系。,在永久关系中,父表的索引必须是主索引或候选索引,因此父表与子表间的关系只能一一关系或一多关系,而不可能出现多多关系。,20,2、永久关系的编辑(修改),在数据库设计器中双击表间的关系线,在弹出的“编辑关系对话中可修改已建立的关系。,3、永久关系的删除,在数据库设计器中选中欲删除的关系连线,当该关系连线“变粗时,用键可删除。,或者:在数据库设计器中选中欲删除的关系连线,再用快捷方式中的“删除关系选项。,21,二、参照完整性(RI)(P100),1、参照完整性(Referential Integrity,RI)的概念,涉及表间数据的完整性规那么,称为参照完整性。,共有三组规那么:更新、删除和插入规那么。,22,2、参照完整性(RI)的设置,通常可用“参照完整性生成器完成相关设置。,在数据库设计器中,可用3种方法翻开RI生成器:,1)数据库编辑参照完整性,2)右键单击库设计器空白局部编辑参照完整性,3)在库设计器中双击两表连线参照完整性,RI生成器窗口的组件(见下页表格,3个选项卡:更新规那么、删除规那么、插入规那么,单项选择按钮:级联、限制、忽略,23,RI生成器窗口中选项按钮的功能:,0,更新规则,删除规则,插入规则,级联,更改,父表关键字段,值时,系统,自动更改,子表中所有相关记录的对应值,删除父表中的记录时,系统,自动删除,子表中所有相关记录,限制,若,子表有,相关记录,则,更改父表关键字段,值时就会产生“触发器失败”的提示信息,若,子表有,相关记录,则在,父表中删除记录,时就会产生“触发器失败”的提示信息,若,父表没有,相匹配的记录,则在,子表添加,记录时就会产生“触发器失败”的提示信息,忽略,允许父表更新、删除或插入记录,与子表记录无关,24,更新规那么说明,更新规那么规定了当更新父表中的主关键字(连接字段)值时,如何处理子表中的相关记录:,1)级联:用新的值自动替换子表中的相关所有记录中的关键字的值;,2)限制:假设子表中有相关的记录,那么禁止修改父表中的关键字的值;,3)忽略:不作RI检查,可随意更新父表的关键字的值。,25,删除规那么说明,删除规那么规定了当删除父表中的记录时,如何处理子表中的相关记录:,1)级联:自动删除子表中的所有相关记录;,2)限制:假设子表中有相关的记录,那么禁止删除父表中的记录;,3)忽略:不作RI检查,可随意删除父表记录,与子表没有任何关系。,26,插入规那么说明,插入规那么规定了当在子表中插入记录时,如何处理:,1)限制:假设父表中没有相匹配的关键字的值,那么禁止在子表中插入该记录;,2)忽略:不作RI检查,可随意在子表中插入任何记录。,说明:在插入规那么中,没有“级联的处理方式。,27,补充:RI=触发器?,问:触发器有三种,插入、更新、删除,,RI有三种,插入、更新、删除,,那么触发器=RI?,答:触发器是一个表内部的规那么,,而RI那么是表与表之间的规那么。是建立在永久关系之上的表间规那么。,28,补充:VFP数据完整性综述,数据完整性是指保证数据正确的特性。一般包括三类完整性:,实体完整性、域完整性、参照完整性。,1)实体完整性用于保证表中记录的唯一的特性,即一个表中不允许存在重复的记录。VFP一般用主索引或候选索引来实现。,2)域完整性用于指定字段数据的一致性,一般通过字段的数据类型和长度定义、字段有效性(域约束规那么)来实现。,3)参照完整性用于指定相关表之间的数据一致性。,29,一、多工作区操作P102,1.工作区,区号:用数字表示,1、2、3、32767,从1到10号工作区对应的区名分别为:,A、B、J,,从11至32767号工作区对应的区名分别为:,W11、W12、W32767,说明:1)最多可同时翻开32767个表;,2)1个工作区最多只能翻开1个表;,3)1个表只能在1个工作区被翻开,3.4 多表的操作(P102),区名:,30,2.工作区的选择,命令格式:SELEct,功能:选择指定的工作区为当前工作区,说明:,1)别名是表的另一个名称。可在表翻开的时候用alias 子句来指定。,如命令:USE zg ALIAs 职工,功能:在翻开zg.dbf的时候,并设其别名为职工,说明:假设表翻开时,没有用alias短语指定别名时,系统默认别名与表名相同。,2)最后选定的工作区称为当前工作区。,函数 SELEct()返回当前工作区的区号,31,3)命令 SELEct 0 表示选定当前尚未使用的最小工作区,4)各工作区记录指针相互独立,5)命令USE IN 能在指定的工作区翻开表,但不改变当前工作区,6)引用非当前工作区的字段时,需要用:,别名.字段名 或者:区名.字段名,其中的分隔符.,也可用-表示,如别名-字段名,但不能用:区号.字段名,32,多表举例,:,?的输出结果 判断list语句的正误,例:close all,sele 1,use zg alias 职工,use gz in 6,?select(),输出结果为:2,list zg.职工号,list 职工.职工号,list gz.职工号,list 职工号,输出结果为:1,sele 0,?sele(),33,关联的引题:,ex0303,分析以下显示的结果:,close all,sele 0,use gz,sele 0,use zg,list 职工号,gz.实发,运行结果,34,二、表间的逻辑关联:临时关系,临时关系(关联):,使不同,工作区的记录指针,联动,,即:建立关联后,,主表,的记录指针移动时,,被关联表,的记录指针也将作相应的移动。,表间的关联可在任何两个表之间建立。