关系的三类完整性约束

数据的完整性和安全性

  • 数据的完整性
    • 也就是数据的正确性和相容性
    • 防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
    • 防范对象:不合语义的、不正确的数据
  • 数据的安全性
    • 保护数据库防止恶意的破坏和非法的存取
    • 防范对象:非法用户和非法操作

完整性约束:数据完整性约束是一组完整性规则的集合
规则包含:实体完整性、参照完整性、用户定义完整性。三者都满足即满足了数据完整性约束。因此本概念的定义是一个描述性定义。


实体完整性

实体完整性这项规则要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值

主键就是通过一个属性或者多个属性的集合可以确定其余所有属性,这个就是主键,后面会讲解到,这里不理解没有关系。

举例:

  1. 比如"选修"关系中:选修(学号,课程号,成绩)。
  2. “学号、课程号”为主码,这两个属性都不能取空值。

一句话总结实体完整性就是:数据表的主键必须唯一且不为空


参照完整性

1.关系引用

参照完整性指的是关系与关系之间的联系,即表与表之间的联系,通常对应表中的外键约束或外键引用。通过关系中属性的值(即列的值)来关联不同的关系实体。

外键的定义不知道也没有关系,后面会讲解,这里只要知道即可。

举例:

  1. 比如:专业实体、学生实体及它们之间一对多的联系。
  2. 学生(学号,姓名,性别,专业号,年龄)
  3. 专业(专业号,专业名)
  4. 学生关系引用了专业关系的主码“专业号”;学生关系中的“专业号”的值必须是确实存在的专业的“专业号”。

上述例子中,学号是学生关系的主码专业号是专业关系的主码,学生关系引用了专业关系的主码。

2.外码

设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码K相对应,则称F是基本关系R的外码。

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

举例:

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

专业号属性是学生关系的外码 专业关系是被参照关系,学生关系为参照关系

补充内容:

  • 关系R和S不一定是不同的关系
  • 目标关系S的主码K和参照关系的外码F必须定义在同一个(或一组)域上
  • 外码并不一定要与相应的主码同名
  • 当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别

    3.参照完整性规则

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

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

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

举例:

  1. 学生关系中每个元组的“专业号”属性只取两类值:
  2. (1)空值,表示尚未给该学生分配专业
  3. (2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配一个不存在的专业

简单来讲就是,外码要么是空值,要么是另一个关系的主码


用户自定义的完整性

用户定义的完整性:针对的是某一个具体使用的数据库中的约束条件。反映的是具体应用、具体业务或场景,涉及的数据必须满足的要求。
这类约束的实现,可以放在应用层完成检查校验;也可以由关系数据库管理系统,提供对这类完整性定义、实现和检验的机制,由数据库系统层统一管理和处理,减少应用程序的负担。
举例:

  1. 课程(课程号,课程名,学分)
  2. 非主属性“课程名”也不能取空值
  3. “学分”属性只能取值{1234}

check约束:

用于限制列的取值范围
例:为STUDENT表的Sage列设置取值范围:Sage>=15

Default约束:

用于指定列的默认值
例:为STUDENT表的Sdept列定义默认值:计算机系
彻底聊聊关系数据库中的完整性约束:实体完整性、参照完整性和用户定义的完整性-技术圈


关系代数

概述:关系代数是通过关系代数运算构成的表达式来表达查询
关系代数运算是以一个或两个关系作为输入(即运算对象)产生一个新的关系作为结果
数据库系统之:关系代数详解-超详细JavaEEKing的博客-CSDN博客数据库关系代数
关系代数学 以致用-CSDN博客关系代数
关系代数中的除法运算大漠雁-CSDN博客关系代数除法

这里我偷懒了,因为好多地方不方便用Markdown写出来,又不好直接盗取别人的,反正比较简单,一看就会了。