数据库第05章

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CREATE TABLE Student
实体完整性
例2 将SC表中的Sno, Cno属性定义为码
CREATE TABLE SC (Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT, PRIMARY KEY (Sno,Cno) );
实体完整性
5.动态元组约束
动态元组约束是指修改元组的值时,元组中各个 属性之间要满足的约束条件。
例: 职工工资调整不得低于
原来工资 + 工龄*1.5
6.动态关系约束
动态关系约束是加在关系变化前后状态上的限 制条件
例:事务一致性、原子性等约束条件
完整性约束条件小结
粒 度
状态


元 组 级
关 系 级
列定义
·类型 静 态 ·格式
P(Procedure) 违反完整性规则时触发的过程
数据库完整性
例1:在“学号不能为空”的约束中
D 约束作用的对象为Sno属性
O
A C P
插入或修改Student 元组时
Sno不能为空 无(A可作用于所有记录的Sno属性) 拒绝执行该操作
数据库完整性
例2:在“教授工资不得低于1000元”的约束中
完整性约束条件
六类完整性约束条件
静态列级约束、静态元组约束、静态关系约束、
动态列级约束、动态元组约束、动态关系约束
对象状态 动态列级约束 动态 ④ 静态列级约束 静态 ① 动态元组约束 ⑤ 静态元组约束 ② 动态关系约束 ⑥ 静态关系约束 ③

元组
关系
对象粒度
1.静态列级约束
静态列级约束是对一个列的取值域的说明,是最 常见、最简单、最容易实现的一类完整性约束。 静态列级约束的分类
D O 约束作用的对象为工资Sal属性 插入或修改职工元组时
A
C
Sal不能小于1000
职称=‘教授’ (A仅作用于职称=‘教授’的记 录)
P
拒绝执行该操作
数据库完整性
完整性检查是围绕完整性约束条件进行的,因
此完整性约束条件是完整性控制机制的核心。
完整性约束条件作用的对象
列:对属性的取值类型、范围、精度等的约束条件 元组:对元组中各个属性列间的联系的约束 关系:对若干元组间、关系集合上以及关系之间的 联系的约束
除的被参照关系的主码值相同,这时就要考虑如何保
证数据库的参照完整性。 例:在删除Student关系中Sno = 95001的元组,而 SC关系中又有4个元组的Sno都等于95001。 可以采用三种策略:级联删除(CASCADE)、拒绝执
行(NO ACTION)、置空删除(SET-NULL)
在被参照关系中删除元组时的问题
参照关系,其主码为Sno;SC为参照关系,
外码为Sno
若SC的Sno为空值,表明尚不存在的某个学生或 者某个不知学号的学生,选修了某门课程,其成 绩记录在Grade中。这与学校的应用环境是不相 符的,因此SC的Sno列不能取空值。
参照完整性
2.在被参照关系中删除元组时的问题
在进行删除操作时,有时在删除被参照关系的某个元 组,可能在参照关系中会有若干元组的外码值与被删
FOREIGN KEY (Sno) REFERENCES Student(Sno)
FOREIGN KEY (Cno) REFERENCES Course(Cno) );
参照完整性
参照完整性检查和违约处理
RDBMS实现参照完整性时需要考虑以下4方面: 外码能否接受空值的问题
在被参照关系中删除元组的问题
数据类型约束:包括数据的类型、长度、单位、精度等
对数据格式的约束 取值范围或取值集合的约束 对空值的约束:空值表示未定义或未知的值,它与零值 和空格不同;有的列允许空值,有的则不允许 其他约束:关于列的排序说明,组合列等
2.静态元组约束
静态元组约束规定元组的各个列之间的约束 关系
例:订货关系中发货量<=订货量
在参照关系中插入元组时的问题 修改关系中主码的问题
参照完整性
1.外码是否可以接受空值的问题
外码是否能够取空值取决于应用环境的语义
在实现参照完整性时,系统除了应该提供定义外码
的机制,还应提供定义外码列是否允许空值的机制
例1:职工-部门数据库包含职工表EMP和部门表DEPT。其
中:DEPT关系的主码为部门号Deptno;EMP关系的主码
有时需根据应用语义执行一些附加的操作,以保证 数据库的正确性。
数据库完整性
完整性规则五元组表示:
(D,O,A,C,P)
D(Data) 约束作用的数据对象 O(Operation) 触发完整性检查的数据库操作 当用户发出什么样的操作请求时,需要检查该完整 性规则;是立即检查还是延迟检查 A(Assertion) 数据对象必须满足的断言或语义约束 规则的主体 C(Condition) 选择A作用的数据对象值的谓词
例:对于上面的情况,系统会在删除Student关系
中Sno = 95001的元组的同时,将SC关系中Sno = 95001的元组的Sno置为空值。 对于学生选 课数据库来说,这种方法显然是不符 合应用环境语义的。
参照完整性
3.在参照关系中插入元组时的问题
在向数据库中插入数据时,可能会出现需要在参照
静态元组约束只局限在元组上
3.静态关系约束
静态关系约束是指存在于关系的各个元组之间 或若干关系之间的各种联系或约束。 常见静态关系约束
实体完整性约束 关系模型的极其重要的约束 称为关系的两个不变性 参照完整性约束 函数依赖约束:大部分函数依赖约束都在关系模式中 定义 统计约束:定义某个字段值与关系中多个元组的统计 值之间的约束关系 例:职工平均工资的2倍 <= 部门经理的工资
延迟执行的约束(Defered constraints)
完整性检查延迟到整个事务执行结束后进行,检查 正确方可提交 例:从账号A转一笔钱到账号B为一个事务,从账号A 转出去钱后账就不平了,必须等转入账号B后账才
能重新平衡,这时才能进行完整性检查。
数据库完整性
违约反应的执行
如果发现用户操作请求违背了完整性约束条件,系
实体完整性约束 元 组值应 满足 的条 参照完整性约束
·值域
·空值

函数依赖约束
统计约束


改 变 列 定 元组新旧值之间应 关系新旧状态间应满
义或列值 满足的约束条件 足的约束条件
5.1 实体完整性
实体完整性规则
若属性A是基本关系R的主属性,则属性A不能取空值。
关系模型的实体完整性在CREATE TABLE中用中
关系中插入元组,而被参照关系不存在相应的元组,
其主码值与参照关系插入元组的外码值相同。 例:要向SC关系中插入(99001,1,90)元组,而 Student关系中还没有学号Sno = 99001的学生。 可以采用的策略
参照完整性规则
若属性(或属性组)F是基本关系R的外码,它与基本 关系S的主码Ks相对应(基本关系R和S不一定是不同的
关系),则对于R中每个元组在F上的值必须为:
或者取空值(F的每个属性值均为空值) 或者等于S中某个元组的主码值
关系模型的参照完整性在CREATE TABLE中用中用 FOREIGN KEY定义哪些列为外码,用REFERENCES 短语指明这些外码参照哪些表的主码。
删除操作,否则拒绝此删除操作 例:对于上面的情况,只有先将SC关系中Sno = 95001的4个元组先删除掉,系统才会执行删除 Student关系中Sno = 95001的元组。否则,系统
将拒绝删除Student关系中Sno = 95001的元组。
在被参照关系中删除元组时的问题
置空删除
删除被参照关系的元组,同时将参照关系中与被参照 关系中被删除元组主码值相等的外码值置为空值。
数据库系统原理及应用
哈尔滨工业大学管理学院 芦鹏宇
lupengyu@hit.edu.cn
2013年8月6日
第5章 数据库完整性
什么是数据库的完整性
数据的正确性和相容性 正确性:防止不合语义的数据进入数据库
完整性:是否真实地反映现实世界
数据库是否具备完整性关系到数据库系统能否
真实地反映现实世界。
数据库完整性
用PRIMARY KEY定义。
单属性构成的码的说明方法 定义为列级约束条件 定义为表级约束条件 多属性构成的码的说明方法 定义为表级约束条件
实体完整性
例1 将Student表中的Sno属性定义为码
CREATE TABLE Student (Sno CHAR(9), Sname CHAR(20) NOT NULL, Sgend CHAR(2), Sage SMALLINT, Sdept CHAR(20) PRIMARY KEY(Sno) ); (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Sgend CHAR(2), Sage SMALLINT, Sdept CHAR(20) );
完整性约束条件
完整性约束条件涉及的三类对象的状态可以是 静态的,也可以是动态的。
静态约束(最重要的一类完整性约束)
指数据库每一确定状态时的数据对象所应满足的
约束条件,是反映数据库状态合理性的约束 动态约束 指数据库从一种状态转变为另一种状态时,新、 旧值之间所应满足的约束条件,是反映数据库状
态变迁的约束
统将拒绝该操作
对于延迟执行的约束,系统将拒绝整个事务,把数 据库恢复到事务执行前的状态
数据库完整性
目前许多关系数据库管理系统都提供了定义和 检查实体完整性、参照完整性和用户定义的完 整性的功能。
违反实体完整性规则和用户定义的完整性规则的操 作时,一般是拒绝执行。
违反参照完整性的操作,并不都是简单地拒绝执行,
实体完整性检查和违约处理
用PRIMARY KEY短评定义了关系的主码后,每当用户进 程对基本表插入一条记录或对主码列进行更新操作时,
RDBMS将按实体完整性规则自动进行检查。
检查主码值是否唯一,如不唯一则拒绝插入和修改 检查主码的各个属性是否为空,只要有一个为空就 拒绝插入或修改
5.2 参照完整性
级联删除
将参照关系中外码值与被参照关系中要删除元组主
码值相对应的元组一起删除
例:将SC关系中4个Sno = 95001的元组一起删除 如果参照关系同时又是另一个关系的被参照关系, 则这种删除操作会继续级联下去。
在被参照关系中删除元Байду номын сангаас时的问题
拒绝执行
仅当参照关系中没有任何元组的外码值与要删除的
被参照关系的元组的主码值相对应时,系统才执行
<= 职工平均工资的5倍
4.动态列级约束
动态列级约束是修改列定义或列值时应满足的约
束条件
动态列级约束的分类
修改列定义时的约束 例:将原来允许空值的列改为不允许空值时,如果
该列目前已存在空值,则拒绝这种修改 修改列值时的约束 例:学生入学时将年龄输入到计算机当中,在毕业 时要打印成绩单,需要修改学生年龄,这时就要 求学生年龄只能增长,而且与原年龄的差应是在 读的时间。
数据库的完整性与安全性的区别
完整性
防止数据库中存在不合法语义的数据,防止
错误信息的输入和输出。 防范对象是不合语义的数据。 安全性 保护数据库防止恶意的破坏和非法的存取。
防范对象是非法用户和非法操作。
数据库完整性
DBMS的完整性控制机制
用于检查数据库中的数据,看其是否满足语义规定的条
件。 定义完整性约束条件
–加在数据库之上的语义约束条件,将作为模式的一部分存 入数据库中。
完整性检查
–检查用户发出的操作请求是否违背了完整性约束条件。
违约处理
–如果发现用户的操作请求使数据违背了完整性约束条件, 则采取一定的动作来保证数据的完整性。
数据库完整性
检查功能的实现
立即执行的约束(Immediate constraints) 语句执行完后立即检查是否违背完整性约束
为职工号Empno, 外码为部门号Deptno;称DEPT为被参
照关系或目标关系,EMP为参照关系
在这个数据库中,EMP关系包含有外码Deptno,某元组的
这一列若为空值,表示这个职工尚未分配到任何具体的部
门工作。这与应用环境的语义相符。
外码是否可以接受空值的问题
例2:学生-选课数据库中:Student关系为被
参照完整性
例 关系SC中一个元组表示一个学生选修的某门课程的成绩,
(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码 和Course表的主码。 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno,Cno),
相关文档
最新文档