《数据完整性》PPT课件.ppt
2.6 数据完整性数据完整性计算机教研组计算机教研组 张琦张琦1 1什么是数据完整性?什么是数据完整性?数据库中数据完整性是指保证数据正确的数据库中数据完整性是指保证数据正确的特性。特性。数据完整性包括数据完整性包括:实体完整性实体完整性域完整性域完整性参照完整性参照完整性2 22.6.1 实体完整性与主关键字实体完整性与主关键字保证表中纪录的唯一性保证表中纪录的唯一性也就是说也就是说表中不允许有重复的纪录表中不允许有重复的纪录在在VFP中利用中利用主关键字主关键字和和候选关键字候选关键字来保证来保证纪录的唯一纪录的唯一3 32.6.2 域完整性与约束规则域完整性与约束规则数据类型就属于域完整性的范畴数据类型就属于域完整性的范畴域约束规则包括域约束规则包括字段有效性规则字段有效性规则和和记录有记录有效性规则效性规则4 4设置字段属性和有效性规则设置字段属性和有效性规则对字段的输入输出格式、默认数值、显示标题、对字段的输入输出格式、默认数值、显示标题、字段注释以及表文件长名、数据表的注释进行字段注释以及表文件长名、数据表的注释进行设置设置设置设置单字段单字段的数据输入规则,控制和检查输入的数据输入规则,控制和检查输入到该字段中的数据是否满足指定的要求;称为到该字段中的数据是否满足指定的要求;称为“字段级字段级”有效性规则有效性规则设置设置“记录级记录级”规则,控制和检验所输入的整规则,控制和检验所输入的整条记录是否符合要求;一般包含和涉及两个或条记录是否符合要求;一般包含和涉及两个或两个以上字段;又称为两个以上字段;又称为多字段有效性规则多字段有效性规则5 5设置字段属性和约束规则设置字段属性和约束规则6 6设置表的字段属性设置表的字段属性1.输入掩码输入掩码是指定义字段中的值必须遵守的标点,空格和是指定义字段中的值必须遵守的标点,空格和其他格式的要求,以限定或控制用户输入的数其他格式的要求,以限定或控制用户输入的数据格式,屏蔽非法输入,从而减少人为的数据据格式,屏蔽非法输入,从而减少人为的数据输入错误,保证输入的字段数据具有统一的风输入错误,保证输入的字段数据具有统一的风格,提高输入的效率。格,提高输入的效率。例如在课程号字段的例如在课程号字段的“输入掩码输入掩码”文本框中输文本框中输入入“JC999”表示课程号的格式由字母表示课程号的格式由字母JC和和1到到3位数字组成位数字组成7 7设置表的字段属性设置表的字段属性2.格式格式实质上是一种输出掩码,它决定了字段在浏览实质上是一种输出掩码,它决定了字段在浏览窗口,表单,报表等界面中的显示样式。窗口,表单,报表等界面中的显示样式。例如将课程名字段带字母的必须用大写字母表例如将课程名字段带字母的必须用大写字母表示,则可以在格式中定义示,则可以在格式中定义20个!(课程名的宽个!(课程名的宽度为度为20)8 8设置表的字段属性设置表的字段属性3.标题标题在数据库表中允许字段名最多使用在数据库表中允许字段名最多使用128个字符,个字符,即长字段名,但是在使用的时候可能会很不方即长字段名,但是在使用的时候可能会很不方便便可以为字段名设置标题,以便在浏览窗口,表可以为字段名设置标题,以便在浏览窗口,表单或报表中显示单或报表中显示9 9常用的掩码及含义常用的掩码及含义 !将小写字母转换为大写将小写字母转换为大写#允许输入数字、空格和正负号允许输入数字、空格和正负号 ,分隔小数点左边的数字串分隔小数点左边的数字串.规定小数点的位置规定小数点的位置9允许输入数字和正负号允许输入数字和正负号D使用系统当前的日期格式使用系统当前的日期格式A允许输入输出字母允许输入输出字母N允许输入字母和数字允许输入字母和数字X允许输入任何字符允许输入任何字符Y允许输入逻辑型数值,并转换为大写字母允许输入逻辑型数值,并转换为大写字母Y和和N1010设置表的字段属性设置表的字段属性4.字段注释字段注释在数据表中可以为每个字段加上一些详细的注在数据表中可以为每个字段加上一些详细的注释,或是一些说明性的文字,使得数据表更容释,或是一些说明性的文字,使得数据表更容易理解,也便于日后其他人对数据表进行维护易理解,也便于日后其他人对数据表进行维护在项目管理器中打开表,选中某一字段后就可在项目管理器中打开表,选中某一字段后就可以在窗口底部的以在窗口底部的“说明说明”栏中显示注释信息。栏中显示注释信息。1111违反违反“约束约束”性规则后的信息提性规则后的信息提示示设置设置“约束约束”性规则的目的是保证数据输入的有性规则的目的是保证数据输入的有效性和正确性;减少数据输入错误效性和正确性;减少数据输入错误违反违反“约束约束”规则时,系统将弹出信息提示框,规则时,系统将弹出信息提示框,显示相应的提示信息显示相应的提示信息(错误提示信息可以设定错误提示信息可以设定)同时,拒绝接受该项数据输入同时,拒绝接受该项数据输入“约束约束”条件的表现形式是条件的表现形式是逻辑表达式逻辑表达式1212教材教材 P76 例例2.29和例和例2.30例例2.29 规则文本框输入规则文本框输入 性别性别=“男男”OR 性别性别=“女女”信息文本框输入信息文本框输入“性别必须是性别必须是“男男”或或“女女”,不接受其他值,不接受其他值”默认值文本框输入默认值文本框输入“男男”13132.6.3 参照完整性和表之间的关联参照完整性和表之间的关联是指建立一组规则是指建立一组规则,当用户插入当用户插入,删除或修删除或修改一个表中的数据时改一个表中的数据时,通过参照引用相互关通过参照引用相互关联的另一个表中的数据联的另一个表中的数据,来检查对表的数据来检查对表的数据操作是否正确操作是否正确.在在VFP中中,参照完整性可以保证参照完整性可以保证:当父表中没有关联记录时当父表中没有关联记录时,记录不得添加到子表记录不得添加到子表中中当改变父表的值而导致子表中出现孤立记录时当改变父表的值而导致子表中出现孤立记录时,父表的值不能被改变父表的值不能被改变当父表记录在子表中有匹配记录时当父表记录在子表中有匹配记录时,该父表记录该父表记录不能被删除不能被删除1414建立表之间的永久联系建立表之间的永久联系在在VFP中中,建立参照完整性必须先建立表之间的联系建立参照完整性必须先建立表之间的联系永久关系是在数据库中建立并保存在数据库中的数据表之永久关系是在数据库中建立并保存在数据库中的数据表之间的永久关系间的永久关系;不经删除不经删除,将永远存在将永远存在永久关系只能通过永久关系只能通过“数据库设计器数据库设计器”进行设置、编辑和删进行设置、编辑和删除除建立永久关系的数据表之间有父表和子表的区别建立永久关系的数据表之间有父表和子表的区别关联其它表的称为关联其它表的称为“父表父表”;被关联的表称为;被关联的表称为“子表子表”建立永久关系前提条件建立永久关系前提条件数据表必须有意义相同的数据表必须有意义相同的“公共字段公共字段”事先均以该事先均以该“公共字段公共字段”作为索引关键字分别建立索引作为索引关键字分别建立索引1515创建永久关系创建永久关系父表必须建立主索引或侯选索引父表必须建立主索引或侯选索引子表也是子表也是“主主(或候选或候选)索引索引”时,为一对一关系时,为一对一关系子表为普通索引时,为一对多关系子表为普通索引时,为一对多关系对于多对多的关系,一般需要拆分为两个对于多对多的关系,一般需要拆分为两个“一对多一对多”关系关系创建一张创建一张“纽带表纽带表”通过通过“纽带表纽带表”创建两个创建两个“一对多一对多”的关系的关系永久关系实际上是建立在永久关系实际上是建立在“索引索引”上的上的 1616永久关系的作用永久关系的作用在涉及多张数据表操作时,系统将自动按在涉及多张数据表操作时,系统将自动按所建立的永久关系,将相关的数据记录逻所建立的永久关系,将相关的数据记录逻辑地辑地“连接连接”成为一张成为一张“临时表临时表”1717VFP中的永久关系问题中的永久关系问题VFP只能处理和建立只能处理和建立一对一关系一对一关系一对多关系一对多关系对于对于“多对多多对多”关系要通过关系要通过“拆分拆分”,而形成两个,而形成两个“一对多一对多”关系关系1818如何建立表之间的永久联系如何建立表之间的永久联系建立永久关系的表应属于一个数据库建立永久关系的表应属于一个数据库打开数据库设计器,在父表中建立主索引,打开数据库设计器,在父表中建立主索引,在子表中建立普通索引,然后通过父表的在子表中建立普通索引,然后通过父表的主索引和子表的普通索引建立起两个表之主索引和子表的普通索引建立起两个表之间的联系间的联系具体操作演示具体操作演示1919如何编辑和删除关系如何编辑和删除关系编辑关系:右键单击要修改的关系线,该编辑关系:右键单击要修改的关系线,该关系线变粗,在弹出的快捷菜单中选择关系线变粗,在弹出的快捷菜单中选择“编辑关系编辑关系”命令,会弹出命令,会弹出“编辑关系编辑关系”对对话框话框删除关系:选中两表之间的关系线,按下删除关系:选中两表之间的关系线,按下DELETE键。键。2020设置参照完整性规则设置参照完整性规则设置参照完整性就是设置一组规则,当发生记录设置参照完整性就是设置一组规则,当发生记录更新、插入或删除操作时,更新、插入或删除操作时,以父表为参照,控制以父表为参照,控制子表数据如何操作子表数据如何操作通过实施参照完整性规则,可以保证:通过实施参照完整性规则,可以保证:父表中没有的关联记录时,记录不能写入子表当子表中有匹配数据时,父表记录不能删除当改变父表的数据项,将使子表出现孤立记录时,父表中的修改不能进行2121参照完整性规则的组成参照完整性规则的组成更新规则、删除规则和插入规则更新规则、删除规则和插入规则分别规定:分别规定:当更新父表中主关键字数值,如何处理子表中的相关记录的数据项当删除父表的记录时,如何处理子表中的相关记录当在子表中插入或更新记录时,是否进行参照完整性检查规则有三个选项:规则有三个选项:级联、限制、忽略2222级联限制忽略的意义级联限制忽略的意义2323设置的方法设置的方法关闭数据库中所有已经打开的表关闭数据库中所有已经打开的表激活激活“数据库设计器数据库设计器”在菜单中选择在菜单中选择“数据库数据库/清理数据库清理数据库”在菜单中选择在菜单中选择“数据库数据库/编辑参照完整性编辑参照完整性”弹出弹出“参照完整性生成器参照完整性生成器”2424参照完整性生成器参照完整性生成器2525数据表完整性保证问题数据表完整性保证问题保证数据库的完整性和正确性,是在数据保证数据库的完整性和正确性,是在数据库定义阶段完成的库定义阶段完成的列的唯一性有列的唯一性有VFP系统自动检测实现系统自动检测实现表的设计时必须考虑设置该表的关键字表的设计时必须考虑设置该表的关键字实体完整性通过设置关键字不能取实体完整性通过设置关键字不能取“空值空值”实实现现行的唯一性通过设置侯选或主索引实现行的唯一性通过设置侯选或主索引实现参照完整性通过设置数据字典实现参照完整性通过设置数据字典实现用户定义的完整性通过设置数据字典实现用户定义的完整性通过设置数据字典实现26262.7 数据库的多表操作2727工作区问题VFP系统允许在系统允许在32767个工作区中打开并操作数据个工作区中打开并操作数据表;即提供表;即提供32767个工作区个工作区同一时刻一个区只能打开一个数据表文件;但允同一时刻一个区只能打开一个数据表文件;但允许一个数据表文件在不同的工作区分别被打开许一个数据表文件在不同的工作区分别被打开数据库表的工作区由数据库指定;自由表的工作数据库表的工作区由数据库指定;自由表的工作区由用户设定区由用户设定如不指定和特别设定,系统默认:总是在第一个如不指定和特别设定,系统默认:总是在第一个工作区中打开数据表文件工作区中打开数据表文件2828工作区的标记方法编号编号用用 1-32767 分别顺序标记不同的工作区分别顺序标记不同的工作区别名别名用用 AJ 10个字母做为别名,表示第个字母做为别名,表示第 1-10 号号工作区工作区使用打开的数据表的文件名作为别名使用打开的数据表的文件名作为别名2929多表操作问题多表操作问题VFP支持在不同的工作区打开并使用不同的支持在不同的工作区打开并使用不同的数据表数据表多表操作的意义在于多表操作的意义在于同时使用在不同工作区中打开的表文件中的数据记录对于多表操作而言:只有当前工作区中数据表可以进行读写操作;非当前工作区中数据只能读取而不能写入3030工作区选择命令工作区选择命令命令格式命令格式SELECT 工作区编号工作区编号|别名别名|0功能功能选择需要使用的工作区作为选择需要使用的工作区作为当前工作区当前工作区特殊说明特殊说明选择选择 0 时时,表示自动选择工作区,表示自动选择工作区编号最小的空编号最小的空闲工作区闲工作区作为当前工作区作为当前工作区3131特殊问题特殊问题非当前工作区数据表中字段的表示方法非当前工作区数据表中字段的表示方法工作区别名工作区别名.|-字段名:字段名:A.姓名 或 A-姓名学生表.姓名 或 学生表-姓名假设假设假设假设“学生表学生表学生表学生表”在第一工作区打开在第一工作区打开在第一工作区打开在第一工作区打开3232多工作区互访的例多工作区互访的例假设两个关系假设两个关系TEST1(姓名姓名,班级班级,出生日期出生日期,总分总分)TEST2(姓名姓名,班级班级,数学数学,语文语文,总分总分)记录数相同记录数相同相对应的记录位置相同相对应的记录位置相同3333多工作区互访的例多工作区互访的例Use test1 in 1Use test2 in 2Go 3Sele 2Go 3Sele 1Disp 姓名,B-数学,B-语文,总分3434多工作区互访的例多工作区互访的例多工作区互访的实现是建立在多工作区互访的实现是建立在相同记相同记录录“相对应相对应”的基础上的。的基础上的。本例中的本例中的“对应对应”是依靠在不同的工是依靠在不同的工作区中,作区中,“人工人工”调整记录指针实现调整记录指针实现的的3535数据表的关联数据表的关联目的如果在多个工作区同时打开多个表文件,在当如果在多个工作区同时打开多个表文件,在当前工作区中移动表的记录指针时,被关联的数前工作区中移动表的记录指针时,被关联的数据表的记录指针也随之移动据表的记录指针也随之移动建立关联用来建立关联的表称为父表,被关联的表称为用来建立关联的表称为父表,被关联的表称为子表子表父表与子表的关联,通过父表与子表的关联,通过“关键字表达式关键字表达式”建建立立3636建立和解除关联的命令建立和解除关联的命令建立关联的命令建立关联的命令SET RELATION TO INTO|解除关联的命令解除关联的命令SET RELATION TO 解除所有的关联解除所有的关联SET RELATION OFF INTO|解除指定的关联解除指定的关联3737命令说明命令说明子表必须按子表必须按“关联字表达式关联字表达式”索引索引如果子表的索引是普通索引,就有可能如果子表的索引是普通索引,就有可能出现多个与关键字的值相同的情况;此出现多个与关键字的值相同的情况;此时,如需找到与关键字相同的其他记录,时,如需找到与关键字相同的其他记录,应使用命令:应使用命令:SET SKIP TO 别名 3838数据表关联的特点数据表关联的特点数据表的关联是一种数据表的关联是一种临时临时的关系;不能保存;的关系;不能保存;相关联的数据表关闭后将自动解除相关联的数据表关闭后将自动解除数据表的关联是一种数据表的关联是一种逻辑的连接逻辑的连接;而非物理;而非物理的连接的连接数据表的关联的目的是实现数据表的关联的目的是实现“指针随动指针随动”与与“永久关系永久关系”的意义和作用机制完全不同的意义和作用机制完全不同(永久关系是建立在双方的索引上的永久关系是建立在双方的索引上的)3939举例举例 教材教材P82 例例2.33Sele 2Use 成绩成绩Index on 学号学号 tag 学号学号Sele 1Use 学生学生Set rela to 学号学号 into BDisp all 学号,姓名,班级,学号,姓名,班级,B-学号,学号,B-课程号,课程号,B-成绩成绩Set skip to BDisp all 学号,姓名,班级,学号,姓名,班级,B-学号,学号,B-课程号,课程号,B-成绩成绩Go 5Disp 学号,姓名,班级,学号,姓名,班级,B-学号,学号,B-课程号,课程号,B-成绩成绩Close all4040问题问题1在执行如下命令时,在执行如下命令时,K3表将在表将在_打开。打开。SELECT 1USE K1SELECT 3USE K2SELECT 0USE K3A.第第0工作区工作区B.第第1工作区工作区C.第第2工作区工作区D.第第3工作区工作区4141问题问题2下面关于索引的描述正确的是下面关于索引的描述正确的是 A建立索引之后,原来数据库文件中记录建立索引之后,原来数据库文件中记录的物理顺序将被改变的物理顺序将被改变B索引与数据库表的数据存储在一个文件索引与数据库表的数据存储在一个文件中中C创建索引是创建一个指向数据库表文件创建索引是创建一个指向数据库表文件记录的指针构成的文件记录的指针构成的文件D使用索引并不能加快对表的查询操作使用索引并不能加快对表的查询操作4242问题问题3以下关于主索引和候选索引的叙述正确的是以下关于主索引和候选索引的叙述正确的是 A主索引和候选索引都能保证表记录的惟一性主索引和候选索引都能保证表记录的惟一性B主索引和候选索引都可以建立在数据库表和主索引和候选索引都可以建立在数据库表和自由表上自由表上C主索引可以保证表记录的惟一性,而候选索主索引可以保证表记录的惟一性,而候选索引不能引不能D主索引和候选索引是相同的概念主索引和候选索引是相同的概念4343问题问题4在表设计器的在表设计器的“字段字段”选项卡中可以创建选项卡中可以创建的索引是的索引是 A主索引主索引B惟一索引惟一索引C候选索引候选索引D普通索引普通索引4444问题问题5 如果指定参照完整性的删除规则为如果指定参照完整性的删除规则为“级联级联”,则当删除父表中的记录时,则当删除父表中的记录时 A系统自动备份父表中被删除记录到一个系统自动备份父表中被删除记录到一个新表中新表中B若子表中有相关记录,则禁止删除父表若子表中有相关记录,则禁止删除父表中的记录中的记录C会自动删除子表中所有相关记录会自动删除子表中所有相关记录D不做参照完整性检查,删除父表记录与不做参照完整性检查,删除父表记录与子表无关子表无关4545问题问题6数据库表可以设置字段有效性规则,字段数据库表可以设置字段有效性规则,字段有效性规则属于有效性规则属于 A实体完整性范畴实体完整性范畴B参照完整性范畴参照完整性范畴C数据一致性范畴数据一致性范畴D域完整性范畴域完整性范畴4646课后练习课后练习P83选择:选择:4,21填空:填空:1,2,34747