关系模型基础:基本概念、完整性与关系代数
关系模型基础:基本概念、完整性与关系代数
一、课程考点总览
- 考查形式:关系基本概念、关系完整性以选填为主;关系代数为高频考点,选填+简答/计算均会涉及
- 核心框架:关系模型基于集合代数,核心围绕「关系概念+完整性约束+关系代数运算」展开
二、关系的基本概念
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条性质
- 列同质:每一列的分量来自同一域,数据类型一致;
- 列可同域:不同列可出自同一个域,需用不同属性名区分;
- 列序无关:列的排列顺序不影响关系的含义,可任意调整;
- 候选码唯一:任意两个元组的候选码值不能重复;
- 行序无关:行的排列顺序不影响关系的含义,可任意交换;
- 分量原子性:每个分量是不可分的数据项,不允许「表中有表」(满足第一范式)。
三、关系的完整性约束
关系完整性是对关系的数据约束规则,保证数据的正确性、一致性和有效性,共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$的取值只能为两种情况:
- 取空值($F$的所有属性均为空);
- 等于被参照关系$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$
特殊的等值连接,满足两个条件:
- 连接条件为所有同名属性组等值;
- 结果中去掉重复的属性列(仅保留一个同名属性)。
注:自然连接是期末最常考的连接类型!
③ 悬浮元组(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$中的元组,是行+列级运算,为最难考点,按步骤计算即可。
除运算计算步骤(核心:找像集)
- 设$R$的属性分为「公共属性(与$S$同名)」和「独有属性$X$」;
- 对$R$按独有属性$X$分组,求每个$X$值对应的公共属性的像集(即该$X$下所有公共属性的取值组合);
- 求$S$的公共属性的投影($\Pi_{公共属性}(S)$);
- 筛选出像集包含$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$的结果。


