第5章 数据库完整性 | 数据库知识点整理
第5章 数据库完整性 | 数据库知识点整理
了解
- 数据库的完整性约束条件
- 完整性约束条件分类
- 数据库完整性概念与数据库安全性概念的区别和联系
掌握
- DBMS完整性控制机制的三个方面
- 完整性约束条件的定义
- 完整性约束条件的检查和违约处理
- 使用触发器实现数据库完整性的方法
- 定义每个模式的主码
- 定义参照完整性
- 定义于应用有关的完整性
知识点
- 什么是数据库的完整性
- 数据库的完整性是指数据的【正确性】和【相容性】
- 数据库的完整性和安全性是两个不同的概念,但是有一定的联系
- 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garbage In Garbage Out)所造成的无效操作和错误操作
- 后者是保护数据库防止恶意的破坏和非法的存取。
- 也就是说,安全性措施的防范对象是【非法用户和非法操作】,完整性措施的防范对象是【不合语义的数据】
- 完整性约束条件是指数据库中的数据应该满足的语义约束条件一般可以分为六类
-
- 静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。静态列级约束是对一个列的取值域的说明,包括以下几方面:
-
- 对数据类型的约束,包括数据的类型、长度、单位、精度等
- 对数据格式的约束
- 对取值范围或取值集合的约束。
- 对空值的约束
- 其他约束
- 静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:
-
- 实体完整性约束。
- 参照完整性约束。
- 函数依赖约束。
- 修改列定义时的约束
- 修改列值时的约束
- 动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。
- 动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。
- 定义功能,即提供定义完整性约束条件的机制
- 检查功能:即检查用户发出的操作请求是否违背了完整性约束条件
- 违约处理功能:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性
- RDBMS在实现参照完整性时需要考虑可能破坏完整性的各种情况以及用户违约后的处理策略
- 外码是否可以接受空值删除被参照关系的元组时的考虑,这时系统可能采取的作法有三种
-
- 级联删除(CASCADES)
- 受限删除(RESTRICTED)
- 置空值删除(NULLIFIES)
- 受限插入
- 递归插入
- 一般是不能用UPDATE语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。
- 如果允许修改主码,首先要保证主码的唯一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。
职工([职工号],姓名,年龄,职务,工资,部门号)部门([部门号],名称,经理名,电话)- 定义每个模式的主码
- 定义参照完整性
- 定义职工年龄不得超过60岁
CREATE TABLE DEPT (Deptno NUMBER(2) PRIMARY KEY, Deptname VARCHAR(10), Manager VARCHAR(10), PhoneNumber CHAR(12));CREATE TABLE EMP (Empno NUMBER(4) PRIMARY KEY, Ename VARCHAR(10), Age NUMBER(2), Job VARCHAR(9), Sal NUMBER(7,2), Deptno NUMBER(2), CONSTRAINT C1 CHECK(Age<=60), CONSTRAINT FK_DEPTNO FOREIGN KEY(Deptno) REFERENCES DEPT(Deptno));
- 对于违反实体完整性和用户定义的完整性的操作,一般都采用拒绝执行的方式进行处理;
- 而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性
- 某单位想举行一个小型的联谊会,关系Male记录注册的男宾信息,关系Female记录注册的女宾信息。建立一个断言,将来宾的人数限制在50人以内
CREATE TABLE Male (SerialNumber SmallInt PRIMARY KEY, Name CHAR(8), Age SmallInt, Occuptation CHAR(20) );CREATE TABLE Female (SerialNumber SmallInt PRIMARY KEY, Name CHAR(8), Age SmallInt, Occuptation CHAR(20) );CREATE ASSERTION Party /*建立断言PARTY*/CHECK((SELECT COUNT(*) FROM Male)+(SELECT COUNT(*) FROM Female)<=50);
补充
-
-
- 定义关系的主码意味着主码属性【唯一且所有主码属性不为空】
- 关于语句CREATE TABLE R(no int,sum int CHECK(sum>0))和CREATE TABLE R(no int,sum int,CHECK(sum>0)),【两条语句都合法且约束效果一样】【前者定义了属性上的约束条件,后者定义了元组上的约束条件】【当sum属性改变时检查,上述两种CHECK约束都要被检查】
- 在CREATE TABLE时,用户定义的完整性可以通过【NOT NULL】【UNIQUE】【CHECK】等子句实现
- 关系R的属性A参照引用关系T的属性A,T的某条元组对应的A属性值在R中出现,当要删除T的这条元组时,系统可以采用的策略包括【拒绝执行】【级联删除】【设为空值】
- 定义数据库完整性一般是由SQL的【DDL】语句实现的
- 【GRANT】是SQL语言中的数据控制命令
- 【REFERENCES】允许用户定义新关系时,引用其他关系的主码作为外码
- 综合题
-