第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确_第1页
第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确_第2页
第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确_第3页
第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确_第4页
第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确性(accuracy)和可靠性(reliability),它是防止数据库中存在不符合语义规定的数据和防止因错误的信息的输入造成无效操作或错误信息而提出的,保证在一个应用程序更新数据的过程中数据的语义正确性。数据完整性主要分为三类:实体完整性(EntityIntegrity),参照完整性(ReferentialIntegrity)以及用户定义的完整性(User-definedIntegrity),其中用户定义的完整性主要包括域完整性(DomainIntegrity)和其他自定义完整性。为维护数据库德完整性,数据库管理系统(DBMS)必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件。这些加在数据库数据上的语义约束条件称为数据库完整性规则,它们作为模式的一部分存入数据库中。完整性控制是指对数据库进行更新操作,要遵守完整性规则,才能保证数据的语义正确性,防止数据库中存在不符合语义的数据。目的是在合法用户访数问据库的过程中,保证数据的正确性和准确性。完整性检查机制是指在DBMS中检查数据是否满足完整性条件的机制。由DBMS在执行更新动作时,检查是否满足预定的完整性约束条件,来进行控制。广义的完整性控制包括故障恢复、并发控制。而一般所指的完整性控制是指基于数据库的完整性约束规则,如:实体完整性、引用完整性等。SQL中两种主要的数据完整性控制机制是指完整性约束规则的定义和检查以及触发器(Trigger)机制。完整性控制机制应具有三个功能:(1)定义功能,即提供定义完整性约束条件的机制;(2)检查功能,即检查用户发出的操作请求书否违反了约束条件;(3)如果发现用户操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。完整性控制机制的工作原理基本上分为两类,一种是定义完整性时就立刻进行检查的,例如实体完整性的定义;另外一种是定义完整性之后进行检查的,例如参照完整性的定义。SQLServer提供了一些工具来帮助用户实现数据完整性,其中最主要的是:规则(Rule),默认值(Default),约束(Constraint)和触发器(Trigger)实验报告2.1实体完整性实验目的:学习实体完整性的建立,以及实践违反实体完整性的结果。实验原理:1、实体完整性(EntityIntegrity)定义实体完整性规定表的每一行在表中是唯一的实体。SQL语法中,表中的UNIQUE、PRIMARYKEY和IDENTITY约束就是实体完整性的体现。实体完整性规则:每个关系中主码的任何属性不能取空值。注意:空值为NULL,不是0,也不是空格,而是一个“不知道”或“不确定”的数据值。2、实施完整性检查的时机实施完整性规则检查的时机分为立即检查和延迟检查(ImmediateordeferredChecking),只有选择正确的检查时机才能保证语义的正确性,即保证数据的完整性。实体完整性规则检查的时机是立即检查的,而参照完整性和触发器一般都是延迟检查。3、事务处理事务是一组数据库操作的集合,这些操作要么一起成功,要么一起失败。操作的提交或回退是一同生效的。事务处理的概念对维护数据的完整性和一致性是十分重要的。

数据库操作(如INSERT、UPDATE和DELETE)如果是一个事务中的操作,那么它们要在事务控制之下完成。数据库对象的beginTransaction、commitTransaction和rollbackTransaction方法分别用来启动、提交和回退事务。实验内容:(1)在数据库School中建立表Stu_Union,进行主键约束,在没有违反实体完整性的前提下插入并更新一条记录。(2)演示违反实体完整性的插入操作。(3)演示违反实体完整性的更新操作。(4)演示事务的处理,包括事务的建立、处理以及出错时的事务回滚。(5)通过建立Scholarship表,插入数据,演示当与现有的数据环境不等时,无法建立实体完整性以及参照完整性。实验步骤:代码实现参见数据库实验习题2.1.sql文档心得体会:1、学习了实体完整性的相关内容,加深了对于这部分知识点的认识;(实验课本第59页——思考:为什么sno置为‘’没有违反非空的约束?答:SQL系统默认这里定义的‘’为一个值;如果执行sno=NULL,则将被系统拒绝)实验2.2参照完整性实验目的:学习建立外键,以及利用FOREIGNKEY---REFERENCES子句以及各种约束保证参照完整性。实验原理:1)参照完整性(ReferentialIntegrity)参照完整性是指两个表的主关键字和外关键字的数据对应一致。它确保了有主关键字的表中对应其他表的外关键字的行存在,即保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。参照完整性是建立在外关键字和主关键之间或外关键字和唯一性关键字之间的关系上的。参照完整性规则:关系R的外来码取值必须是关系S中某个元组的主码值,或者可以是一个“空值”。定义外键时定义参照完整性、约束参照表A和被参照表B。对于违反参照完整性的操作有时候并不是简单拒绝执行,而是接受该操作,同时执行必要的附加操作。DBMS提供机制来定义是否必须制定外键的具体值而非空值。主键列和外键列可以有不同的名字,空值的要求也可以不一致,默认值也可以不同,但数据类型必须相同。2)SLServer中完整性的体现在SQLServer中参照完整性作用表现在如下几个方面:·禁止在从表中插入包括主要中不存在的外关键字的数据行。·禁止会导致从表中的相应值孤立的主表中的外关键字值改变。·禁止删除在从表中的有对应记录的主表记录。3)SQL语句中删除和插入基本关系元组(1)在被参照关系中删除元组的三种控制方式:·级联删除(CASCADES):将参照关系中与被参照关系中要删除的元组主键值相同的元组一起删除。

·受限删除(RESTRICTED):只有参照关系中没有元组与被参照关系中要删除的元组主键值相同时才执行删除操作,否则拒绝。·置空值删除(SETNULL):删除被参照关系中的元组,同时将参照关系中相应元组的外键值置空。(2)在参照关系中插入元组。·受限插入:只是被参照关系中有元组与参照关系中要插入元组外键值相同时,才执行插入操作,否则拒绝。·递归插入:插入元组外键值在被参照关系中没有相同元组,则首先向被参照关系插入元组,其主键值等于参照关系插入元组的外键值,然后再向参照关系插入元组。4)DBMS对参照完整性进行检查的四种情况(1)在四种情况下DBMS要进行检查,分别是对参照表进行插入和修改以及对被参照表进行删除和修改。(2)SQLServer四种情况违反参照完整性的处理方法如表所示:相关操作INSERTDELETEUPDATE被参照表不需要检查ONDELETE„(用户显示定ONUPDATE„(用户显示方义的方式,提供两种:cascade式,提供两种:cascade和no和noaction)ORdefault(系action)ORdefault(系统默认统默认的方式noaction)的方式noaction)参照表拒绝执行不需要检查拒绝执行5)参照完整性的特殊问题(1)表的自参考问题。问题1:无法定义。处理方法:先用createtable创建主键约束,再用altertable创建外键约束。问题2:容易造成无法启动的情况。(系统通过事务完毕后再检查)(2)两张表互相参照的问题。问题1:无法定义。处理方法:同表的自参照问题的解方决法相同。问题2:容易造成无法启动的情况。(系统通过事务完毕后再检查)(3)既是外键又是主键中的属性。处理方法:既要遵从实体完整性也要遵从参照完整性。实验内容:(1)为演示参照完整性,建立表Course,令cno为主键,并在Stu_Union中插入数据。为下面的实验步骤做预先准备。(2)建立表SC,令sno和cno分别为参照Stu_Union表以及Course表的外键,设定为级联删除,并令(sno,cno)为其主键。在不违反参照完整性的前提下,插入数据。(3)演示违反参照完整性的插入数据。(4)在Stu_Union中删除数据,演示级联删除。(5)在Course中删除数据,演示级联删除。(6)为了演示多重级联删除,建立Stu_Union表,令stu_id为参照Stu_Union表的外键,令card_id为其主键,并插入数据。(7)为了演示多重级联删除,建立ICBC_Card表,令stu_card_id为参照Stu_Card表的外键,令bank_id为其主键,并插入数据。(8)通过删除students表中的一条记录,演示三个表的多重级联删除。(9)演示事务中进行多重级联删除失败的处理。修改ICBC_Card表的外键属性,使其变为OndeleteNoaction,演示事务中通过删除students表中的一条记录,多重级联删除失败,整个事务回滚到事务的初始状态。(10)演示互参照问题以及其解决方法。要建立教师授课和课程指定教师停课关系的两张表,规定一个教师可以授多门课,但是每个课程只能指定一个教师去听课,所以要为两张表建立相互之间的参照关系。实验步骤:代码实现参见数据库实验习题2.2.sql文档心得体会:1、学习了参照完整性的相关内容,加深了对于这部分知识点的认识;(习题:(1)用altertable语句将SC表中的ondeletecascade改为ondeleterestrict。重新插入SC的数据。重复本实验的实验步骤中((2)用altertable语句将SC表中的ondeletecascade改为的数据。重复本实验的实验步骤中(4)(5),观察结果,分析原因。4)(5),观察结果,分析原因。ondeletesetNULL。重新插入SC解答:SQL不提供ondeleterestrict/ondeletesetNULL,用ondeletenoaction;结果:数据库不允许删除STU_UNION表以及NEW_COUSE表中对应的元组;原因:(1)由于ondeleterestrict的约束,数据库不允许任何引用关系存在对应元组的删除操作(2)约束ondeletesetNULL是将要删除的对应元组的外键置空值,如果sno和cno不是SC表的主键,删除操作是可以完成的,但是由于主键不可以取空值,所以删除操作不能进行。)实验2.3用户自定义完整性实验目的:学习用户自定义约束,并实践用户自定义完整性,利用SQL查询分析器用短语NOTNULL、UNIQUE、CHECK保证用户定义完整性。实验原理:1)用户自定义完整性(不同的关系数据库系统根据其定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用所必须满足的语义要求。它主要包括:(1)域完整性(DomainIntegrity)[1]域完整性是指数据库中的列必须满足某种特定的数据户自定义完整性约束,当有新数据插入到数据库中,系统可以按照定否正确的检测。其中,约束又包括取值范围精度等规定。表中的CHECKFOREIGNKEY约束和DEFAULTNOTNULL定义都属于域完整性的范畴。[2]现在的RDBMS中,一般都有域完整性检查功能。SQLServer提供了定整性的机制,以便用统一的系统方法来处理它们。而不是用应用程序来承担这一功能。其的完整性类型都支持用户定义的完整性。[3]一个属性能否取空值一般由语义决定,也是域约束的内容之一。(2)其他用户自定义完整性不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。其他类型的用户自定义的完整性即是针对某个特定关系数据库的约束条件,它反映某个具体应User-definedIntegrity)应用环境的不同,往往需要一些特殊的约束条件。用户自涉及的数据类型或约束。域约束是最常见的用义进行关系属性取值是义和检验这类完他

用所涉及的数据必须满足的语义要求。2)SQL中的约束机制约束主要包括如下两种。(1)静态约束:对静态对象的约束是反映数据库状态合理性的约束,如实体完整性。(2)动态约束:对动态对象的约束是反映数据库状态变迁的约束,如触发器。SQL中用于属性约束方面的有NOTNULL、CHECK等子句;而用于全局约束方面的有CREATEASSERTION、CREATERULE等语句。3)一般的规则组成规则一般是由规则标识(可默认)以及规则语句组成。规则语句由约束作用的数据对象、约束定义(如断言Assertion)、触发条件以及违反规则时的响应动作购成。4)规则的一般分类类型属性级元组级关系级静态类型、格式、值域、空值元组的各个属性之间的取实体、引用统计完整性函数依赖/值改变元组值修改时各属性间的关系变化的前后一致性值限制动态属性约束5)自定义数据类型和规则(1)如果多个列使用同一类型的约束,规则就为数据库设计提供了更高层次的抽象,如工资数据类型肯定比smallmoney能建立更多的特征及更容易被理解。或在一些特殊的情况下,通过自定义的数据类型和(2)规则的创建(当约束条件要为多列使用时)。步骤一:CREATERULEruleAScondition_expression步骤二:Sp_bindrule[@rulename=]’rule’,[@objname=]’object_name’规则一般绑定到某一列,或者是用户自己定义的数据类型。6)Check约束(1)CHECK约束是对列列或的组合的取值限制,它采用SQL语句中WHERE子句相同的表达方式来表达,分为表一级和列一级的约束。(2)空值的问题。空值意味着检查约束的值是未知的,所以空值的出现不会违反检查约束的条件。(3)潜在的语义问题。[1]大多数的DBMS不会检查约束和默认值定义的语句,所以要注意语义冲突;[2]check和check之间的冲突。[3]定义了置空删除,但表中检查约束要求此列不能为空;定义该列不能为空,检查约束要求此列为空。7)Rule约束的建立规则可以是WHERE子句中任何有效的表达式,并且可以包括诸如算术运算符、关系运算符和谓词(如IN、LIKE、BETWEEN)之类的元素。规则不能引用列或其他数据库对象。可以包含不引用数据库对象的内置函数。Condition_expression包括一个变用通过UPDATE或INSERT语句输入的值。在创建规则时,可以使用值,但第一个字符必须是@符号。8)Rule的绑定以及松绑量。每个局部变量的前面都有一个@符号。该表达式引任何名称或符号表示创建规则后,规则仅仅只是一个存在于数据库中的对象,并未发生作用。需要将规则与数据库表或用户自定义对象联系起来,才能达到创建规则的目的。联系的方法称为“绑定”,所谓“绑定”就是指定规则作用于哪个表的哪个列,或哪个用户自定义数据类型。表的一列或一个用户自定义数据类型只能与一个规则相绑定,而一个规则可以绑定多对象。这正是规则的魅力所在。解除规则与对象的绑定称为“松绑”。(1)存储过程Sp_bindrule绑定规则。存储过程Sp_bindrule可以绑定一个规则到表的一个列或一个用户自定义数据类型上。其语法如下:Sp_bindrule[@rulename=]’rule’,[@objname=]’object_name’[,’futureonly’]各参数说明如下:[@rulename=]’rule’指定规则名称。[@objname=]’object_name’指定规则绑定的对象。‘futureonly’选项仅在绑定规则到用户定义数据类型上时才可以使用。当指定此选项时,仅以后使用此用户自定义数据类型的列会应用新规则,而当前已经使用此数据类型的列则不受影响。(2)存储过程Sp_unbindrule解除规则的绑定。存储过程Sp_unbindrule可解除规则与列或用户自定义数据类型的绑定其语法如下:Sp_unbindrule[@objname=]’object_name’[,’futureonly’]其中‘futureonly’选项同绑定时一样,仅用于用户自定义数据类型。它指定现有的此用户自定义数据类型定义的列仍然保持与此规则的绑定,如果不指定此项则所有由此用户自定义数据类型定义的列也随之解除与此规则的绑定。实验内容:(1)创建worker表,并自定义2个约束U1以及U2,其中U1规定Name字段唯一,U2规定sage(级别)字段的上限是28。(2)在worker表中插入一条合法记录。(3)演示插入违反U2例子,U2规定元组的sage属性的值必须<=28。(4)去除U2(5)重新插入(3)中想要插入的数据,由于去除了U2插入成功。(6)创建规则rule_sex,规定插入或更新的值只能是M或F,并绑定到worker的sex字段。(7)演示违反规则rule_sex的插入操作。实验步骤:代码实现参见数据库实验习题2.3.sql文档心得体会:1、学习了参照完整性的相关内容,加深了对于这部分知识点的认识;实验报告2.4触发器实验目的:通过实验使实验原理:1、触发器的概述学生加深对数据库完整性的理解,学会创建和使用触发器。触发器是SQL提供的一种维护数据完整性的工具。触发器过程是由程序员给定,例如

一个和完整性控制动作有关的处理过程。当系统规定的触发条件发生时,给定的过程被调用。触发条件是多种多样的,例如:进入或退出程序的某层结构(如Block、Form等);查询、修改等操作发生之前或之后;某个按键动作;Trigger过程调用(相当于子程序调用)。触发器是实施复杂完整性的特殊类型的存储类型。触发器不需要专门语句调用,当对它所保护数据进行修改时自动激活,以防止对数据进行不正确,未授权或不一致的修改。2、触发器的类型以及其具有的特殊表一个触发器只适用于一个表,每个表最多只能有三个触发器,它们分别是INSERT、UPDATE和DELETE触发器。触发器仅在实施数据完整性和处理业务规则时使用。每个触发器有两个特殊的表,即入插表(INSERTTABLE)和删除表(DELETETABLE)。这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中。因此不允许用户直接对其修改,并且这两个表的结构总是与被该触发器作用的表有相同的表结构。3、三种触发器的(1)INSERT触发器:先向INSERTED表中插入一个的新行是否有效,确定是否要阻止该插入操作。如果所入插的行中的值是有入插触发器表。(2)UPDATE触发器:先将原

温馨提示

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

评论

0/150

提交评论