《据库完整性》PPT课件.ppt_第1页
《据库完整性》PPT课件.ppt_第2页
《据库完整性》PPT课件.ppt_第3页
《据库完整性》PPT课件.ppt_第4页
《据库完整性》PPT课件.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1,7.3 数据库完整性,第7章 数据库保护技术,2,主要内容,完整性约束条件 完整性控制 SQL Server 2005的完整性控制 SQL Server 2005的触发器,3,数据库的完整性,数据库的完整性(integrity)是指数据库的任何状态变化都能反映真实存在的客观世界的合理状态,数据库中的数据应始终保持正确的状态。,4,数据库的完整性,数据库的完整性包括数据库中数据的正确性和相容性。 正确性是指数据是有效的,有意义的,而不是荒谬的或不符合实际的。 相容性是指在多用户、多用户进程共享和共用数据库的情况下,保证对数据库中数据更新时不出现与实际不一致的情况。,5,数据库的完整性,为维护数据库的完整性,DBMS必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件。 这些加在数据库数据之上的语义约束条件称为数据库完整性约束条件,它们作为模式的一部分存入数据库中。 数据库的完整性机制就是用于防止不符合语义的错误数据的输入和输出,即所谓“垃圾进垃圾出”(garbage in garbage out)所造成的无效操作和错误结果。,6,7.3.1 完整性约束条件,完整性约束是保护数据库中数据的正确性和相容性所做的各种检查或数据应满足的约束条件。 完整性检查是围绕完整性约束条件进行的,因此完整性约束条件是完整性控制机制的核心。,7,完整性约束条件作用对象,完整性约束条件作用的对象可以是 关系 元组 列,8,完整性约束条件作用对象,完整性约束条件作用的对象可以是 关系,关系的约束是若干元组之间、关系集合上以及关系之间的联系的约束。 元组,元组的约束是元组中各个字段间的联系的约束。 列,列约束主要是列的类型、取值范围、精度、排序等的约束条件。,9,(1)静态约束,完整性约束条件涉及的这三类对象,其状态可以是静态的,也可以是动态的。 所谓静态约束是指数据库处于某一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束,这是最重要的一类完整性约束。,10,(1)静态约束列级,静态约束分为三类: 1)静态列级约束 对一个列的取值域的说明,最常用,易实现,约束内容: 数据类型,包括数据的类型、长度、单位、精度等。 数据格式; 取值范围或取值集合,也称为域完整性约束。 对空值的约束,也称为类型完整性约束。 其他约束。,每个关系的每个属性列都有一个定义域,其数据类型、取值范围、空值约束等就构成了各个属性列的静态列级约束。,11,(1)静态约束列级,例7.7:对于教学管理数据库中的教师关系模式: T(T#,TNAME,TSEX,TBIRTHIN,TITLEOF,TRSECTION,TEL) 利用SQL语句定义(创建)该关系表: CREATE TABLE T (T# CHAR(8) NOT NULL, TNAME CHAR(8) NOT NULL, TSEX CHAR(2) NOT NULL CHECK(TSEX IN (男,女), TBIRTHIN DATE NOT NULL, TITLEOF CHAR(10) NULL, TRSECTION VCHAR(16) NULL, TEL CHAR(11) NULL, PRIMARY KEY(T#));,在关系定义语句中给出了各个列的定义和列级静态约束。,12,(1)静态约束元组级,2)静态元组约束 一个元组是由若干个列值组成的,静态元组约束就是规定元组的各个列之间的约束关系。 例如,如果表中有三个列分别是:单价、数量、金额,且它们之间的关系符合金额=单价*数量时,那么当某记录的单价与数量确定后,它的金额就必须确定。,13,(1)静态约束关系级,3)静态关系约束 在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。 常见的静态关系约束有: 实体完整性约束 引用完整性约束 函数依赖约束 统计约束,14,(1)静态约束关系级,实体完整性约束,也称为关系完整性约束,用于定义表的行和列的控制规则。由于每个关系的主键值必须惟一且非空,这一非常重要的约束是由实体完整性实现的,所以实体完整性约束也称为主键完整性约束。 一般是通过创建唯一性索引来实现。 在一个关系表上建立了唯一性索引后,如果在插入或修改关系时发现有主键相同的两个记录,系统就会报错,并阻止新插入或修改的记录存入库中。,15,(1)静态约束关系级,引用完整性约束是指一个关系的外键的值必须与另一个关系的主键的值相匹配。它描述了在数据录入或修改时,被改变的关系表中各字段值的合法性、有效性和存在性. 如果没有与某外键匹配的主键,就会出现引用数据库中不存在的实体的情况,显然就违反了引用完整性。 另外,如果数据库中包含有永远都不可能访问或被引用的数据,则数据库显然不具有引用完整性,整个数据库也将变得不可信。,16,关系的两个不变性,实体完整性约束和引用完整性约束是关系模型的两个极其重要的约束,称为关系的两个不变性。 例 在某大学的学生关系数据库中,学生所属专业和院系等必须是该大学存在的合法名称名称。 在系统实现时为保障引用完整性,可以从专用菜单表中选取的方式实现,不接受用户输入;另一种方式是利用触发器实现引用完整性检查。,17,(1)静态约束关系级,函数依赖约束。大部分都在关系模式中定义。 统计约束。即字段值与关系中多个元组的统计值之间的约束关系。 例如,在一些大型系统中,为了满足多个表之间的横向和纵向统计关系,缩短系统的响应时间。关系表中除了各个元组中的数据分量关系外,还专门设一个元组存储各个元组中数据分量的汇总值。则存储数据分量的元组与存储汇总值的元组之间就存在着统计约束关系。,18,(2)动态约束,静态约束属于被动的约束机制。在查出对数据库的操作违反约束后,只能做些比较简单的动作,譬如拒绝操作。比较复杂的操作还需要由程序员去安排。 如果我们希望在某个操作后,系统能自动根据条件转去执行各种操作,甚至执行与原操作无关的操作。就可以用动态约束机制去保障数据库的完整性。,19,(2)动态约束,动态约束是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。动态约束亦称触发器约束。,20,(2)动态约束触发器,触发器(Trigger)是一个能因某一个事件触发而由系统自动执行的SQL语句或语句序列。它可以实现查询、计算、评估、交流,及完成更复杂的功能任务。,21,(2)动态约束触发器的组成,一个触发器由三部分组成: 事件。指对数据库的插入、删除或修改操作。 条件。触发器检测事件是否满足的条件。 动作。当测试条件满足时执行的对数据库的操作。 如果事件执行前/中/后满足触发器测试预定的条件,那么就由DBMS执行相应的动作。,22,(2)动态约束分类,动态约束可分为三类: 1)动态列级约束 2)动态行级约束 3)动态关系约束,23,(2)动态约束列级,1)动态列级约束 修改列定义时的约束 例如,将允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这种修改。 修改列值时的约束 修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。例如,职工工资调整不得低于其原来工资,学生年龄只能增长等等。,24,(2)动态约束行级,2)动态行级约束 动态行级约束是指修改记录的值时,记录中各个字段间需要满足某种约束条件。 例如,职工工资调整时新工资不得低于原工资+工龄*1.5。,25,(2)动态约束关系级,3)动态关系约束 动态关系约束是加在关系变化前后状态上的限制条件。 例如,事务的一致性、原子性等约束条件。,26,7.3.2 完整性控制,DBMS的完整性控制机制应具备三方面的功能: (1)定义功能,提供定义完整性约束条件的机制。 (2)检查功能,检查用户发出的操作请求是否违背了完整性约束条件。 (3)处理功能,如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。,27,7.3.2 完整性控制,完整性约束条件分成域完整性约束条件和关系完整性约束条件两大类。约束条件有的非常简单,而有的则比较复杂。 一个完善的完整性控制机制应该允许用户定义各种完整性约束条件。,28,7.3.2 完整性控制,完整性约束的检查时机通常是在一条语句执行完后立即执行,称这类约束为立即执行约束(Immediate Constraints)。 有时完整性检查需要延迟到整个事务执行结束后再进行,检查正确方可提交,称这类约束为延迟执行约束(Deferred Constraints)。,29,7.3.2 完整性控制,例 在SQL2中,提供了一种推迟一个或多个语句的完整性约束检查方法: SET CONSTRAINTS OFF (推迟约束检查) (若干个SQL语句) SET CONSTRAINS ON (立即执行约束检查),30,(1)外键能否为空,在关系系统中,除实体完整性和引用完整性以外的其他完整性约束条件可以归入用户定义的完整性。下面讨论实现引用完整性要考虑的几个问题。 (1)外键能否接受空值问题 在实现引用完整性中,利用参照约束说明的列或列组称为外键。系统的引用完整性不仅提供了外键的定义机制,还提供定义外键列是否允许空值的机制。,31,(1)外键能否为空,例7.9 对于课程关系C(C#,CNAME,CLASSH)和学习关系SC(S#,C#,GRADE)。 显然,如果没有课程,就不会有学习该课程的成绩,所以称课程关系表C和学习关系表SC之间就构成父子表关系,课程关系表C为父表,而学习关系表SC为子表。,32,(1)外键能否为空,例7.9 对于课程关系C(C#,CNAME,CLASSH)和学习关系SC(S#,C#,GRADE)。 首先要建立课程关系表C(父表),主键为C#。接着建立学习关系表SC(子表),主键由S#和C#组成,而外键为C#。 这种定义就实现了表SC对表C的引用完整性约束,即学习关系中的课程号只能是课程关系中的课程号,且学习关系中的课程号不能为空值,也即外键不能接受空值。,33,一般地,当删除被参照关系的某个元组,而参照关系存在若干元组,其外键值与被参照关系删除元组的主键值相同,这时可有三种不同的策略: 1)连带删除(On Delete Cascade) 2)受限删除(Restricted Delete) 3)置空值删除(Null Delete),(2)被参照关系中删除元组,34,1)连带删除 设有课程关系C(C#,CNAME,CLASSH)和学习关系SC(S#,C#,GRADE)。C为父表,而SC为子表。在SQL2标准中,若有SC的定义语句: CREATE TABLE SC (S# CHAR(9), C# CHAR(7) REFERENCES C(C#) ON DELETE CASCADE, GRADE INT);,(2)被参照关系中删除元组连带删除,35,1)连带删除 设有课程关系C(C#,CNAME,CLASSH)和学习关系SC(S#,C#,GRADE)。C为父表,而SC为子表。在SQL2标准中,若有SC的定义语句: CREATE TABLE SC (S# CHAR(9), C# CHAR(7) REFERENCES C(C#) ON DELETE CASCADE, GRADE INT);,(2)被参照关系中删除元组连带删除,36,2)受限删除 仅当参照关系(子表)中没有任何元组的外键值与被参照关系(父表)中要删除元组的主键值相同时,系统才执行删除操作,否则拒绝此删除操作。,(2)被参照关系中删除元组受限删除,37,3)置空值删除 删除被参照关系(父表)的元组,并将参照关系(子表)中相应元组的外键值置空值。,(2)被参照关系中删除元组置空值,38,例如,在连带删除的例子中,如果将建立学习关系表SC中的“ON DELETE CASCADE”约束换成“ON DELETE SET NULL” ,定义如下: CREATE TABLE SC (S# CHAR(9), C# CHAR(7) REFERENCES C(C#) ON DELETE SET NULL , GRADE INT);,(2)被参照关系中删除元组置空值,39,当参照关系插入某个元组,而被参照关系不存在相应的元组,其主键值与参照关系插入元组的外键值相同,这时可采用受限插入和递归插入两种策略。,(3)在参照关系中插入元组问题,40,在SQL Server 2005数据库中,根据数据完整性涉及方式的不同,它所作用的数据库对象和范围也不同,可以将数据完整性分为实体完整性、域完整性、引用完整性和用户定义完整性。SQL Server 2005提供了各种机制以强制数据的完整性。,7.3.3 SQL Server 2005的完整性控制,41,SQL Server 2005数据完整性分类表,42,约束是实现强制数据完整的ANSI标准的方法,是SQL Server 2005数据库实现强制数据完整性的重要方式。约束确保合法的数据值存入数据列中,并满足表间的约束关系。,(1)SQL Server 2005完整性约束,43,一般在SQL Server 2005数据库中,保存数据的表都要设置主键。 设置完主键约束的数据表将符合两个数据完整性规则: 列不允许有空值,即指定的PRIMARY KEY约束,将数据列隐式转换为NOT NULL约束。 不能有重复的值。如果对具有重复值或允许有空值的列添加PRIMARY KEY约束,则数据库引擎将返回一个错误并且不添加约束。,1) SQL Server 2005的主键约束,44,UNIQUE约束是指表中的任何两行都不能有相同的列值。 主键也强制实施惟一性,但主键不允许NULL的出现。一般情况下UNIQUE约束用于确保在非主键列中不输入重复的值。 用户可以在创建表时,将UNIQUE约束作为表定义的一部分。也可以在已经存在的数据表,用图形工具或者T-SQL脚本添加UNIQUE约束。一个表可含有多个UNIQUE约束。,2) SQL Server 2005的UNIQUE约束,45,外键是用于建立和加强两个表数据之间关系的约束,它链接两表的一列或多列。 通过将数据表中主键值的列添加到另一个数据表中,可创建两个表之间的关系。这个主键列就成为第二个表的外键。一般表现为两个数据表中,一个数据表的某一列的所有值,全部取自另外一个表的主键值。 构成外键关系的列,在两个数据表中必须具有相同的数据类型(或可相关的数据类型)和长度。,3) SQL Server 2005的外键约束,46,CHECK约束是限制列可接受的值,它可以强制域的完整性。,4) SQL Server 2005的CHECK约束,47,默认值是一种常用的约束。在数据表中插入行时没有为列指定值,默认值则指定列中使用什么值。默认值可以是计算结果为常量的任何值,例如常量、内置函数或数学表达式。,5) SQL Server 2005的DEFAULT约束,48,数据库触发器是一种使用非说明方法实施完整性约束的方法。 触发器类似于过程或函数,但与过程又有一定的区别。过程是被显式调用的,而触发器是当事件发生时被自动调用的(称之为触发)

温馨提示

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

评论

0/150

提交评论