【绝对干货】数据库教程16:彻底聊聊关系数据库中的完整性约束:实体完整性、参照完整性和用户定义的完整性

【绝对干货】数据库教程16:彻底聊聊关系数据库中的完整性约束:实体完整性、参照完整性和用户定义的完整性实体完整性:是用来唯一标识实体的要求(即现实世界中唯一存在的一个事物、人或个体);参照完整性:它表示的是两个关系之间的联系,是表与表之间的引用;用户定义的完整性:这是针对某个具体的业务、特定的…

这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战

结论描述

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

  • 实体完整性:是用来唯一标识实体的要求(即现实世界中唯一存在的一个事物、人或个体)。不能为空,需要唯一确认,表示的是这一条记录的实体的完整唯一,通常用主键描述,不能为空且不重复。
  • 参照完整性:它表示的是两个关系之间的联系,是表与表之间的引用。对应的就是外键,外键约束实现参照完整性。

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

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

完整性介绍

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

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

正确和相容(外键约束)

数据完整性主要分三类:

  • 实体完整性
  • 参照完整性
  • 用户定义的完整性

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

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

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

实体完整性(Entity Integrity)

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

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

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

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

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

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

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

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

  • 举例

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

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

参照完整性

参照完整性

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

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

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

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

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

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

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

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

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

选修 ( 学号,课程号,成绩 ) 选修(学号,课程号,成绩)
  • 再比如:学生实体及其内部的一对多联系

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

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

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

外码(Foreign Key)

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


F F
是基本关系
R R
的一个或一组属性,但不是关系
R R
的码。

如果
F F
与基本关系
S S
的主码
K s K_s
相对应,则称
F F

R R
的外码。

  • 基本关系
    R R
    称为参照关系(Referencing Relation)
  • 基本关系
    S S
    称为被参照关系(Referenced Relation)或目标关系(Target Relation)

【绝对干货】数据库教程16:彻底聊聊关系数据库中的完整性约束:实体完整性、参照完整性和用户定义的完整性

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

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

参照完整性的规则

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

  • 或者取空值(F的每个属性值均为空值)
  • 或者等于S中某个元组的主码值

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

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

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

  • 举例

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

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

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

用户定义的完整性

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

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

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

  • 举例:

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

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

参考

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

今天的文章【绝对干货】数据库教程16:彻底聊聊关系数据库中的完整性约束:实体完整性、参照完整性和用户定义的完整性分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/17006.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注