第二章 关系数据库¶
约 1168 个字 预计阅读时间 4 分钟
关系模型是建立在集合代数的基础上的。
关系¶
码¶
候选码: 若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。
全码: 关系的所有属性构成候选码,称为全码。
主码: 从候选码中选一个作为主码。
外码: 不是该表(A)的主码 ,但是另一个表(B)的主码。
- 参照关系衍生而来的
- 关系A:参照关系
- 关系B:被参照关系
主属性: 后选码的属性称为主属性。
非主属性: 不是后选码的属性称为非主属性。
三类表¶
- 基本表:实际存在的表。
- 查询表:查询结果对应的表。
- 视图表:由基本表活其他视图表导出的表,是虚表。
关系的性质
- 不同的列出自同个域(取值范围可以相同)
- 行/列的顺序无所谓
- 属性名各不相同。
- 任意两个元组的候选码不能相同(候选码唯一标识)
- 分量必须取原子值(不能大表套小表)
关系模式¶
关系模式是对关系的描述。关系模式是「型」,关系是「值」。
关系模式可以形式化地表示为:R (U,D,DOM,F)
- R:关系名
- U:属性名集合
- D:属性来自的域
- DOM:属性向域的映像集合
- F:属性间的数据依赖关系集合
关系数据结构¶
查询的五种基本操作:选择,投影,并,差,笛卡尔积
关系数据库语言的分类¶
- 关系代数语言:用「关系的运算」来表达查询要求
- 关系演算语言:用「谓词」来表达查询查询要求
- 具有关系代数和关系演算双重特点的语言: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¶
先跳了。
元组关系演算¶
运算符的优先顺序:
- 算术比较运算法最高
- 量词次之,且 \(\exists\) 的优先级高于 \(\forall\)
- 逻辑运算符最低,且 \(\lnot\) 的优先级高于 \(\land\),\(\land\) 高于\(\lor\)。(先与再或)

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

*域关系演算语言¶
先跳过了
Last update: April 24, 2026
Discussion