5.数据库完整性

梳理

在这里插入图片描述

名词解释

  • 数据库完整性:是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。因此,完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库
    (vs
    完整性:防止不正确或者不相容的数据 进入数据库
    安全性:防止非法用户或者非法操作 对数据库数据的非法存取
  • 完整性约束条件:是数据库中数据必须满足的语义条件规则
    (理解上,条件=规则)
  • 断言:在SQL中通过声明性断言可以指定更具一般性的约束(例如涉及多表、聚集操作等)。
    创建断言后,任何对断言中所涉及关系的操作都会触发DBMS对断言的检查,任何断言为FALSE的操作都会被拒绝
  • 触发器(TRIGGER):是用户定义在关系表上的一类由事件驱动的特殊过程,在满足一定条件或达到一定阈值时会自动触发。
    可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力

课后习题

1.数据库完整性

数据库的完整性是指数据的正确性和相容性。
数据的正确性:数据是符合现实世界语义、反映当前实际状况的(eg:性别只能是男|女)
数据的相容性:数据库同一对象在不同关系表中的数据是符合逻辑的(eg:学生选修的课,只能是学校开设的课程)

2.数据库的完整性概念和数据的安全性概念的区别&联系

  • 官方版
       数据的完整性和安全性是两个不同的概念,但是有一定的联系。
       前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出( Garbage In Garbage out )所造成的无效操作和错误结果。
       后者是保护数据库防止恶意的破坏和非法的存取。
       也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。
       其相同点是两者都是对数据库中的数据进行控制,各自所实现的功能目标不同。

3.数据库的完整性约束条件

完整性约束条件是指数据库中的数据应该满足的语义约束条件。

一般可以分为六类:
静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。

  1. 静态列级约束是对一个列的取值域的说明,包括以下几方面:
    对数据类型的约束,包括数据的类型、长度、单位、精度等
    对数据格式的约束
    对取值范围或取值集合的约束。
    对空值的约束
    其他约束
  2. 静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。
  3. 静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:
    实体完整性约束。
    参照完整性约束。
    函数依赖约束。
  4. 动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:
    修改列定义时的约束
    修改列值时的约束
  5. 动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。
  6. 动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。

4.DBMS的完整性控制机制具有的三方面功能

DBMS 的完整性控制机制应具有三个方面的功能:
(1)定义功能,即提供定义完整性约束条件的机制;
(2)检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;
(3)违约处理功能:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。

5.DBMS在实现参照完整性时需要考虑的因素

  1. 官方版(荐)
    RDBMs 在实现参照完整性时需要考虑以下几个方面:
    ( l )外码是否可以接受空值。
    ( 2 )删除被参照关系的元组时的考虑,这时系统可能采取的作法有三种: l )级联删除( CASCADES ) ; 2 )受限删除( RESTRICTED ) ; 3 )置空值删除( NULLIFIES )。
    ( 3 )在参照关系中插入元组时的问题,这时系统可能采取的作法有: l )受限插入; 2 )递归插入。
    ( 4 )修改关系中主码的问题。一般是不能用 UPDATE 语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。如果允许修改主码,首先要保证主码的惟一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。
  2. 版本二(辅助理解)
    RDBMS在实现参照完整性时需要考虑可能破坏完整性的各种情况以及用户违约后的处理策略
    在这里插入图片描述

外码是否可以接受空值删除被参照关系的元组时的考虑,这时系统可能采取的作法有三种
级联删除(CASCADES)
受限删除(RESTRICTED)
置空值删除(NULLIFIES)

在参照关系中插入元组时的问题,这时系统可能采取的作法有
受限插入
递归插入

修改关系中主码的问题
一般是不能用UPDATE语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。
如果允许修改主码,首先要保证主码的唯一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。

6.假设有下面两个关系模式:职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;部门(部门号,名称,经理名,电话),其中部门号为主码。用 SQL 语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:定义每个模式的主码;定义参照完整性;定义职工年龄不得超过 60 岁。

CREATE TABLE Dept
(
	Dept NUMBER(4) PRIMARY KEY,
	Name VARCHAR(10),
	Manager_name VARCHAR(10),
	Phone NUMBER(11)
);

CREATE TABLE Emp
(
	Empno NUMBER(4) PRIMARY KEY,
	Name VARCHAR(10),
	Age NUMBER(4) CHECK(Eage <= 60),
	Job VARCHAR(10),
	Wages NUMBER(7,2),
	Deptno NUMBER(10),
	
	CONSTRAINT FK_DEPTNO
	FOREIGN KEY(Deptno) REFERENCES Dept(Deptno)
);

7.关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的?

对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。
   而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。
   在这里插入图片描述
(其中拒绝执行导致原因不同:
(1)用户指定~
(2)违背实体完整性,才~

8.某单位想举行一个小型的联谊会,关系male记录注册的男嘉宾的信息,关系female记录注册的女嘉宾的信息,建立一个断言,将来宾的人数限制在50人以内

mysql不支持断言,该题省略先

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值