第五章 数据库完整性
数据库的 完整性 是指数据的 正确性 和 相容性。

数据库必须具有以下的功能
1)提供定义完整性
2)和完整性检查的机制
3)违约方法

1、 静态列级约束
静态列级约束:对的取值域的说明
最常见、最简单、最容易实现的一类完整性约束
1)数据类型约束:数据的类型、长度、单位、精度等
2) 对数据格式的约束
3) 取值范围或取值集合的约束
4) 对空值的约束
5) 其他约束
例:关于列的排序说明,组合列等
2. 静态元组约束
规定元组的各个列之间的约束关系
例:订货关系中发货量<=订货量
教师关系中教授的工资>=700元
静态元组约束只局限在元组上
3. 静态关系约束
关系的各个元组之间或若干关系之间存在的各种联系或约束. 常见静态关系约束:

  1. 实体完整性约束
  2. 参照完整性约束
  3. 函数依赖约束
  4. 统计约束

4、动态列级约束
动态列级约束是修改列定义或列值时应满足的约束条件
1) 修改列定义时的约束
例:将原来允许空值的列改为不允许空值时:
该列目前已存在空值,则拒绝这种修改
2) 修改列值时的约束
修改列值时新旧值之间要满足的约束条件
例:职工工资调整 >= 原来工资
年龄只能增长

RDBMS实现参照完整性时需要考虑以下4方面:

  1. 外码是否可以接受空值的问题
    外码是否能够取空值:依赖于应用环境的语义
    实现参照完整性:
    系统提供定义外码的机制
    定义外码列是否允许空值的机制

2.在被参照关系中删除元组时的问题
出现违约操作的情形:
删除被参照关系的某个元组(student)
而参照关系有若干元组(SC)的外码值与被删除的被参照关系的主码值相同

违约反应:可有三种策略

  • 级联删除(CASCADES)
    删除外码的时候,如果有以该外码为主码的元组一并删除

  • 受限删除(RESTRICTED)
    删除该外码的时候,也会删除以该外码为主码的元组,但是只有在该元组为空的时候才会删除。否则拒绝此删除操作。

  • 置空值删除(NULLIFIES)
    删除被参照关系的元组,并将参照关系中与被参照关系中被删除元组主码值相等的外码值置为空值。
    这三种处理方法,哪一种是正确的,要依应用环境的语义来定

    3.在参照关系中插入元组时的问题
    出现违约操作的情形
    需要在参照关系中插入元组,而被参照关系不存在相应的元组
    违约反应

  • 受限插入
    仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。

  • 递归插入
    首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。

4、修改被参照关系中主码的问题
两种策略
(1)不允许修改主码
(2)允许修改主码

违约操作

  • 要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值
  • 要修改参照关系中某些元组的主码值,而被参照关系中没有任何元组的外码值等于被参照关系修改后的主码值

违约反应 (1)
修改的关系是被参照关系:与删除类似

  • 级联修改
    修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。
  • 受限修改
    拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。
  • 置空值修改
    修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。

违约反应 (2)
修改的关系是参照关系:与插入类似

  • 受限插入
    仅当参照关系中含有要插入的外码的时候,被参照关系才可以插入元组
  • 递归插入
    向被参照关系中插入新的元组的时候,参照关系会自动插入相关的外码,并且其他的元素置为空值,如果有其他的关系也有外码,会一直递归插入下去。

RDBMS在实现参照完整性时:
需要向用户提供定义主码、外码的机制
向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法

三、自定义的完整性

空值、唯一、check短语

Ssex char(2) check(Ssex in('男','女');
Grade smallint check(Grade >= 0 and Grade <= 100);

自定义元组约束
check短语

....check (Sex = '女' or Sname not like 'Ms.%');

自定义约束命名子句
用constraint子句:

constraint c1 check(sal + deduct >= 3000)
#cl 为自定义的约束名,有点向宏定义,能够为操作起别名
constraint teacherFKey Foreign Key(Deptno)
References Dept(Deptno);

触发器
触发器是一种存储的过程,由三种条件(UPDATE,DELETE,INSERT)之一的组合来触发。
定义触发器。
Create trigger 触发器名 {before|after} <触发事件> on <表名>Referencing New|Old row as <变量> For each{row|statement} [when<触发条件>]
<触发动作体> 其中,Referencing指出引用的变量。

例子

create trigger SC_T after Update of Grade on SC;Create trigger Student_Count After insert on StudentCreate trigger Insert_or_Update_Sal Before INsert or
update on Teacher Referencing New row as newTuple for each row
Begin if (newTuple.Job = '教授') and (newTuple.sal < 8000) then newTuple.Sal:=8000;

敲完才明白触发器是用来用户自定义完整性的呀~o( ̄▽ ̄)ブ

2022-1-9数据库理论期末复习(六)第五章 数据库完整性相关推荐

  1. 计算机图形学期末复习之第四章:基本图形生成算法

    可能这会是图形学期末复习最后一个整理了, 感觉其实不如直接看PPT. 1.填空20+选择20+判断10+简答20+综合30 2.没有编程题 3.复习PPT上的基本概念和算法 计算机图形学期末复习之第四 ...

  2. 第五章 数据库设计和事务 ① 笔记

    第五章 数据库设计和事务 ① 笔记 1.内容回顾 2.本章重点 3.具体内容 3.1:数据库三大范式(设计规则)  面试题:(重要) 第一范式(1NF): 第二范式(2NF): 第三范式设计表: 3 ...

  3. 数据库系统概论 ---- 第五章 -- 数据库完整性

    文章目录 第五章 -- 数据库完整性 5.1 实体完整性 5.1.1 定义实体完整性 5.1.2 实体完整性检查和违约处理 5.2 参照完整性 5.2.2 参照完整性检查和违约处理 5.3 用户定义的 ...

  4. RFID期末复习 四、五、六、七章节

    第四章 1.方式 射频识别技术在工作频率为13.56 MHz和小于135kHz时,基于电感耦合方式,在更高频段基于雷达探测目标的反向散射耦合方式. 2.阅读器和应答器分别采用什么谐振回路? 在阅读器中 ...

  5. 大数据技术期末复习习题-前两章 大数据概述及Hadoop概述

    链接:大数据技术原理与应用期末复习第三章知识点 链接:HDFS编程实践 习题 1[单选题] 人类社会的数据产生方式大致经历了三个阶段,不包括____C____. A.运营式系统阶段 B.用户原创内容阶 ...

  6. 概率论与数理统计期末复习题型集锦——第一章

    文章目录 第一章 一.概念性知识点 1. 事件间的关系 2. 互不相容事件.对立事件 3. 事件间的运算律 4.习题 二.计算题型 1. 排列组合 2. 古典概型 3. 几何概型 4. 条件概率 5. ...

  7. 计算机网络(期末复习5、6章)

    文章目录 第五章 运输层 第六章 应用层 个人博客排版更舒适,建议点击跳转 第五章 运输层 可靠传输的实现机制: 面向连接.流量控制.拥塞控制 差错检测.确认.编号.定时器 一. 运输层两个主要协议的 ...

  8. 软件工程复习提纲——第五章

    软件工程复习提纲,期末.考研的学霸笔记 第五章--详细设计 第五章详细设计 详细设计阶段的根本目标:确定应该怎样具体地实现所要求的系统. 结构程序设计: 1)如果一个程序的代码块仅仅通过顺序.选择和循 ...

  9. 【数据库】期末复习:SQL语句、关系代数的运算、范式的定义和判断、求最小函数依赖集、ER图转关系模式

    文章目录 SQL语句 查询select 其他 视图 关系代数的运算 并.差.笛卡尔积.投影和选择 连接 自然连接 笛卡尔积 详细版(如果完全不了解就看这里) 范式的定义和判断 如何求候选码 一些例题 ...

最新文章

  1. shader 编程入门(一)
  2. 【maven3学习之三】maven构建一个简单的Hello World
  3. 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)
  4. Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
  5. 最全android Demo
  6. RTT的线程同步篇——事件
  7. 找呀志_通过开源框架引AsyncHttpClient处理get/post要求
  8. Unity3D导出的EXE不用显示分辨率选择界面
  9. 小菜的系统框架界面设计-小菜用户权限管理软件开源大放送
  10. C#:SQL查询结果生成datatable后,根据min、max查询datatable中min到max的数据,并生成新的datatable
  11. Active Record 数据库模式-增删改查操作
  12. c语言程序设计超市会员卡管理系统,c语言程序设计超市管理系统.doc
  13. Python中main函数
  14. gopher攻击mysql_机窝安全--安全技术 | 巧用Gopher协议扩展SSRF攻击手法
  15. mac键盘快捷键详解,苹果电脑键盘快捷键图文教程
  16. react 日期怎么格式化_react日期格式化组件
  17. 滑稽,使用paddle轻松搞定抠图,妈妈再也不用担心我不会抠图了
  18. java中的throw new Exception();和throw e;异常抛出
  19. [代码审计]Weiphp5.0 前台文件任意读取分析
  20. steam无法连接到更新服务器的问题

热门文章

  1. 全国计算机等级考试无法缴费,全国计算机等级考试网报缴费 时间为6月20至30日...
  2. win10 linux 1903,win10最新版本1903新功能
  3. mysql 同步设置密码_mySQL数据同步设置
  4. 昌邑机器人_昌邑检测关节机器人,关节机器人
  5. 获取bilibili直播弹幕的WebSocket协议
  6. 一日一Shader·天空镜面反射【SS_26】
  7. 如何根据已有的下载路径下载文件并重命名文件
  8. Android产品研发(十七)--Hybrid开发
  9. react项目安装:error http://registry.npm.taobao.org/antd/download/antd-3.10.4.tgz: Integrity check failed
  10. 计算机操作系统【慕课版】课后习题解答