关系模型基础:基本概念、完整性与关系代数

一、课程考点总览

  1. 考查形式:关系基本概念、关系完整性以选填为主;关系代数为高频考点,选填+简答/计算均会涉及
  2. 核心框架:关系模型基于集合代数,核心围绕「关系概念+完整性约束+关系代数运算」展开

二、关系的基本概念

1. 域(Domain)

定义:一组具有相同数据类型的值的集合,本质是属性的取值范围
$$D = {d_1,d_2,\dots,d_n}$$
示例:整数集$\Z$、8位数字格式的生日集${20031010,20040506,\dots}$、学号编码集等。

2. 笛卡尔积(Cartesian Product)

定义:设域$D_1,D_2,\dots,D_n$,其笛卡尔积为各域的所有可能组合:
$$D_1 \times D_2 \times \dots \times D_n = {(d_1,d_2,\dots,d_n) \mid d_i \in D_i, i=1,2,\dots,n}$$

核心衍生概念

  • 元组(Tuple):笛卡尔积中的每个元素$(d_1,d_2,\dots,d_n)$,对应二维表的一行
  • 分量(Component):元组中的每个$d_i$,对应二维表的一个单元格值
  • 域的基数:一个域中不同取值的个数,记为$m_i$;
  • 笛卡尔积的基数:各域基数的乘积,$M = m_1 \times m_2 \times \dots \times m_n$。
    示例:$D_1={T1,T2}$(导师,$m_1=2$),$D_2={CS,SE}$(专业,$m_2=2$),$D_3={S1,S2,S3}$(学生,$m_3=3$),则$D_1 \times D_2 \times D_3$的基数$M=2×2×3=12$。

3. 关系(Relation)

定义:笛卡尔积$D_1 \times D_2 \times \dots \times D_n$的子集,记为:
$$R(D_1,D_2,\dots,D_n)$$
其中$R$为关系名,$n$为目/度(关系中属性的个数),$n=1$为一元关系,$n=2$为二元关系。

核心衍生概念

  • 属性(Attribute):关系中每一列的名称,对应域的标识,如「导师」「专业」「学生」;
  • 候选码(Candidate Key):能唯一标识一个元组,且其任意子集无此特性的属性/属性组;
  • 主码(Primary Key):从多个候选码中选定的一个,作为关系的唯一标识;
  • 全码(All-Key):关系中所有属性共同构成候选码,是极端情况。

4. 关系的类型

类型 别称 定义 存储特性
基本关系 基本表 实际存在的关系 物理存储数据
查询关系 查询表 基于条件从基本表查询的结果 临时生成,不持久
视图表 视图 由基本表/其他视图导出 虚表,不存储数据

5. 基本关系的6条性质

  1. 列同质:每一列的分量来自同一域,数据类型一致;
  2. 列可同域:不同列可出自同一个域,需用不同属性名区分;
  3. 列序无关:列的排列顺序不影响关系的含义,可任意调整;
  4. 候选码唯一:任意两个元组的候选码值不能重复;
  5. 行序无关:行的排列顺序不影响关系的含义,可任意交换;
  6. 分量原子性:每个分量是不可分的数据项,不允许「表中有表」(满足第一范式)。

三、关系的完整性约束

关系完整性是对关系的数据约束规则,保证数据的正确性、一致性和有效性,共3类:

1. 实体完整性(Entity Integrity)

规则:若属性$A$是基本关系$R$的主属性(候选码中的属性),则$A$不能取空值,且主属性值唯一

  • 空值:表示「不知道/不存在/无意义」的值,非0/空字符串;
  • 本质:保证现实世界中的实体可区分(主码唯一标识实体);
  • 示例:学生关系中,学号为主码,则学号不能为NULL,且无重复学号。

2. 参照完整性(Referential Integrity)

前置概念:外码(Foreign Key)

设$F$是基本关系$R$的属性/属性组,不是$R$的主码;$K_S$是基本关系$S$的主码,且$F$与$K_S$属性个数相同、类型可比,则称$F$是$R$的外码

  • 参照关系:$R$(包含外码的关系);
  • 被参照关系/目标关系:$S$(外码引用的关系);
  • 特殊情况:$R$和$S$可以是同一关系(自参照)。

参照完整性规则:关系$R$中,外码$F$的取值只能为两种情况:

  1. 空值($F$的所有属性均为空);
  2. 等于被参照关系$S$中某个元组的主码值

示例1:学生关系(学号,姓名,主修专业),专业关系(专业名,专业编号),「主修专业」是学生关系的外码,其值只能是专业关系中已存在的「专业名」,或NULL。
示例2:课程关系(课程号,课程名,先修课号),「先修课号」是外码,引用本关系的「课程号」,其值只能是课程关系中已存在的课程号,或NULL(无先修课)。

3. 用户定义的完整性(User-Defined Integrity)

规则:针对具体应用场景设定的语义约束,是对实体/参照完整性的补充。
常见示例

  • 属性非空:学生姓名不能取空值;
  • 取值范围:学生GPA$\in[0,4]$(或$[0,5]$);
  • 格式约束:手机号为11位数字、邮箱含@符号。

四、关系代数

关系代数是对关系进行操作的集合运算,运算对象是关系,运算结果仍为关系,分为传统集合运算专门关系运算两类,是期末计算/简答的核心考点。

1. 传统集合运算(基于集合论,要求操作关系目数相同、属性域可比

设关系$R$和$S$为同目关系,元组分别为$t$,核心运算包括并、差、交、笛卡尔积,符号及规则如下:

(1)并(Union):$R \cup S$

定义:由属于$R$属于$S$的所有元组组成,自动去重
$$R \cup S = {t \mid t \in R \lor t \in S}$$

(2)差(Difference):$R - S$

定义:由属于$R$但不属于$S$的所有元组组成。
$$R - S = {t \mid t \in R \land t \notin S}$$

(3)交(Intersection):$R \cap S$

定义:由既属于$R$属于$S$的所有元组组成,可由差运算推导:$R \cap S = R - (R - S)$。
$$R \cap S = {t \mid t \in R \land t \in S}$$

(4)笛卡尔积:$R \times S$

定义:若$R$为$n$目关系,$S$为$m$目关系,则$R \times S$为$n+m$目关系,元组为$R$的元组与$S$的元组的所有组合。
$$R \times S = {(t_r,t_s) \mid t_r \in R \land t_s \in S}$$
:若$R$和$S$有同名属性,需用「关系名.属性名」区分,如$R.B$、$S.B$。

2. 专门关系运算(针对关系的行/列定制化运算,核心:选择、投影、连接、除)

(1)选择(Selection):$\sigma_F®$

符号:$\sigma$(西格玛)为选择运算符,$F$为选择条件(逻辑表达式,如属性比较、逻辑与/或/非),$R$为操作关系。
定义:从关系$R$中筛选出满足条件$F$的所有行列数不变,是行级运算
条件$F$的格式:属性名$\theta$ 常量,$\theta \in {>,\geq,<,\leq,=,\neq}$,多条件用$\land$(与)、$\lor$(或)连接。

示例:从学生关系$Student(SNO,SNAME,SSEX,SBIRTH,{SMAJOR})$中,选「专业为信息安全」的学生:
$$\sigma_{SMAJOR=‘信息安全’}(Student)$$
选「2001年及以后出生」的学生:
$$\sigma_{SBIRTH \geq ‘2001-01-01’}(Student)$$

(2)投影(Projection):$\Pi_A®$

符号:$\Pi$(派)为投影运算符,$A$为$R$中的属性列集合(单个/多个属性),$R$为操作关系。
定义:从关系$R$中选取指定属性列行数可能减少(自动去重重复行),是列级运算

示例:从学生关系$Student$中,查询学生姓名和主修专业:
$$\Pi_{SNAME,SMAJOR}(Student)$$
从学生关系$Student$中,查询所有主修专业(去重):
$$\Pi_{SMAJOR}(Student)$$

(3)连接(Join):$R \bowtie_{A\theta B} S$

符号:$\bowtie$为连接运算符,$A$为$R$的属性组,$B$为$S$的属性组($A,B$目数相同、域可比),$\theta$为比较运算符。
定义:先做$R \times S$,再从笛卡尔积中筛选出$A$属性与$B$属性满足$\theta$条件的元组,是行级运算,核心为「笛卡尔积+选择」。
$$R \bowtie_{A\theta B} S = \sigma_{A\theta B}(R \times S)$$

核心连接类型
① 等值连接:$R \bowtie_{A=B} S$

$\theta$为**等号$=$**的连接,即筛选$A=B$的元组,保留重复属性列

② 自然连接:$R \bowtie S$

特殊的等值连接,满足两个条件:

  1. 连接条件为所有同名属性组等值
  2. 结果中去掉重复的属性列(仅保留一个同名属性)。
    :自然连接是期末最常考的连接类型!
③ 悬浮元组(Dangling Tuple)

自然连接时,关系$R/S$中没有在同名属性上找到匹配值的元组,会被舍弃,这类元组称为悬浮元组。

④ 外连接(Outer Join)

保留悬浮元组的自然连接,悬浮元组的未匹配属性列填充空值(NULL),分为3类:

  • 左外连接:$R \bowtie_{左} S$,保留**左关系$R$**的悬浮元组;
  • 右外连接:$R \bowtie_{右} S$,保留**右关系$S$**的悬浮元组;
  • 全外连接:$R \bowtie_{全} S$,保留$R$和$S$的所有悬浮元组。

(4)除(Division):$R \div S$

定义:设$R$为$n$目关系,$S$为$m$目关系($n>m\geq1$),$R \div S$的结果为$n-m$目关系,包含$R$中与$S$的所有元组组合后均在$R$中的元组,是行+列级运算,为最难考点,按步骤计算即可。

除运算计算步骤(核心:找像集)
  1. 设$R$的属性分为「公共属性(与$S$同名)」和「独有属性$X$」;
  2. 对$R$按独有属性$X$分组,求每个$X$值对应的公共属性的像集(即该$X$下所有公共属性的取值组合);
  3. 求$S$的公共属性的投影($\Pi_{公共属性}(S)$);
  4. 筛选出像集包含$S$的公共属性投影的$X$值,这些$X$值组成$R \div S$的结果。

核心公式
$$R \div S = {t[X] \mid t \in R \land \Pi_Y(S) \subseteq Z_X}$$
其中,$X$为$R$的独有属性,$Y$为$S$的所有属性,$Z_X$为$X$在$R$中的像集。

示例:$R(A,B,C)$,$S(B,C,D)$,公共属性为$B,C$,$R$的独有属性为$A$。
① 按$A$分组,求每个$A$对应的$(B,C)$像集;
② 求$S$在$(B,C)$上的投影:$\Pi_{B,C}(S)$;
③ 若某$A$的像集包含$\Pi_{B,C}(S)$,则该$A$属于$R \div S$的结果。