[工学]数据库讲解

上传人:tia****nde 文档编号:71249967 上传时间:2019-01-19 格式:PPT 页数:120 大小:467.98KB
返回 下载 相关 举报
[工学]数据库讲解_第1页
第1页 / 共120页
[工学]数据库讲解_第2页
第2页 / 共120页
[工学]数据库讲解_第3页
第3页 / 共120页
[工学]数据库讲解_第4页
第4页 / 共120页
[工学]数据库讲解_第5页
第5页 / 共120页
点击查看更多>>
资源描述

《[工学]数据库讲解》由会员分享,可在线阅读,更多相关《[工学]数据库讲解(120页珍藏版)》请在金锄头文库上搜索。

1、普通高等教育十一五规划教材 数据库原理教程,范明、叶阳东、邱保志、职为梅 编著 科学出版社,2008,第5章 完整性与安全性,2019年1月19日星期六,数据库系统原理,3,第5章 完整性与安全性,数据库是一种共享资源,是存放数据的场所 数据库系统需要保护数据库,防止用户有意或无意地破坏数据 数据的完整性和安全性是一个问题的两个方面,都是为了保护数据库中的数据 数据完整性旨在保护数据库中的数据,防止合法用户对数据库进行修改时破坏数据的一致性 数据安全性旨在保护数据库,防止未经授权的访问和恶意破坏和修改,2019年1月19日星期六,数据库系统原理,4,第5章 完整性与安全性,5.1 完整性概述

2、5.2 实体完整性和参照完整性 5.3 域约束 5.4 用户定义的完整性 5.5 触发器 5.6 安全性概述 5.7 用户标识与鉴别 5.8 存取控制 5.9 SQL的授权 5.10 其他安全措施 5.11 小结,5.1 完整性概述,2019年1月19日星期六,数据库系统原理,6,完整性概述,数据库的完整性是指数据库中的数据的正确性、一致性和相容性 数据库中的数据要成为有意义的信息,必须满足一定的语义约束约束条件 关系数据库上约束分为 实体完整性 参照完整性 用户定义的完整性 所有的约束都是语义约束,都是用户根据实际问题的语义指定的 实体完整性和参照完整性约束的含义是特定的,用户只需要说明关系

3、的主码和外码,而不必再说明约束条件 对于其他约束(用户定义的完整性),用户需要使用一个谓词具体说明约束条件,2019年1月19日星期六,数据库系统原理,7,约束分类,根据被约束的数据对象,完整性约束可以分为如下四类: 类型(域)约束:说明给定类型的合法取值 属性约束:说明属性的合法取值 关系约束:说明关系的合法取值 数据库约束:说明数据库的合法取值,通常涉及多个关系 实体完整性是一种关系约束 参照完整性是一种数据库约束 用户定义的完整性可以是上述四种约束的任何一种,2019年1月19日星期六,数据库系统原理,8,约束分类(续),约束还可以分静态约束和动态约束 静态约束是关于数据库正确状态的约束

4、 动态约束是数据库从一种正确状态转移到另一种状态的转移约束 例如,对于婚姻状况,如下动态转移约束是正确的 未婚到已婚、已婚到离异、已婚到丧偶、离异到已婚、丧偶到已婚 对于最后学位,如下动态转移约束是正确的:学士到硕士、学士到博士、硕士到博士 说明: DDL允许用户在创建域的同时说明域上的约束条件,并且允许用户使用创建的域定义属性约束 属性约束、关系约束和参照完整性约束都可以在创建关系时说明 更一般地,约束是一个关于数据库对象的断言。DDL应当允许用户定义断言,使得用户可以定义更复杂约束,2019年1月19日星期六,数据库系统原理,9,DBMS对完整性的支持,为了维护数据库的完整性,完整性控制应

5、当作为DBMS核心机制,必须提供: 说明和定义完整性约束条件的方法 DBMS的DDL允许用户根据实际问题的语义说明和定义各种完整性约束条件 完整性检查机制 DBMS在数据更新可能破坏完整性时自动进行完整性检查 检查可以在更新操作执行时立即执行,也可以在事务提交时进行 违约处理 当数据更新违反完整性约束时,DBMS应当采取相应的措施,确保数据的完整性,2019年1月19日星期六,数据库系统原理,10,DBMS对完整性的支持(续),说明 数据库约束的检查是可延迟的,可以延迟到事务提交时进行 其他约束的检查是立即的,在可能导致违反完整性约束的更新时立即进行 所有数据库更新都不能破坏数据库的完整性 当

6、更新违反参照完整性约束时存在多种可能的补救措施,系统可以允许更新,并自动采取相应的行动(见5.2节) 在其他情况下 (如违反实体完整性和违反用户定义的完整性约束), 违反完整性约束的更新通常被拒绝 DBMS也提供一些机制,使得用户可以说明对某些违反完整性约束的更新所采取的行动(见5.5节),5.2 实体完整性与参照完整性,2019年1月19日星期六,数据库系统原理,12,实体完整性,在关系数据库中,一个基本关系对应于一个实体集或联系集 实体完整性约束是一个关系内的约束 实体完整性规则 每个关系应该有一个主码,每个元组的主码值唯一确定该元组 主码的任何属性都不能取空值 何时可能破坏实体完整性 删

7、除操作不会破坏实体完整性 插入新元组和修改某个(些)元组的主码值可能破坏实体完整性 何时检查实体完整性和处理措施 DBMS应当在插入新元组和修改元组的主码时自动检查是否导致违反实体完整性约束 拒绝导致破坏实体完整性约束的任何插入或修改,2019年1月19日星期六,数据库系统原理,13,实体完整性(续),判断主属性是否为空值是简单的 主码唯一性检查 为了有效地判定主码上的值是否唯一,通常DBMS自动在主码上建立索引(如B+树索引) 通过索引查找而不必访问任何元组就能确定主码上的值是否唯一 SQL对实体完整性的支持 用户只需要在创建基本表时说明关系的主码,系统就能够自动地保证实体完整性 SQL说明

8、主码的方法已在第4章讨论,2019年1月19日星期六,数据库系统原理,14,参照完整性,参照完整性约束是不同关系之间或同一关系的不同元组间的约束 参照完整性规则 参照关系R的任何元组在其外码FKR上的值或者等于被参照关系S的某个元组在主码Ks上的值,或者为空值。 即,参照完整性要求要么不参照(外码取空值),要么被参照的对象必须存在 例子,2019年1月19日星期六,数据库系统原理,15,参照完整性(续),1. 参照完整性与E-R模型 如果关系数据库模式是由E-R图转换得到的,则由联系集转换得到每一个关系都存在参照完整性约束 设R是实体集E1, E2, , En之间的联系,Ki表示Ei的主码,则

9、R的关系模式的属性包括K1K2Kn,则R的模式中的每个Ki都是导致参照完整性约束的外码 如果R是多对多联系,则R的关系模式的主码为K1K2Kn ;此时,R的关系模式的外码都不能取空值 如果R是E1, , Ei1, Ei+1, , En到Ei的多对一联系,则除外码Ki之外,R的关系模式的其他外码都不能取空值,2019年1月19日星期六,数据库系统原理,16,参照完整性(续),参照完整性约束的另一种来源是弱实体集 弱实体集的关系模式必须包含它所依赖的实体集的主码。因此,每个弱实体集的关系模式包含一个导致参照完整性约束的外码 弱实体集对应的关系模式的外码实际是其主码的一部分,因此其外码也不能取空值

10、说明 DBMS应当支持实体完整性和参照完整性约束 然而,与实体完整性不同,违反参照完整性存在不同的处理方案,DBMS允许用户根据实际情况选择不同的处理方法 设R 为参照关系,其外码FKR ;S 为被参照关系,其主码为Ks 删除参照关系R 的元组或向被参照关系S 插入新元组都不会违反参照完整性 在其他情况下可能破坏参照完整性,2019年1月19日星期六,数据库系统原理,17,参照完整性(续),2. 违反参照完整性的更新 向参照关系R中插入新元组tR 如果不存在被参照关系S的元组tS使得tRFKR=tSKs,则破坏参照完整性 从被参照关系S中删除元组tS 如果存在参照关系R的元组tR使得tSKs=

11、tRFKR,则破坏参照完整性(删除导致tR违反参照完整性) 修改参照关系R的元组tR外码上的值 如果不存在被参照关系S的元组tS使得new(tRFKR)=tSKs,则破坏参照完整性 其中new(tRFKR)表示元组tR修改后在外码上的值,2019年1月19日星期六,数据库系统原理,18,参照完整性(续),修改被参照关系S的元组tS主码上的值 如果存在参照关系R的元组,tR 使得old(tSKs)=tRFKR,则破坏参照完整性(修改导致tR违反参照完整性) 其中old(tSKs)表示元组tS修改前在主码上的值 在上述四种情况下,DBMS应当自动进行参照完整性检查,2019年1月19日星期六,数据

12、库系统原理,19,参照完整性(续),3. 保证参照完整性的措施 当更新导致破坏参照完整性时,可能的处理措施包括: 拒绝、级联、置空值和置缺省值 (1) 拒绝:拒绝违反参照完整性的更新 是最简单的处理措施 拒绝可以用于以上4种情况的任何一种 对于情况1、3(即向参照关系中插入新元组修改参照关系R的元组外码上的值),一般只能拒绝 对于其他情况(从被参照关系 中删除元组修改被参照关系的元组主码上的值)还存在其他有意义的选择 当更新被拒绝时,系统应当返回一个出错信息提示用户,2019年1月19日星期六,数据库系统原理,20,参照完整性(续),(2) 级联:进行更新,并且对更新导致违反参照完整性的参照关

13、系元组进行相应更新。具体地说, 当删除被参照关系S中的元组tS破坏参照完整性时,同时删除参照关系R中所有违反参照完整性的元组tR 修改被参照关系S的元组tS主码上的值而破坏参照完整性时,同时用tS主码上的新值修改参照关系R上违反参照完整性的元组tR的外码 例如 学号为200515099的学生退学,删除Students中学号为200515099的Students元组的同时删除SC中Sno=200515099的选课记录 而学号为200515099的学生的学号修改为2006154221时,可以同时将SC中Sno=200515099的元组的Sno修改为200616221,2019年1月19日星期六,数

14、据库系统原理,21,参照完整性(续),(3) 置空值:进行更新,并且对更新导致违反参照完整性的参照关系元组的外码置空值 这种处理方法仅当外码允许取空值时才能使用 例如,如果允许职工的部门属性取空值(尚未分配到具体部门,或者是公司总裁),当公司的某个部门撤销时,可以在删除该部门在Departments中的记录的同时将EMPS中相应职工的部门属性置空值 (4) 置缺省值:进行更新,并且对更新导致违反参照完整性的参照关系元组的外码置缺省值 其中缺省值必须是被参照关系某元组主码上的值或空值 DBMS应当提供上述处理措施,用户可根据具体情况进行选择,2019年1月19日星期六,数据库系统原理,22,SQ

15、L对参照完整性的支持,外码可以在创建基本表时用FOREIGN KEY子句说明, 形式为: FOREIGN KEY (A1, Ak) REFERENCES () 指出修改和删除违反参照完整性约束时触发的动作;缺省时,违反参照完整性的修改和删除将被拒绝 可以是如下两种形式之一: ON UPDATE ON DELETE ON DELETE ON UPDATE 其中可以是CASCADE、SET NULL、SET DEFAULT和NO ACTION 之一,分别表示级联、置空值、置缺省值和拒绝 ON DELETE 缺省时,违反参照完整性的删除将被拒绝 ON UPDATE 缺省时,违反参照完整性的修改将被拒

16、绝,2019年1月19日星期六,数据库系统原理,23,SQL对参照完整性的支持(续),例5.1 在例4.1中,我们定义了Students、Courses和SC等基本表 如果我们希望 更新Students元组的主码时同时修改相应的SC元组的外码Sno 删除Students的元组时同时删除相应的SC元组 更新Courses的元组时同时修改相应的SC元组的外码Cno,但不允许删除Courses的元组破坏参照完整性 CREATE TABLE SC (Sno CHAR (9), Cno CHAR (5), Grade SMALLINT CHECK (Grade=0 AND Grade=100), PRIMARY KEY (Sno,Cno), FOREIGN KEY (Sno) REFERENCES Students (Sno) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY (Cno) REFERENCES Courses (Cno)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号