关系的三类完整性约束
数据的完整性和安全性
- 数据的完整性
- 也就是数据的正确性和相容性
- 防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
- 防范对象:不合语义的、不正确的数据
- 数据的安全性
- 保护数据库防止恶意的破坏和非法的存取
- 防范对象:非法用户和非法操作
完整性约束:
数据完整性约束是一组完整性规则的集合。
规则包含:实体完整性、参照完整性、用户定义完整性
。三者都满足即满足了数据完整性约束。因此本概念的定义是一个描述性定义。
实体完整性
实体完整性这项规则要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值。
主键就是通过一个属性或者多个属性的集合可以确定其余所有属性,这个就是主键,后面会讲解到,这里不理解没有关系。
举例:
比如"选修"关系中:选修(学号,课程号,成绩)。
“学号、课程号”为主码,这两个属性都不能取空值。
一句话总结实体完整性就是:数据表的主键必须唯一且不为空
参照完整性
1.关系引用
参照完整性
指的是关系与关系之间的联系,即表与表之间的联系,通常对应表中的外键约束或外键引用。通过关系中属性的值(即列的值)来关联不同的关系实体。
外键的定义不知道也没有关系,后面会讲解,这里只要知道即可。
举例:
比如:专业实体、学生实体及它们之间一对多的联系。
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
学生关系引用了专业关系的主码“专业号”;学生关系中的“专业号”的值必须是确实存在的专业的“专业号”。
上述例子中,学号是学生关系的主码,专业号是专业关系的主码,学生关系引用了专业关系的主码。
2.外码
设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码K
相对应,则称F是基本关系R的外码。
基本关系R称为参照关系(Referencing Relation)
基本关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)
举例:
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
专业号属性是学生关系的
外码
专业关系是被参照关系
,学生关系为参照关系
补充内容:
- 关系R和S不一定是不同的关系
- 目标关系S的主码K和参照关系的外码F必须定义在同一个(或一组)域上
- 外码并不一定要与相应的主码同名
当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别
3.参照完整性规则
若属性(或属性组)F是基本关系R的外码它与基本关系S的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
举例:
学生关系中每个元组的“专业号”属性只取两类值:
(1)空值,表示尚未给该学生分配专业
(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配一个不存在的专业
简单来讲就是,外码要么是空值,要么是另一个关系的主码
用户自定义的完整性
用户定义的完整性
:针对的是某一个具体使用的数据库中的约束条件。反映的是具体应用、具体业务或场景,涉及的数据必须满足的要求。
这类约束的实现,可以放在应用层完成检查校验;也可以由关系数据库管理系统,提供对这类完整性定义、实现和检验的机制,由数据库系统层统一管理和处理,减少应用程序的负担。
举例:
课程(课程号,课程名,学分)
非主属性“课程名”也不能取空值
“学分”属性只能取值{1,2,3,4}
check约束:
用于限制列的取值范围。
例:为STUDENT表的Sage列设置取值范围:Sage>=15
Default约束:
用于指定列的默认值。
例:为STUDENT表的Sdept列定义默认值:计算机系
彻底聊聊关系数据库中的完整性约束:实体完整性、参照完整性和用户定义的完整性-技术圈
关系代数
概述:关系代数是通过关系代数运算构成的表达式来表达查询
关系代数运算是以一个或两个关系作为输入(即运算对象)产生一个新的关系作为结果
数据库系统之:关系代数详解-超详细JavaEEKing的博客-CSDN博客数据库关系代数
关系代数学 以致用-CSDN博客关系代数
关系代数中的除法运算大漠雁-CSDN博客关系代数除法
这里我偷懒了,因为好多地方不方便用Markdown写出来,又不好直接盗取别人的,反正比较简单,一看就会了。