Skip to content
Self-Knowing

第二章 关系数据库

约 1168 个字 预计阅读时间 4 分钟

关系模型是建立在集合代数的基础上的。

关系

候选码: 若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。

全码: 关系的所有属性构成候选码,称为全码。

主码: 从候选码中选一个作为主码。

外码: 不是该表(A)的主码 ,但是另一个表(B)的主码。

  • 参照关系衍生而来的
  • 关系A:参照关系
  • 关系B:被参照关系

主属性: 后选码的属性称为主属性。

非主属性: 不是后选码的属性称为非主属性。

三类表

  1. 基本表:实际存在的表。
  2. 查询表:查询结果对应的表。
  3. 视图表:由基本表活其他视图表导出的表,是虚表。

关系的性质

  1. 不同的列出自同个域(取值范围可以相同)
  2. 行/列的顺序无所谓
  3. 属性名各不相同。
  4. 任意两个元组的候选码不能相同(候选码唯一标识)
  5. 分量必须取原子值(不能大表套小表)

关系模式

关系模式是对关系的描述。关系模式是「型」,关系是「值」。

关系模式可以形式化地表示为:R (U,D,DOM,F)

  • R:关系名
  • U:属性名集合
  • D:属性来自的域
  • DOM:属性向域的映像集合
  • F:属性间的数据依赖关系集合

关系数据结构

查询的五种基本操作:选择,投影,并,差,笛卡尔积

关系数据库语言的分类

  1. 关系代数语言:用「关系的运算」来表达查询要求
  2. 关系演算语言:用「谓词」来表达查询查询要求
  3. 具有关系代数和关系演算双重特点的语言:SQL

关系的完整性

三种完整性约束:实体完整性、参照完整性、用户定义的完整性

  • 实体完整性:主码中的每个值都是唯一的,且不允许为空值。
  • 参照完整性:外码值必须在其指向的那张表的主码中有对应的值。
  • 用户定义的完整性

关系代数

集合运算符:并、差、交、笛卡尔积

专门的关系运算符:选择、投影、连接、除

  • \(t[A_i]\)​ : 表示元组 t 的 \(A_i\)​ 分量

  • \(Z_x\):表示 关系R 中属性组 \(X\) 上值为 \(x\) 的诸元组在 \(Z\) 上分量的集合,其实就是 \(Z_{X = x}\)

  • 选择:\(\sigma\) ,选符合条件的元组

  • 投影:\(\pi\) ,选择列

  • 连接:又称为 \(\theta\) 连接,表示从两个关系的笛卡尔积中选择符合条件的元组

    • 等值连接:\(R \bowtie_{R.A = S.B} S\) ,从关系R 与 S的广义笛卡尔积中选取 \(R.A = R.B\) 的元组。

    • 自然连接:\(R \bowtie S\)​,比较的分量必须是相同属性组,且去掉重复列。

    • 外连接:外连接会保留那些在另一个关系中没有匹配的元组。

    • 左外连接: 会返回左侧关系中的所有元组,即使在右侧关系中没有匹配的元组。对于右侧关系中没有匹配的元组,结果中的对应列将为空。

  • 除:\(R \div S\), R 在 \(X\) 上分量值 \(x\) 的象集 \(Y_x\) 包含 S 在 \(Y\) 上投影的集合

    • 先找两个表的公共列,\(X\) 是 R 中不在公共部分的列
    • 对 X 上的所有值 做象集
    • 若象集包含 S 中公共部分的所有值,则选出来。

例题

例一:查询至少选修了一门其直接先行课为 5 号课程的课程的学生姓名

\(\pi_{\text{Sname}}(\sigma_{\text{Cpno}='5'}(\text{Course} \bowtie \text{SC}) \bowtie \pi_{\text{Sno},\text{Sname}}(\text{Student}))\)

先挑选出先行课为 5 号课程的,再和 Student 表连接,这样就保证了不回重复,因为 Student 中不会重复,然后再投影 Sname

如果直接等值连接的话,可能会有重复的名字。

例二:查询选修了全部课程的学生号码和姓名

\(\pi_{\text{Sno,Cno}}(SC) \div \pi_{\text{Cno}}(Course) \bowtie \pi_{\text{Sno,Sname}}(Student)\)

先找出学号,在和 Student 表做自然连接。

关系演算

*元组关系演算语言 ALPHA

先跳了。

元组关系演算

运算符的优先顺序:

  1. 算术比较运算法最高
  2. 量词次之,且 \(\exists\) 的优先级高于 \(\forall\)
  3. 逻辑运算符最低,且 \(\lnot\) 的优先级高于 \(\land\)\(\land\) 高于\(\lor\)(先与再或)

image-20240229230914444

安全限制:一个有限的符号集 \(dom(\phi)\),它包含所有结果的符号。

image-20240301001219112

*域关系演算语言

先跳过了


Created: April 24, 2026
Last update: April 24, 2026

Discussion