这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战
结论描述
先用最简单的话总结一下,实体、参照和用户定义的完整性,避免理论性的论述性的内容过长过繁。
- 实体完整性:是用来唯一标识实体的要求(即现实世界中唯一存在的一个事物、人或个体)。不能为空,需要唯一确认,表示的是这一条记录的实体的完整唯一,通常用主键描述,不能为空且不重复。
- 参照完整性:它表示的是两个关系之间的联系,是表与表之间的引用。对应的就是外键,外键约束实现参照完整性。
外码(外键)要么取空值,要么取引用的表的主码(主键)值,或码的值。
- 用户定义的完整性:这是针对某个具体的业务、特定的实际需求而定义的,关系中的属性需要满足的条件或取值范围等。即数据库管理系统提供并实现由用户自己定义的某个完整性。
完整性介绍
数据完整性约束指的是为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
数据完整性(Data Integrity
)保证的是数据的精确(Accuracy
)和可靠性(Reliability
)。
正确和相容(外键约束)
数据完整性主要分三类:
- 实体完整性
- 参照完整性
- 用户定义的完整性
就是根据定义的一组(多个)规则,RDBMS实现对数据完整性的保证。
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称为关系的两个不变性,应该由关系系统自动支持。
用户定义的完整性是应用领域需要遵循的约束条件,体现的是具体领域、具体业务和需求场景中要满足的约束。
实体完整性(Entity Integrity)
实体代表了现实世界中实际存在事、物、人或抽象的概念。
这就要求实体是客观存在的,是可分辨可区分的。比如现实中的两个学生,是可区分的,这是两个不同的个体;两个相同型号的手机,也是可分辨的两个不同的物体。
当将两个学生、两个手机不同的客体的相关数据,从现实空间映射到数据空间时,就是两条记录。这两条记录也应该是可区分的。
如何区分关系中的两个实体或两个记录?是通过关系的码。
实体的完整性,就是对关系的码做出要求,即不能取空值。
关系的主属性不能取空值。必须是确定的唯一的值,否则无法区分两条记录。
空值,NULL,在数据库中表示一种特殊值,它表示“不知道”或“不确定”或“无意义,不存在”的特殊状态。
由于“不知道”、“不确定”,所有任何值和NULL进行操作的结果都是NULL,都是不确定。
- 举例
比如”选修”关系中:选修(学号,课程号,成绩)。
“学号、课程号”为主码,这两个属性都不能取空值。
参照完整性
参照完整性
参照完整性指的是关系与关系之间的联系,即表与表之间的联系,通常对应表中的外键约束或外键引用。
通过关系中属性的值(即列的值)来关联不同的关系实体。
- 比如:专业实体、学生实体及它们之间一对多的联系。
学生关系引用了专业关系的主码“专业号”;学生关系中的“专业号”的值必须是确实存在的专业的“专业号”。
- 再比如:学生、课程、学生与课程之间的多对多联系
- 再比如:学生实体及其内部的一对多联系
“学号”是主码,“班长”是外码,它引用了本关系的“学号”。
“班长” 必须是确实存在的学生的学号。
外码(Foreign Key)
外码对应数据库中表的外键。
设
是基本关系
的一个或一组属性,但不是关系
的码。
如果
与基本关系
的主码
相对应,则称
是
的外码。
- 基本关系
称为参照关系(Referencing Relation) - 基本关系
称为被参照关系(Referenced Relation)或目标关系(Target Relation)
自引用的属性也是外码。比如学生中的“班长”与“学号”对应。“班长”是外码;学生关系既是参照关系也是被参照关系。
外码并不一定要与相应的主码同名。不是自引用的参照完整性,通常外码与主码都会取相同的名字,便于识别。
参照完整性的规则
若属性(或属性组)
是基本关系R的外码,它与基本关系S的主码
相对应,则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
也就是,外码(外键)要么取空值,要么取引用的表的主码(主键)值,或码的值。
现代RDBMS中,外键通常也都支持引用表的码属性,而不一定是主键,比如唯一约束的列。
外码(外键)可以去空值的原因在于,它并不用于区分标识实体的唯一,不用于区分不同的实体,取空值不影响实体完整性。 空值表示参照关系中的这个元组(实体)在外码(外键)属性上的值暂时未知,即字段值未知的状态。
- 举例
学生关系中每个元组的“专业号”属性只取两类值:
(1)空值,表示尚未给该学生分配专业
(2)非空值,这时该值必须是专业关系中某个元组的“专 业号”值,即该学生不可能分配一个不存在的专业。
用户定义的完整性
用户定义的完整性,针对的是某一个具体使用的数据库中的约束条件。反映的是具体应用、具体业务或场景,涉及的数据必须满足的要求。
这类约束的实现,可以放在应用层完成检查校验;也可以由关系数据库管理系统,提供对这类完整性定义、实现和检验的机制,由数据库系统层统一管理和处理,减少应用程序的负担。
实体完整性(主键)和参照完整性(外键)约束,也都是由数据库系统层提供的约束机制。
- 举例:
非主属性“课程名”不能取空值,且是唯一值。 “学分”属性只能取值{1,2,3,4}
参考
主要参考自《数据库系统概论(基础篇)》
今天的文章【绝对干货】数据库教程16:彻底聊聊关系数据库中的完整性约束:实体完整性、参照完整性和用户定义的完整性分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/17006.html