当前位置:文档之家› 第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确

第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确

第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确
第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确

第二章数据库的完整性控制

数据完整性(Data Integrity)是指数据的精确性(accuracy)和可靠性(reliability),它是防止数据库中存在不符合语义规定的数据和防止因错误的信息的输入造成无效操作或错误信息而提出的,保证在一个应用程序更新数据的过程中数据的语义正确性。

数据完整性主要分为三类:实体完整性(Entity Integrity),参照完整性(Referential Integrity)以及用户定义的完整性(User-defined Integrity),其中用户定义的完整性主要包括域完整性(Domain Integrity)和其他自定义完整性。

为维护数据库德完整性,数据库管理系统(DBMS)必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件。这些加在数据库数据上的语义约束条件称为数据库完整性规则,它们作为模式的一部分存入数据库中。

完整性控制是指对数据库进行更新操作,要遵守完整性规则,才能保证数据的语义正确性,防止数据库中存在不符合语义的数据。目的是在合法用户访问数据库的过程中,保证数据的正确性和准确性。完整性检查机制是指在DBMS中检查数据是否满足完整性条件的机制。由DBMS在执行更新动作时,检查是否满足预定的完整性约束条件,来进行控制。广义的完整性控制包括故障恢复、并发控制。而一般所指的完整性控制是指基于数据库的完整性约束规则,如:实体完整性、引用完整性等。SQL中两种主要的数据完整性控制机制是指完整性约束规则的定义和检查以及触发器(Trigger)机制。

完整性控制机制应具有三个功能:

(1)定义功能,即提供定义完整性约束条件的机制;

(2)检查功能,即检查用户发出的操作请求书否违反了约束条件;

(3)如果发现用户操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。

完整性控制机制的工作原理基本上分为两类,一种是定义完整性时就立刻进行检查的,例如实体完整性的定义;另外一种是定义完整性之后进行检查的,例如参照完整性的定义。

SQL Server提供了一些工具来帮助用户实现数据完整性,其中最主要的是:规则(Rule),默认值(Default),约束(Constraint)和触发器(Trigger)

实验报告2.1 实体完整性

实验目的:

学习实体完整性的建立,以及实践违反实体完整性的结果。

实验原理:

1、实体完整性(Entity Integrity)定义

实体完整性规定表的每一行在表中是唯一的实体。SQL语法中,表中的UNIQUE、PRIMARY KEY和IDENTITY约束就是实体完整性的体现。

实体完整性规则:每个关系中主码的任何属性不能取空值。

注意:空值为NULL,不是0,也不是空格,而是一个“不知道”或“不确定”的数据值。

2、实施完整性检查的时机

实施完整性规则检查的时机分为立即检查和延迟检查(Immediate or deferred Checking),只有选择正确的检查时机才能保证语义的正确性,即保证数据的完整性。

实体完整性规则检查的时机是立即检查的,而参照完整性和触发器一般都是延迟检查。

3、事务处理

事务是一组数据库操作的集合,这些操作要么一起成功,要么一起失败。操作的提交或回退是一同生效的。事务处理的概念对维护数据的完整性和一致性是十分重要的。

数据库操作(如INSERT、UPDA TE和DELETE)如果是一个事务中的操作,那么它们要在事务控制之下完成。数据库对象的begin Transaction、commit Transaction和rollback Transaction方法分别用来启动、提交和回退事务。

实验内容:

(1)在数据库School中建立表Stu_Union,进行主键约束,在没有违反实体完整性的前提下插入并更新一条记录。

(2)演示违反实体完整性的插入操作。

(3)演示违反实体完整性的更新操作。

(4)演示事务的处理,包括事务的建立、处理以及出错时的事务回滚。

(5)通过建立Scholarship表,插入数据,演示当与现有的数据环境不等时,无法建立实体完整性以及参照完整性。

实验步骤:

代码实现参见数据库实验习题2.1.sql文档

心得体会:

1、学习了实体完整性的相关内容,加深了对于这部分知识点的认识;

(实验课本第59页——

思考:为什么sno置为‘’没有违反非空的约束?

答:SQL系统默认这里定义的‘’为一个值;如果执行sno=NULL,则将被系统拒绝)

实验2.2 参照完整性

实验目的:

学习建立外键,以及利用FOREIGN KEY---REFERENCES子句以及各种约束保证参照完整性。

实验原理:

1)参照完整性(Referential Integrity)

参照完整性是指两个表的主关键字和外关键字的数据对应一致。它确保了有主关键字的表中对应其他表的外关键字的行存在,即保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。参照完整性是建立在外关键字和主关键之间或外关键字和唯一性关键字之间的关系上的。

参照完整性规则:关系R的外来码取值必须是关系S中某个元组的主码值,或者可以是一个“空值”。

定义外键时定义参照完整性、约束参照表A和被参照表B。对于违反参照完整性的操作有时候并不是简单拒绝执行,而是接受该操作,同时执行必要的附加操作。DBMS提供机制来定义是否必须制定外键的具体值而非空值。主键列和外键列可以有不同的名字,空值的要求也可以不一致,默认值也可以不同,但数据类型必须相同。

2)SL Server中完整性的体现

在SQL Server中参照完整性作用表现在如下几个方面:

·禁止在从表中插入包括主要中不存在的外关键字的数据行。

·禁止会导致从表中的相应值孤立的主表中的外关键字值改变。

·禁止删除在从表中的有对应记录的主表记录。

3)SQL语句中删除和插入基本关系元组

(1)在被参照关系中删除元组的三种控制方式:

·级联删除(CASCADES):将参照关系中与被参照关系中要删除的元组主键值相同的元组一起删除。

·受限删除(RESTRICTED):只有参照关系中没有元组与被参照关系中要删除的元组主键值相同时才执行删除操作,否则拒绝。

·置空值删除(SET NULL):删除被参照关系中的元组,同时将参照关系中相应元组的外键值置空。

(2)在参照关系中插入元组。

·受限插入:只是被参照关系中有元组与参照关系中要插入元组外键值相同时,才执行插入操作,否则拒绝。

·递归插入:插入元组外键值在被参照关系中没有相同元组,则首先向被参照关系插入元组,其主键值等于参照关系插入元组的外键值,然后再向参照关系插入元组。

4)DBMS对参照完整性进行检查的四种情况

(1)在四种情况下DBMS要进行检查,分别是对参照表进行插入和修改以及对被参照表进行删除和修改。

5)参照完整性的特殊问题

(1)表的自参考问题。

问题1:无法定义。

处理方法:先用create table创建主键约束,再用alter table创建外键约束。

问题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表的外键属性,使其变为On delete No action,演示事务中通过删除students表中的一条记录,多重级联删除失败,整个事务回滚到事务的初始状态。

(10)演示互参照问题以及其解决方法。要建立教师授课和课程指定教师停课关系的两张表,规定一个教师可以授多门课,但是每个课程只能指定一个教师去听课,所以要为两张表建立相互之间的参照关系。

实验步骤:

代码实现参见数据库实验习题2.2.sql文档

心得体会:

1、学习了参照完整性的相关内容,加深了对于这部分知识点的认识;

(习题:

(1)用alter table语句将SC表中的on delete cascade 改为on delete restrict。重新插入SC 的数据。重复本实验的实验步骤中(4)(5),观察结果,分析原因。

(2)用alter table语句将SC表中的on delete cascade 改为on delete set NULL。重新插入SC 的数据。重复本实验的实验步骤中(4)(5),观察结果,分析原因。

解答:SQL不提供on delete restrict/on delete set NULL,用on delete no action;结果:数据库不允许删除STU_UNION表以及NEW_COUSE表中对应的元组;原因:(1)由于on delete restrict的约束,数据库不允许任何引用关系存在对应元组的删除操作(2)约束on delete set NULL是将要删除的对应元组的外键置空值,如果sno和cno不是SC表的主键,删除操作是可以完成的,但是由于主键不可以取空值,所以删除操作不能进行。

实验2.3用户自定义完整性

实验目的:

学习用户自定义约束,并实践用户自定义完整性,利用SQL查询分析器用短语NOT NULL、UNIQUE、CHECK保证用户定义完整性。

实验原理:

1)用户自定义完整性(User-defined Integrity)

不同的关系数据库系统根据其应用环境的不同,往往需要一些特殊的约束条件。用户自定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。它主要包括:

(1)域完整性(Domain Integrity)

[1] 域完整性是指数据库中的列必须满足某种特定的数据类型或约束。域约束是最常见的用户自定义完整性约束,当有新数据插入到数据库中,系统可以按照定义进行关系属性取值是否正确的检测。其中,约束又包括取值范围精度等规定。表中的CHECK FOREIGN KEY约束和DEFAULT NOT NULL定义都属于域完整性的范畴。

[2] 现在的RDBMS中,一般都有域完整性检查功能。SQL Server提供了定义和检验这类完整性的机制,以便用统一的系统方法来处理它们。而不是用应用程序来承担这一功能。其他的完整性类型都支持用户定义的完整性。

[3] 一个属性能否取空值一般由语义决定,也是域约束的内容之一。

(2)其他用户自定义完整性

不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。其他类型的用户自定义的完整性即是针对某个特定关系数据库的约束条件,它反映某个具体应

用所涉及的数据必须满足的语义要求。

2)SQL中的约束机制

约束主要包括如下两种。

(1)静态约束:对静态对象的约束是反映数据库状态合理性的约束,如实体完整性。(2)动态约束:对动态对象的约束是反映数据库状态变迁的约束,如触发器。

SQL中用于属性约束方面的有NOT NULL、CHECK等子句;而用于全局约束方面的有CREATE ASSERTION、CREATE RULE等语句。

3)一般的规则组成

规则一般是由规则标识(可默认)以及规则语句组成。规则语句由约束作用的数据对象、约束定义(如断言Assertion)、触发条件以及违反规则时的响应动作购成。

5)自定义数据类型和规则

(1)如果多个列使用同一类型的约束,或在一些特殊的情况下,通过自定义的数据类型和规则就为数据库设计提供了更高层次的抽象,如工资数据类型肯定比smallmoney能建立更多的特征及更容易被理解。

(2)规则的创建(当约束条件要为多列使用时)。

步骤一:

CREATE RULE rule AS condition_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触发器。触发器仅在实施数据完整性和处理业务规则时使用。

每个触发器有两个特殊的表,即插入表(INSERT TABLE)和删除表(DELETE TABLE)。这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中。因此不允许用户直接对其修改,并且这两个表的结构总是与被该触发器作用的表有相同的表结构。

3、三种触发器的工作原理

(1)INSERT 触发器:先向INSERTED表中插入一个新行的副本,然后检查INSERTED表的新行是否有效,确定是否要阻止该插入操作。如果所插入的行中的值是有效的,则将该行插入触发器表。

(2)UPDATE 触发器:先将原始数据行移到DELETED表中,然后将一个新行插入INSERTED表中,最后计算DELETED表和INSERTED表中的值以确定是否进行干预。(3)DELETE触发器:将原始数据行移到DELETE表中,计算DELETED表中的值决定是否进行干预,如果不进行,那么把数据行删除。

4、SQL中创建触发器的语法

创建触发器的语法为:

CREATE TRIGGER<触发器>ON<表名>

[WITH ENCRYPTION]

FOR {[DELETE][,][INSERT][,][UPDATE]}

[WITH APPEND]

[NOT FOR REPLICATION]

AS

5、触发器和存储过程的区别

(1)是否附属于唯一的表。

触发器附属于唯一的表,而存储过程不附属任何的表。

(2)是否事件驱动。

触发器由事件驱动,而存储过程由显式的指令调用。

(3)是否有数量的限制。

一般不允许在表级建立太多的触发器,对触发器的数目有要求,而存储过程没有这方面的要求。

实验内容:

(1)为WORKER表建立触发器T1,当插入或是更新表中数据时,保证所操作的记录的sage值大于0。

(2)为WORKER表建立触发器T2,禁止删除编号为00001的CEO。

(3)WORKER表中的人员的编号是唯一且不可改变的,创建触发器T3实现更新中编号的不可改变性。

(4)演示违反T1触发器的约束的插入操作。

(5)演示违反T1触发器的约束的更新操作。

(6)演示违反T2触发器的约束的插入操作。

(7)演示违反T2触发器的约束的插入操作。

实验步骤:

代码实现参见数据库实验习题2.4.sql文档

心得体会:

1、学习了实体完整性的相关内容,加深了对于这部分知识点的认识;

2、实验中,触发器的代码相对于课本作业来说,友好许多,简化许多;

3、通过实验习题2,了解到并证实了在SQL Server 2000中,数据更新的过程,其实分解为

先删除需要更新的内容,然后插入更新的内容。

数据库完整性

第五章数据库完整性 一、选择题 1.有一个关系:学生(学号,姓名,系别),规定学号的值域是8个数字组成的字符串,这一规则属于__________。 A 实体完整性约束 B 参照完整性约束 C 用户自定义完整性约束 D 关键字完整性约束 【解答】C 2.完整性约束有两大类型,其中一种是静态约束,下面( c )不属于静态约束。 A.固有约束B.隐含约束C.语义约束D.显示约束 【解答】C 3.数据库的破坏一般来自四个方面,其中__________是属于完整性约束问题。 A.系统故障B.并发所引起的数据不一致C.人为的破坏 D.输入或更新数据库的数据有误,更新事务未遵守保持数据库一致性的原则 【解答】D 4. ________子句能够实现关系参照性规则。 A. PRIMARY KEY B. NOT NULL C. FOREIGN KEY D. FOREIGN KEY...REFERENCES... 【解答】D 二、填空题 1. 数据库的是指数据的正确性和相容性 【解答】完整性 2.完整性约束是指和。 【解答】实体完整性,参照完整性 3.实体完整性是指在基本表中,。 【解答】主属性不能取空值 4.参照完整性是指在基本表中,。 【解答】外码可以是空值或者另一个关系主码的有效值 5.SQL标准使用了一系列概念来描述完整性,包括关系模型的________ 、________和 ________完整性。 【解答】实体完整性参照完整性用户定义 6.数据库完整性的定义一般由SQL的________ 语句来实现。它们作为数据库模式的一部 分存入________中。

【解答】DDL 数据字典 7.关系模型的实体完整性在________ 中用________定义。 【解答】CREATE TABLE 、PRIMARY KEY 二、问答题 1.什么是数据库的完整性? DBMS的完整性子系统的功能是什么? 【解答】数据库完整性是指数据库中数据的正确性、有效性和相容性。DBMS 的完整性控制机制至少包括完整性约束的定义机制和完整性约束的检查机制。 DBMS完整性子系统的功能是: (1)监督事务的执行,并测试是否违反完整性规则; (2)如有违反,则采取恰当的操作,如拒绝、报告违反情况,改正错误等方法进行处理。2.完整性规则由哪几个部分组成?关系数据库的完整性规则有哪几类? 【解答】完整性规则由三部分组成: 触发条件:即什么时候使用规则进行检查; 约束条件:即要检查什么样的错误; ELSE子句:即查出错误后该如何处理。 完整性规则有以下三类: 域完整性规则,用于定义属性的取值范围; 域联系的规则,定义一个或多个关系中,属性值间的联系、影响和约束。 关系完整性规则,定义更新操作对数据库中值的影响和限制。 3.试详述SQL中的完整性约束机制? 【解答】SQL中的完整性约束规则有主键约束、外键约束、属性值约束和全局约束等多种形式。 △主键约束。它是数据中最重要的一种约束。在关系中主键值不允许空,也不允许出现重复,体现了关系要满足实体完整性规则。主键可用主键子句或主键短语进行定义。 △外键约束。根据参照完整性规则,依赖关系中外键或者为空值,或者是基本关系(参照关系)中的该键的某个值。外键用外键关系子句定义,并考虑删除基本关系元组或修改基本关系的主键值的影响,依赖关系可按需要采用RESTRICT、SET NULL、CASCADE方式。△属性值约束。当要求某个属性的值不允许空值时,那么可以在属性定义后加上关键字:NOT NULL ,这是非空值约束。还可以用CHECK子句对一个属性值加以限制以及使用域约束子句CREAT DOMAIN 定义新域并加以属性值检查。 △全局约束。在关系定义时,可以说明一些比较复杂的完整性约束,这些约束涉及到多个属性间的联系或不同关系间的联系,称为全局约束。主要有基于元组的检查子句和断言。前者是对单个关系的元组值加以约束,后者则可对多个关系或聚合操作有关的完整性约束进行定义。 4. DBMS的完整性控制机制应具有哪些功能?

8实验八 数据库的完整性

实验八实现数据完整性一、实验目的 (1)实现数据完整性的概念及实施数据完整性的重要性。 (2)掌握数据完整性的分类。 (3)掌握完整性约束的添加、删除方法。 (4)掌握通用默认值的创建、实施与删除方法。 (5)掌握规则的创建、实施与删除方法。 (6)掌握级联删除、级联修改方法。 二、实验内容 1、完整性约束的添加、删除 (1)通过SQL Server Management Studio实施约束 a.为表Student的Birth字段创建检查约束,使输入的生日日期小于系统日期。 ①、选择Student表,右击→设计,打开Student表 ②、选择Birth一行,右击→CHECK约束,打开界面如下图所示 ③、单击“添加” ④、在表达式中写入:Entrance_date

b.为表Student的Sdept字段,设置默认值约束,默认值取’计算机系’。选择Sdept一行,在其列属性中修改其默认值 c.为Student表的Sname字段添加唯一性约束。 选择Sname一行,右击→索引/键 出现如下界面:

单击“添加”,在类型中选择“唯一键”,在列中选择“Sname”,名称自定义 最后单击“关闭”退出

d.将SC表的Sno,cno字段设置外键约束,约束名自已取,并允许级联删除与级联更新。(此要求在SQL Server2008R2中无法做出)若已存在外键约束,请先删除。 ①、选中Sno,右击→单击“关系”,出现如下信息,可见已存在外键约束 选中键,点击删除,完成约束删除 ②、添加约束: 选中Sno,右击,选择“关系”,出现如下信息,

数据库概论试题-数据库完整性

第10章数据库完整性 1.数据库的完整性是指数据的__正确性、相容性__。 2.什么是数据库的完整性? 答:数据库的完整性是指数据的正确性和相容性。 3.SQL标准使用了一系列概念来描述完整性,包括关系模型的____实体完整性、参照完整性、用户定义___完整性。 4.数据库的完整性概念与数据库的安全性概念有什么区别和联系? 答:数据的完整性和安全性是两个不同的概念,但是有一定的联系。 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(GarbageInGarbageOut)所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。 5.数据库完整性的定义一般由SQL的__DDL数据字典__语句来实现。它们作为数据库模式的一部分存入中。 6.什么是数据库的完整性约束条件?可分为哪几类? 7.关系模型的实体完整性在__CREATETABLE__中用__PRIMARYKEY___定义。 8.DBMS的完整性控制机制应具有哪些功能? 答:DBMS的完整性控制机制应具有三个方面的功能: 1.定义功能,即提供定义完整性约束条件的机制。 2.检查功能,即检查用户发出的操作请求是否违背了完整性约束条件。 3.违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。 9.为了避免对基本表进行全表扫描,RDBMS核心一般都对__主码__自动建立一个__索引__。 10.RDBMS在实现参照完整性时需要考虑哪些方面? 11.关系模型的参照完整性在__CREATETABLE__中用___FOREIGNKEY__短语定义哪些列为外码列,用__REFERENCES__短语指明这些外码参照哪些表的主码。 12.假设有下面两个关系模式:职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;部门(部门号,名称,经理名,电话),其中部门号为主码;用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:定义每个模式的主码;定义参照完整性;定义职工年龄不得超过60岁。 CREATETABLEDEPT(DeptnoNUMBER(2),DeptnameV ARCHAR(10),ManagerV ARCHAR(10), PhoneNumberChar(12)CONSTRAINTPK_SCPRIMARYKEY(Deptno));CREATETABLEEMP(E mpnoNUMBER(4),EnameV ARCHAR(10),AgeNUMBER(2),CONSTRAINTC1CHECK(Aage<= 60),JobV ARCHAR(9),SalNUMBER(7,2),DeptnoNUMBER(2),CONSTRAINTFK_DEPTNOFOR EIGNKEY(Deptno)REFERENCESDEPT(Deptno)); 13.关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的? 答:对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。具体的处理可以参见上面第5题或《概论》10.2中相应部分。

数据库完整性

大连海事大学 数据库原理课程实验大纲 实验名称:实验七完整性实验学时: 2 适用专业: 实验环境: 执笔者:编写日期: 1实验目的 (1)掌握实体完整性、参照完整性和用户自定义完整性约束的创建方法。 (2)掌握完整性约束的运行检查机制。 (3)掌握参照完整性的级联删除和修改方法。 (4)掌握正确设计关系模式完整性约束的方法。 2实验内容 2.1掌握实体完整性约束的创建和使用方法 (1)创建表时定义由一个属性组成的主键(给约束命名)。 (2)创建表时定义由两个或两个以上属性组成的主键(给约束命名)。 (3)删除以上两个主键约束。 (4)利用ALTER TABLE语句定义上述两个主键。 2.2掌握参照完整性约束的创建和使用方法 (5)创建表时定义一个列级参照完整性约束(给约束命名)。 (6)创建表时定义一个表级的由两个属性组成的参照完整性约束(给约束命名)。(7)设计数据更新语句检查参照完整性约束是否起作用。

(8)删除上述完整性约束。 (9)利用ALTER TABLE 建立上述参照完整性约束,并且规定UPDATE/DELETE时的动作。 (10)设计数据更新语句检查参照完整性约束及其相应的动作是否起作用。 2.3掌握用户自定完整性约束的创建和使用方法 (11)定义一个检查约束,检查其值在某个取值范围内,并设计相应的更新语句检查该约束是否起作用 (12)定义一个检查其值符合某个匹配模式的检查约束(使用LIKE),并设计相应的更新语句检查该约束是否起作用 (13)定义一个检查其值符合某个正则表达式的检查约束(使用SIMILAR TO),并设计相应的更新语句检查该约束是否起作用 (14)定义一个UNIQUE约束,并设计相应的更新语句检查该约束是否起作用 (15)定义一个DEFAULT约束,设计一个INSERT语句检查该约束是否起作用。 3实验要求 (1)深入复习教材第五章数据库完整性约束内容。 (2)根据书上的例子,针对TPCH数据库模式设计各种完整性约束,每种类型完整性约束至少要设计一个,描述清楚完整性约束要求,设计和运行触发完整性约束检查的数据更新语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。也可以按照附1所列示例做实验。(3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。 (4)思考题:完整性约束的违约处理有哪几种方式 4实验步骤 4.1掌握实体完整性约束的创建和使用方法 (1)创建表时定义由一个属性组成的主键(给约束命名)。

实验一创建数据库及关系表数据完整性约束

实验一创建数据库及关系表、数据完整性约束 一、实验目的 1.???掌握SQL Server数据库管理系统的使用,能够在该环境中进行日常数据库操作; 2.???掌握在SQL Server中使用图形化工具创建数据库的方法; 3.掌握建立关系表的语句,掌握定义主码约束及外码约束的语句; 4.掌握修改表结构的语句。 5.掌握数据完整性约束的功能。 二、实验内容和步骤 1.创建符合如下条件的数据库: 数据库的名字为:Students 数据文件的逻辑文件名为:Students_dat,存放在用户盘某目录下; 文件的初始大小为:5MB;增长方式为自动增长,每次增加1MB。 实验结果: 2.在已建立的Students数据库中,确定出各表中的数据类型,写出创建满足下述条件的四张表的SQL语句,并查看执行结果。 实验结果: 3.写出实现如下操作的SQL语句,并查看执行结果: (1)在选课表中添加一个新的修课类别列:列名为:选课类别,类型为char(4)。(2)将课程表中的学分列的类型改为:tinyint(微整型,取值范围在0~255)。(3)删除学生表的专业列。 (4)为教师表添加主码约束,其主码列为:教师号。

4.在Students数据库中,编写建立满足完整性要求的定义表的SQL语句,执行并观察执行结果。 (1)图书表,结构如下: 书号:统一字符编码定长类型,长度为6,主码, 书名:统一字符编码可变长类型,长度为30,非空, 第一作者:普通编码定长字符类型,长度为10,非空, 出版日期:小日期时间型,小于等于当前系统日期,(用getdate()实现)印刷数量:小整型,取值范围:1000~5000,默认为4000, 价格:定点小数,小数部分一位,整数部分3位。 实验结果: (2)书店表,结构如下: 书店编号:统一字符编码定长类型,长度为6,主码, 店名:统一字符编码可变长类型,长度为30,非空, 电话:普通编码定长字符类型,12位长,取值形式:010-8位数字 地址:普通编码可变长字符类型,40位长。前两个字符必须是:北京。 实验结果: (3)图书销售表,结构如下: 书号:统一字符编码定长类型,长度为6,非空, 书店编号:统一字符编码定长类型,长度为6,非空, 销售日期:小日期时间型,非空,默认值为系统当前日期, 销售数量:微整型,取值大于0,主码(书号,书店编号,销售日期); 书号为引用“图书表”的外码;书店编号为引用“书店表”的外码。

数据库的完整性

实验七数据库的完整性 一、实验目的 1.理解关系数据库中关于数据库完整性的概念 2.掌握实体完整性的定义方法 3.掌握参照完整性的定义方法 4.掌握用户自定义完整性的方法 二、实验环境(实验的软件、硬件环境) 硬件:PC机软件:SQL2000 三、实验说明 请复习数据库完整性的相关知识点,完成如下实验内容。 四、实验内容 (1)重建orderDB数据库中的表,分别为每张表建立主键,外键。 (2)各表的用户定义的完整性如下: 员工表:员工姓名,电话属性为not null;员工编号构成:年流水号,共8位,第一位为E,如E2008001,年份取雇佣日期的年份;性别:f表示 女,m表示男。 商品表:商品编号、商品名称、商品类别、建立日期设为not null;商品编号构成:年流水号,共9位,第一位为P,如P2*******,年份取建 立日期的年份 客户表:员工编号、姓名、性别、所属部门、职称、薪水设为not null; 客户号构成:年流水号,共9位,第一位为C,如C20080001,年份取 建立日期的年份 订单主表:订单编号的构成:年月日流水号,共12位,如200708090001; 订单编号、客户编号、员工编号、发票号码设为not null;业务员必须是 员工;订货日期和出货日期的默认值设为系统当前日期;订单金额默认 值为0;发票号码建立unique约束。

订单明细表:订单编号、商品编号、数量、单价设为not null。 五、实验步骤 请完成实验内容,并写出具体的实验步骤 六、思考题: 1.什么是数据库的完整性? 2.SQLServer数据完整性的实现方式有(1)声明数据完整性,(2)过程数据完整性,请区别他们的异同和使用情况? 七、总结(实验过程的体会、心得和实验教与学之间还需改进的内容)

数据库的完整性和安全性实验报告

信息工程学院实验报告 课程名称:《数据库原理》 实验项目名称:数据库的完整性和安全性 一、实 验 目 的: (1)掌握数据库约束的概念; (2)熟悉SQL SERVER 的完整性约束技术。 (3)了解SQL SERVER 的违反完整性处理措施。 (4)了解登录账户的管理理念与具体方法。 (5)了解数据库用户的管理的要则。 (6)了解用户权限管理的内涵与方法。 二、实 验 设 备 与 器 件 Win7 +Sql server 2008 三、实 验 内 容 与 步 骤 (一)测试完整性 运行附录中的SQL 语句,理解SQL 语句中包含的完整性定义。然后执行下面的SQL 语句,看是否能正常运行,若无法执行,请说明原因。 1.对dept 表进行数据增删改,并检查完整性规则 Dept 已存在的完整性规则如下: dno CHAR(2) PRIMARY KEY dname VARCHAR(20) NOT NULL,UNIQUE (1)增加数据 INSERT INTO dept VALUES('D1','计科系');----正常插入 INSERT INTO dept VALUES('D2','电信系');----正常插入 INSERT INTO dept VALUES(NULL,'机械系'); ----违反dno 主键(NOT NULL )规则 INSERT INTO dept VALUES('D2','机械系'); ----违反dno 主键(UNIQUE ) INSERT INTO dept VALUES('D3',NULL); ----违反dname 的NOT NULL 规则

数据库完整性-习题解答

第十章数据库完整性 习题解答和解析 1.什么是数据库的完整性 答:数据库的完整性是指数据的正确性和相容性。 2.数据库的完整性概念与数据库的安全性概念有什么区别和联系 答:数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garbage In Garbage Out)所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。 3.什么是数据库的完整性约束条件可分为哪几类 答:完整性约束条件是指数据库中的数据应该满足的语义约束条件。一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。 静态列级约束是对一个列的取值域的说明,包括以下几个方面: (1)对数据类型的约束,包括数据的类型、长度、单位可精度等; (2)对数据格式的约束; (3)对取值范围或取值集合的约束; (4)对空值的约束; (5)其他约束。 静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。 静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有: (1)实体完整性约束; (2)参照完整性约束; (3)函数依赖约束。 动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:(1)修改列定义时的约束; (2)修改列值时的约束。 动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。

数据库系统2-3:参照完整性约束

数据库系统2-3:参照完整性约束 在关系模型中,实体与实体之间的关联同样采用关系模式来描述。通过引用对应实体的关系模式的主码来表示对应实体之间的关联。 定义:设F是基本关系R的一个或一组属性,但不是R的主码,若F与基本关系S的主码K相对应,则称F是基本关系R的外码。 其中R为参照关系,S为被参照关系(也称目标关系),而且F和K必须定义在同一个域上。 例如,关系模式:部门(部门编码,部门名称,电话,办公地址) 职工(职工编码,姓名,性别,年龄,籍贯,所属部门编码) 其中职工关系模式中的“所属部门编码”与部门关系模式中的主码“部门编码”相对应,所以“所属部门编码”是职工关系模式中的外码。职工关系模式通过外码来描述与部门关系模式的关联。职工关系中的每个元组(每个元组描述一个职工实体)通过外码表示该职工所属的部门。当然,被参照关系的主码和参照关系的外码可以同名,也可以不同名。被参照关系与参照关系可以是不同关系,也可以是同一关系。 例如,职工(职工编码,姓名,性别,年龄,籍贯,所属部门编码,班组长编码) 其中“班组长编码”与本身的主码“职工编码”相对应,属性“班组长编码”是外码,职工关系模式既是参照关系也是被参照关系。 参照完整性规则:若属性F是基本关系R的外码,且F与基本关系S的主码K相对应,则对于R中每个元组在F上的值必须为: (1)或者取空值 (2)或者等于S中某个元组的主码值。 在职工关系中,某一个职工“所属部门编码”要么取空值,表示该职工未被分配到指定部门。要么等于部门关系中某个元组的“部门编码”,表示该职工隶属于指定部门。若既不为空值,又不等于被参照关系——部门中某个元组的“部门编码”分量,表示该职工被分配到一个不存在的部门,则违背参照完整性规则。所以,参照完整性规则就是定义外码与主码之间的引用规则,也是关系模式之间关联的规则。 【

第五章_数据库完整性(习题)

一、选择题 1.完整性检查和控制的防范对象是(),防止它们进入数据库。安全性控制的防范对象是(),防止他们 对数据库数据的存取。 A.不合语义的数据 B.非法用户 C.不正确的数据 D.非法操作 2.找出下面SQL命令中的数据控制命令()。 A.GRANT https://www.doczj.com/doc/f46408833.html,MIT C.UPDA TE D.SELECT 3.下述SQL命令中,允许用户定义新关系时,引用其他关系的主码作为外码的是()。 A.INSERT B.DELETE C.REFERENCES D. SELECT 4.下述SQL命令的短语中,不用于定义属性上约束条件的是()。 A.NOT NULL短语 B.UNIQUE短语 C.CHECK短语 D.HA VING短语 二、填空题 1.数据库的完整性是指数据的正确性和相容性。 2.关系模型的实体完整性在CREATE TABLE中用primary key 关键字来实现。 3.检查主码值出现不唯一和有一个为空违约情况时,则DBMS拒绝插入或修改。 4.关系模型的参照完整性在CREATE TABLE中用foreign key关键字来实现。 5.当参照完整性检查出现违约情况时,则DBMS可以采用拒绝、级联和设置为空策略处理。 6.参照完整性的级连操作的关键字是cascade 。 7.在CREA TE TABLE中定义属性上的约束条件,包括not null 、unique 和check。 8.在CREA TE TABLE中定义属性上的约束条件,检查列值唯一用unique 关键字。 9.关系模型的元组上的约束条件的定义,在CREATE TABLE中用check关键字来实现。 10.在Sno(学号)列上创建约束,要求Sno的值在18至22岁之间,约束名Sno_CK。请写出对应的完整性 命名子句constraint Sno_CK primary key check(sno between 18 and 22)。 1.A C ;BD 2. A 3. C 4. D 三、综合题 1.假设有下面两个关系模式:职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码; 部门(部门号,名称,经理名,电话),其中部门号为主码。用SQL 语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:定义每个模式的主码;定义参照完整性;定义职工年龄不

数据库5关系数据库完整性实验

数据库系统原理 实验报告 实验名称:关系数据库完整性实验任课教师:霍纬刚 学号:100341324 姓名:汪何媛 完成日期:2012.11.28

一、实验目的 通过ORACLE的完整性,理解关系数据库的完整性 二、实验内容与步骤 ORACLE环境中通过触发器可以定义为更复杂的完整性约束 例1:通过触发器产生主键值 create sequence ql minvalue 010341416; create table student(sno number(9) primary key ,sname varchar2(20)); create or replace trigger add_student before insert on student for each row begin select ql.nextval into :new.sno from dual; end; 验证触发器: SQL>insert into student (sname)values(‘刘辉’); SQL>insert into student (sname)values(‘刘俊波’); 例2:创建一个行级触发器,记录下给个用户对数据库的表进行数据操纵的次数 create or replace trigger audit_student after delete or insert or update on student for each row begin if deleting then update audit_student set del =del+1 where user_name=user and table_name='student'; end if; if inserting then update audit_student set ins=ins+1 where user_name=user and table_name='student'; end if; if updating then update audit_student set upd=upd+1; where user_name =user and table_name='student'; end if ; end; 要求:1)定义基本表: Audit_student(user_name,table_name,del,ins,upt) 2)输入元组,例“SCOTT”,“student”,0,0,0 3)以SCOTT身份登录,对student表进行增加删除和修改操作,之后查看 audit_student表的内容变化。 例3、为教师表Teacher定义完整性规则:“职称(pos)为教授时其工资(sal)不得低于1000元,如果低于1000元,自动改为1000元”。 create or replace trigger update_sal

数据库原理 数据的完整性 实验报告

***大学计算机科学与信息学院软件工程系上机实验报告

Sname char(20) constraint STU_U1 NOT NULL, Ssex char(2) constraint STU_C1 CHECK(Ssex in('男','女')), Sage int constraint STU_C2 check(Sage between 18 and 30), Sdept char(10) constraint STU_PK PRIMARY KEY(Sno)); create table course1( Cno char(10), Cname char(20) constraint COU_C1 UNIQUE,

Ccredit int constraint COU_PK PRIMARY KEY(Cno)); create table SC1( Sno char(10), Cno char(10), Grade CHAR(2), constraint SC_PK PRIMARY KEY(Sno,Cno), constraint SC_FK1FOREIGN KEY(Sno)REFERENCES student1(Sno), constraint SC_FK2FOREIGN KEY(Cno)REFERENCES course1(Cno), );

(2)插入如下数据,什么原因导致某些数据不能正确插入? Sno Sname Ssex Sage Sdept 95001 黎小明男16 CS 95002 小华男45 CS 95003 王小菲女26 MA 95004 王小凌女20 IS 95004 小烨男27 IS insert into student1(Sno,Sname,Ssex,Sage,Sdept) VALUES('95001','黎小明','男',16,'CS'); insert into student1(Sno,Sname,Ssex,Sage,Sdept) VALUES('95002','小华','男',45,'CS'); insert into student1(Sno,Sname,Ssex,Sage,Sdept) VALUES('95003','王小菲','女',26,'MA'); insert into student1(Sno,Sname,Ssex,Sage,Sdept) VALUES('95003','王小凌','女',20,'IS');

SQL 实验六数据完整性

实验6 数据完整性 一、实验目的 1.掌握Transact-SQL语句(CREATE RULE、DROP RULE)创建和删除规则的方法。 2.掌握系统存储过程sp_bindrule、sp_unbindrule绑定和解除绑定规则的操作方法,以及sp_help、sp_helptext查询规则信息、sp_rename更名规则的方法。 3.掌握Transact-SQL语句(CREATE DEFAULT、DROPDEFAULT)创建和删除默认对象的方法。 4.掌握系统存储过程sp_bindefault、sp_unbindefault绑定和解除绑定默认对象的操作方法,以及sp_helptext查询规则信息。 5.掌握SQL Server管理平台和Transact-SQL语句(CREATE TABLE、ALTER TABLE)定义和删除约束的方法,并了解约束的类型。 二、实验内容和步骤 1.为studentsdb数据库创建一个规则,限制所输入的数据为7位0~9的数字。 (1)复制学生表命名为stu_phone,在stu_phone表中插入一列,列名为“电话号码”。完成以下代码实现该操作。 SELECT * INTO stu_phone FROM 学生表 ALTER TABLE stu_phone ADD CHAR(7)NULL stu_phone表结构如图1-10所示。 图1-10 stu_phone表结构 (2)创建一个规则phone_rule,限制所输入的数据为7位0~9的数字。

(3)使用系统存储过程sp_hndrule将phone_rule规则绑定到stu_phone表的 “电话号码”列上。 (4)插入操作输入以下数据: 学号姓名电话号码 0009 王国强 1234yyy

第八章数据库完整性概念

第八章数据库完整性概念 1、什么是数据库的完整性? 答: 数据库的完整性是指数据的正确性和相容性。 2、数据库的完整性概念与数据库的安全性概念有什么区别和联系? 答: 数据的完整性和安全性是两个不同的概念,但是有一定的联系。 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。 3、什么是数据库的完整性约束条件? 答: 完整性约束条件是指数据库中的数据应该满足的语义约束条件。一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。 4、RDBMS的完整性控制机制应具有哪些功能? 答: DBMS的完整性控制机制应具有三个方面的功能: (1)定义功能,即提供定义完整性约束条件的机制; (2)检查功能,及检查用户发出的操作请求是否违背了完整性约束条件; (3)违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。 5、RDBMS在实现参照完整性时需要考虑哪些方面? 答: RDBMS在实现参照完整性时需要考虑以下几个方面: (1)外码是否可以接受空值。 (2)删除被参照关系的元组时的考虑,这时系统可能采取的做法有三种:级联删除、受限删除、置空值删除。 (3)在参照关系中插入元组时的问题,这时系统可能采取的作法有:受限插入、递归插入。 (4)修改关系中得主码的问题。一般是不能用UPDATE语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关 系中。如果允许修改主码,首先要保证主码的唯一性和非空,否则拒绝修改。 然后要区分是参照关系还是被参照关系。 7、在关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的? 答: 对于违反实体完整性和用户定义完整性的操作一般采用拒绝执行的方式进行处理。而对

如何实现数据库完整性

如何实现数据库完整性 SQL 中的完整性约束 SQL把各种完整性约束作为数据库模式定义的一部分。既有效防止了对数据库的意外破坏,提高了完整性检测的效率,又可以减轻编程人员的负担。 SQL对三种不同完整性约束的设置及检测,采取了不同的方式加以实现。下面分别介绍。 1.实体完整性和主码 实体完整性规定,主码的任何属性都不能为空,因为,概念模型中实体和联系都是可区分的,而且它们以码为唯一性标识。如果,主码的属性值可以为空,则意味着在概念模型中存在着不以码为唯一性标识的实体。这显然是前后矛盾的。 那么怎样保证实体完整性呢?SQL中实体完整性是通过主码来实现的。一旦某个属性或属性组被定义为主码,该主码的每个属性就不能为空值,并且在关系中不能出现主码值完全相同的两个元组。 主码的定义是在Create Table 语句中使用 Primary Key关键字来实现的。方法有两种: a) 在属性定义后加上关键字 Primary Key; b) 在属性表定义后加上额外的定义主码的子句:Primary Key(<主码属性名表>) 说明: 2如果主码仅由一个属性组成,上述两种方法都可定义,若由两个或以上的属性组成,则只能用上述第二种方法定义了。 2对于候选码的说明方法,可以用Unique说明该属性的值不能重复出现。Unique的使用与Primary Key相似。 2一个表中只能有一个主码定义,但可以有多个Unique说明。 2 SQL中,并没有强制为每个关系指定主码,但为每个关系指定主码通常会更好一些。(因为主码的指定可以确保关系的实体完整性) 2.参照完整性约束与外部码 参照完整性是对关系间引用数据的一种限制。即:若属性组A是基本关系R1的外码,它与基本关系R2的主码K相对应,则R1中每个元组在A上的值必须:要么取空值,要么等于

数据库应用-数据完整性实验答案

实验5 数据完整性 1.实验目的 (1)掌握Transact-SQL语句(CREATE RULE、DROP RULE)创建和删除规则的方法。 (2)掌握系统存储过程sp_bindrule、sp_unbindrule绑定和解除绑定规则的操作方法,以及sp_helptext查询规则信息、sp_rename更名规则的方法。 (3)掌握Transact-SQL语句(CREATE DEFAULT、DROP DEFAULT)创建和删除默认对象的方法。 (4)掌握系统存储过程sp_bindefault、sp_unbindefault绑定和解除绑定默认对象的操作方法,以及sp_helptext查询默认对象信息。 (5)掌握SQL Server管理平台和Transact-SQL语句(CREATE TABLE、ALTER TABLE)定义和删除约束的方法,并了解约束的类型。 2.实验内容及步骤 请先附加studentsdb数据库,然后完成以下实验。 (1)主要讲解规则 为studentsdb数据库创建一个规则,限制所输入的数据为7位0~9的数字。 ①.复制student_info表命名为stu_phone,在stu_phone表中插入一列,列名为'电话号码' CHAR(7)。完成以下代码实现该操作。 stu_phone表结构如图1-10所示。 答:SELECT*INTO stu_phone FROM student_info ALTERTABLE stu_phone ADD电话号码CHAR(7)NULL 创建一个规则phone_rule,限制所输入的数据为7位0~9的数字。实现该规则的代码为答:createrule phone_rule as@电话号码like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' ②.使用系统存储过程sp_bindrule将phone_rule规则绑定到stu_phone表的“电话号码”列上。 实现该操作的代码为 答:sp_bindrule phone_rule,'stu_phone.电话号码' ③.输入以下代码,进行一次插入操作,要求符合规则: --select * from stu_phone --INSERT INTO stu_phone(学号,姓名,电话号码) VALUES('0009','王国强','1234yyy') 答:INSERTINTO stu_phone(学号,姓名,电话号码)VALUES('0009','王国强','1234yyy') ④.使用系统存储过程sp_unbindrule解除stu_phone表的'电话号码'列phone_rule规则绑定答:

数据库完整性

数据库完整性约束用于保证数据的正确性。系统在更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。关系模型中有四类完整性约束:实体完整性、域完整性、参照完整性和用户定义完整性,其中实体完整性和参照完整性约束条件,成为关系的两个不变性。 1.实体完整性 实体完整性指表中行的完整性。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性要求每个关系表有且仅有一个主键,每个主键值必须唯一,而且不允许为“空”或重复。 由于主键是实体数据(记录)的惟一标识,若主属性取空值,关系中就会存在不可标识(区分)的实体数据(记录),这与实体的定义矛盾,而对于非主属性可以取空值(NULL),因此,将此规则称为实体完整性规则 2.域完整性 域完整性是指数据库表中的列必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等。表中的check、foreign key约束和default、not null 定义都属于域完整性的范畴。 3.参照完整性 参照完整性属于表间规则。对于永久关系的相关表,在更新、插入或者删除记录时,如果只改其一,就会影响数据的完整性。如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入、删除表间数据的完整性,统称为参照完整性。 在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值。 4.用户定义完整性 用户定义完整性是对数据表中字段属性的约束,用户定义完整性规则也称域完整性规则。包括字段的值域、字段类型和字段的有效规则等约束,是由确定关系结构时所定义的字段属性决定的。 设计阶段 好的数据库完整设计需要在需求分析阶段确定数据库完整性约束–>概念设计阶段依据需求分析结果转换成一个独立于具体DBMS的概念模型,即实体关系图–>逻辑设计阶段就是将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化,包括对关系模型的规范化。在逻辑结构设计阶段结束时,作为数据库模式一部分的完整性设计也就基本完成了。

数据库数据库的完整性控制实验报告

实验报告 课程名称:数据库原理与应用 上机实验名称:数据库的完整性控制 专业班级:计算机科学与技术1103 指导教师:卫凡 学生姓名:贾梦洁 学期:2013-2014学年第一学期

实验报告 课程名称数据库原理与应用实验名称数据库的完整性控制 姓名贾梦洁学号 201107010330专业班级计1103 实验日期2013年12月19日成绩指导教师卫凡 一、实验目的 1. 加深对数据库完整性控制作用的认识和各种完整性约束概念的理解。 2. 熟练掌握数据库完整性约束方法。 二、实验环境 硬件环境:PC机 软件环境:操作系统为Microsoft Windows 2000或以上版本。 数据库管理系统为Microsoft SQL Server 2000标准版或企业版。 三、实验容 1. 熟悉利用企业管理器为列创建DEFAULT约束、为列创建CHECK约束、为列创建UNIQUE 约束、为列创建不允许为空约束、创建PRIMARY KEY约束、创建FOREIGN KEY约束。 2. 熟悉利用企业管理器将各种完整性约束删除。 3. 熟悉利用SQL为列创建DEFAULT约束、为列创建CHECK约束、为列创建UNIQUE约束、为列创建是否为空、创建PRIMARY KEY约束、创建FOREIGN KEY约束。 4. 熟悉利用SQL将各种完整性约束删除。 四、实验步骤 1.在实验1中已经对学生_课程数据库中建立了学生、课程和选课3个表,其表结构为:学生S(学号,,性别,年龄,所在专业名称) 课程C(课程号,课程名,任课教师名,开设的学期) 选课SC(学号,课程号,成绩) 利用企业管理器增加如下的完整性约束: (1)限定学生“性别”列的值只能是“男”或“女”的CHECK约束;

第二章数据库的完整性控制数据完整性(DataIntegrity)是指数据的精确

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

相关主题
文本预览
相关文档 最新文档