第五章 :数据库完整性
了解
数据库的完整性约束条件 完整性约束条件分类 数据库完整性概念与数据库安全性概念的区别和联系 复制代码
掌握
- DBMS完整性控制机制的三个方面
- 完整性约束条件的定义
- 完整性约束条件的检查和违约处理
- 使用触发器实现数据库完整性的方法
- 用SQL语言定义关系模式的完整性约束条件
- 定义每个模式的主码
- 定义参照完整性
- 定义于应用有关的完整性
数据库的完整性
数据库的完整性是指数据的【正确性】和【相容性】
数据库完整性概念与数据库安全性概念的区别和联系
前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garbage In Garbage Out)所造成的无效操作和错误操作 一句话:更偏向于数据的正确性 后者是保护数据库防止恶意的破坏和非法的存取。
一句话:更偏向于数据的安全 也就是说,安全性措施的防范对象是【非法用户和非法操作】,完整性措施的防范对象是【不合语义的数据】(如果把数据看做是一个家,相当于安全性防范的是自己人避免做错事,而安全性防范的是小偷进来)
什么是数据库的完整性约束条件,分类
完整性约束条件是指数据库中的数据应该满足的语义约束条件一般可以分为六类静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。
静态列级约束是对一个列的取值域的说明,包括以下几方面: 对数据类型的约束,包括数据的类型、长度、单位、精度等 对数据格式的约束 对取值范围或取值集合的约束。 对空值的约束 其他约束 静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。
静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:
实体完整性约束。 参照完整性约束。 函数依赖约束。
动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:
修改列定义时的约束 修改列值时的约束
动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。
动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。
DBMS的完整性控制机制应具有哪三个方面的功能
定义功能:即提供定义完整性约束条件的机制 检查功能:即检查用户发出的操作请求是否违背了完整性约束条件 违约处理功能:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性
RDBMS在实现参照完整性时需要考虑哪些方面
RDBMS在实现参照完整性时需要考虑可能破坏完整性的各种情况以及用户违约后的处理策略
外码是否可以接受空值删除被参照关系的元组时的考虑,这时系统可能采取的作法有三种
- 级联删除(CASCADES)
- 受限删除(RESTRICTED)
- 置空值删除(NULLIFIES)
在参照关系中插入元组时的问题,这时系统可能采取的作法有
- 受限插入
- 递归插入
修改关系中主码的问题
一般是不能用UPDATE语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。 如果允许修改主码,首先要保证主码的唯一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。
在关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的
对于违反实体完整性和用户定义的完整性的操作,一般都采用拒绝执行的方式进行处理; 而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性
** 具体可以参照下图**
课后答案
定义关系的主码意味着主码属性【唯一且所有主码属性不为空】
关系R的属性A参照引用关系T的属性A,T的某条元组对应的A属性值在R中出现,当要删除T的这条元组时,系统可以采用的策略包括【拒绝执行】【级联删除】【设为空值】
定义数据库完整性一般是由SQL的【DDL】语句实现的
【GRANT】是SQL语言中的数据控制命令
【REFERENCES】允许用户定义新关系时,引用其他关系的主码作为外码