1、结论描述

先用最简单的话总结一下,实体、参照和用户定义的完整性,避免理论性的论述性的内容过长过繁。

  • 实体完整性:是用来唯一标识实体的要求(即现实世界中唯一存在的一个事物、人或个体)。不能为空,需要唯一确认,表示的是这一条记录的实体的完整唯一,通常用主键描述,不能为空且不重复。

  • 参照完整性:它表示的是两个关系之间的联系,是表与表之间的引用。对应的就是外键,外键约束实现参照完整性。

外码(外键)要么取空值,要么取引用的表的主码(主键)值,或码的值。

  • 用户定义的完整性:这是针对某个具体的业务、特定的实际需求而定义的,关系中的属性需要满足的条件或取值范围等。即数据库管理系统提供并实现由用户自己定义的某个完整性。

2、完整性介绍 

数据完整性约束指的是为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

数据完整性(Data Integrity)保证的是数据的精确(Accuracy)和可靠性(Reliability)。

正确和相容(外键约束)

数据完整性主要分三类:

  • 实体完整性

  • 参照完整性

  • 用户定义的完整性

就是根据定义的一组(多个)规则,RDBMS实现对数据完整性的保证。

实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称为关系的两个不变性,应该由关系系统自动支持。

用户定义的完整性是应用领域需要遵循的约束条件,体现的是具体领域、具体业务和需求场景中要满足的约束。

3、实体完整性(Entity Integrity)

实体代表了现实世界中实际存在事、物、人或抽象的概念。

这就要求实体是客观存在的,是可分辨可区分的。比如现实中的两个学生,是可区分的,这是两个不同的个体;两个相同型号的手机,也是可分辨的两个不同的物体。

当将两个学生、两个手机不同的客体的相关数据,从现实空间映射到数据空间时,就是两条记录。这两条记录也应该是可区分的。

如何区分关系中的两个实体或两个记录?是通过关系的码。

实体的完整性,就是对关系的码做出要求,即不能取空值。

关系的主属性不能取空值。必须是确定的唯一的值,否则无法区分两条记录。

空值,NULL,在数据库中表示一种特殊值,它表示“不知道”或“不确定”或“无意义,不存在”的特殊状态。

由于“不知道”、“不确定”,所有任何值和NULL进行操作的结果都是NULL,都是不确定。

  • 举例

比如"选修"关系中:选修(学号,课程号,成绩)。

“学号、课程号”为主码,这两个属性都不能取空值。

4、参照完整性

(1)参照完整性

参照完整性指的是关系与关系之间的联系,即表与表之间的联系,通常对应表中的外键约束或外键引用。

通过关系中属性的值(即列的值)来关联不同的关系实体。

  • 比如:专业实体、学生实体及它们之间一对多的联系。

学生(学号,姓名,性别,专业号,年龄)学生(学号,姓名,性别,专业号,年龄)

专业(专业号,专业名)专业(专业号,专业名)

学生关系引用了专业关系的主码“专业号”;学生关系中的“专业号”的值必须是确实存在的专业的“专业号”。

  • 再比如:学生、课程、学生与课程之间的多对多联系

学生(学号,姓名,性别,专业号,年龄)学生(学号,姓名,性别,专业号,年龄)

课程(课程号,课程名,学分)课程(课程号,课程名,学分)

选修(学号,课程号,成绩)选修(学号,课程号,成绩)

  • 再比如:学生实体及其内部的一对多联系

学生(学号,姓名,性别,专业号,年龄,班长)学生(学号,姓名,性别,专业号,年龄,班长)

“学号”是主码,“班长”是外码,它引用了本关系的“学号”。

“班长” 必须是确实存在的学生的学号。

(2)外码(Foreign Key)

外码对应数据库中表的外键。

设 FF 是基本关系 RR 的一个或一组属性,但不是关系 RR 的码。

如果 FF与基本关系 SS 的主码 K_sKs 相对应,则称 FF 是 RR 的外码。

如此:基本关系 RR 称为参照关系(Referencing Relation),基本关系 SS 称为被参照关系(Referenced Relation)或目标关系(Target Relation)

自引用的属性也是外码。比如学生中的“班长”与“学号”对应。“班长”是外码;学生关系既是参照关系也是被参照关系。

外码并不一定要与相应的主码同名。不是自引用的参照完整性,通常外码与主码都会取相同的名字,便于识别。

(3)参照完整性的规则

若属性(或属性组) FF 是基本关系R的外码,它与基本关系S的主码 K_sKs 相对应,则对于R中每个元组在F上的值必须为:

  • 或者取空值(F的每个属性值均为空值)

  • 或者等于S中某个元组的主码值

也就是,外码(外键)要么取空值,要么取引用的表的主码(主键)值,或码的值

现代RDBMS中,外键通常也都支持引用表的码属性,而不一定是主键,比如唯一约束的列。

外码(外键)可以去空值的原因在于,它并不用于区分标识实体的唯一,不用于区分不同的实体,取空值不影响实体完整性。空值表示参照关系中的这个元组(实体)在外码(外键)属性上的值暂时未知,即字段值未知的状态。

  • 举例

学生关系中每个元组的“专业号”属性只取两类值:

(1)空值,表示尚未给该学生分配专业

(2)非空值,这时该值必须是专业关系中某个元组的“专 业号”值,即该学生不可能分配一个不存在的专业。

5、用户定义的完整性

用户定义的完整性,针对的是某一个具体使用的数据库中的约束条件。反映的是具体应用、具体业务或场景,涉及的数据必须满足的要求。

这类约束的实现,可以放在应用层完成检查校验;也可以由关系数据库管理系统,提供对这类完整性定义、实现和检验的机制,由数据库系统层统一管理和处理,减少应用程序的负担。

实体完整性(主键)和参照完整性(外键)约束,也都是由数据库系统层提供的约束机制

  • 举例:

课程(课程号,课程名,学分)课程(课程号,课程名,学分)

非主属性“课程名”不能取空值,且是唯一值。“学分”属性只能取值{1,2,3,4}

参考

主要参考自《数据库系统概论(基础篇)》

作者:代码迷途
链接:https://juejin.cn/post/7001652363094294535
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

彻底聊聊关系数据库中的完整性约束:实体完整性、参照完整性和用户定义的完整性相关推荐

  1. 数据库完整性(实体完整性、参照完整性、用户定义的完整性、完整性约束命名字句、断言、触发器)

    数据库完整性:数据的正确性(是指数据是符合现实世界语义,反映了当前实际状况的).数据的相容性(是指数据库同一对象在不同关系表中的数据是符合逻辑的) 数据的完整性 : 防止数据库中存在不符合语义的数据, ...

  2. 【数据库系统设计】数据库完整性(实体完整性、参照完整性、用户定义的完整性、CHECK语句)

    数据库完整性 5.1 实体完整性 5.1.1 实体完整性定义 5.1.2 实体完整性检查和违约处理 5.2 参照完整性 5.2.1 参照完整性定义 5.2.2 参照完整性检查和违约处理 小结 5.3 ...

  3. 关系模型中的三类完整性约束:实体完整性、参照完整性和用户定义完整性

    数据完整性 要想了解这三类完整性约束首先要了解什么是数据完整性.数据完整性是指数据库中存储的数据是有意义的或正确的,和现实世界相符.关系模型中三类完整性约束: – 实体完整性(Entity Integ ...

  4. 数据库完整性(实体完整性,参照完整性,用户定义完整性)

    数据库完整性: 指数据库中数据的正确性.相容性 正确性:保证进入数据库的数据是符合语义约束的合法数据 相容性:同一个事实的两个数据应当是一致的    为了维护数据库的定义完整性: DBMS必须具备三个 ...

  5. 简述关系数据库的数据完整性规则_什么是数据库关系的完整性?

    关系模型的完整性规则是对关系的某种约束条件.关系模型中有三类完整性约束:实体完整性规则,用户定义的完整性规则,和参照完整性规则. 1. 实体完整性规则 关系的主键可以表示关系中的每条记录,二关系的实体 ...

  6. 【数据库系统设计】关系数据库简介(关系模型、关系模式、关系完整性、关系代数)

    关系数据库 笔记目录 关系模型 关系数据结构 域 关系 关系模式 关系的三类完整性 实体元整性(Entity Integrity) 参照完整性 用户定义的完整性 关系代数 关系代数运算符 传统的集合运 ...

  7. mysql支持关系模型中哪些完整性约束_数据完整性约束(1)——实体完整性、参照完整性...

    一.数据完整性的分类 在关系模型中,提供了实体完整性,参照完整性,用户定义完整性. 二.实体完整性 2.1什么是实体? 实体是一个数据对象,指的是客观存在并可以相互区分的事物,比如学生,老师等.一个实 ...

  8. 实体完整性参照完整性和用户自定义的完整性分别是怎样体现的

    关系的完整性是关系型数据模型结构中的另一组成部分,它分为实体完整性.参照完整性和用户定义完整性三类.在关系数据库中一个关系对应现实世界的一个实体集,关系中的每一个元组对应一个实体.在关系中用主关键字来 ...

  9. 数据库中的完整性约束及实例

    2019独角兽企业重金招聘Python工程师标准>>> 1 定义 数据完整性用于保证数据库中数据的正确性.一致性和可靠性. 2 类型 • 实体完整性(Entity Integrity ...

最新文章

  1. WMI技术介绍和应用——查询硬件信息
  2. Underscore实例教程
  3. one of the variables needed for gradient computation has been modified by an inplace
  4. Egit Patch
  5. 编程练习--简单实用的选项卡切换效果
  6. 如何备份桌面文件呢?
  7. .NET5.0 单文件发布打包操作深度剖析
  8. laravel $request 多维数组取值_3分钟短文:Laravel的“南天门”,过滤掉七七八八的数据...
  9. JDK与Java SE/EE/ME的区别
  10. iOS用户体验之-modal上下文
  11. pygame之key模块
  12. 计算机word英语词汇大全,Microsoft Word - 计算机英语词汇汇总.pdf
  13. 什么是北京指标?什么是北京车牌?
  14. 方框加对勾怎么输入_如何打出带方框的对号
  15. 九州云亮相中国国际工业博览会 展出最新边缘计算技术
  16. 实名认证需谨慎,避免陷入隐私泄露风险
  17. STFT短时傅里叶变换的实现
  18. Atitit db analysis statistics tonjyi fsy数据库统计分析目录1. Atitit 数据库表与注释文档与统计(表,说明) 11.1. 获取表列表 数据库包含哪些
  19. Python批量处理Excel数据后,导入SQL Server
  20. python-字典及其三种定义方法

热门文章

  1. 微信公众号开发总结(Node.js + express + winston)
  2. 武汉火神山医院紧急招募 IT 运维志愿者需求
  3. Linux下的Tomcat调优
  4. 手游神武2最新服务器,神武4手游跨平台新服志气冲天开服时间表_神武4手游新区开服预告_第一手游网手游开服表...
  5. 团队协作开发工具Git超详细讲解(工作必会)
  6. 啊哈c语言编译器v3.0
  7. android checkbox是否选中,Android 中如何处理checkbox的选中、未选中
  8. 太牛了!3年Android开发工程师面试经验分享,跳槽薪资翻倍
  9. DolphinScheduler 2.0.5详解
  10. 计算机专业知识更新速度快,[计算机专业知识]计算机基础知识论文:医学专业计算机基础教...