文章目录
- [XJTUSE DATABASE]——第二章 关系模型
- 一、基本概念
- 二、关系代数运算
- 关系代数基本操作
- 关系代数扩展操作
- 交Intersection
- θ \theta θ-连接( θ \theta θ-Join, theta-Join)
- 等值连接(Equi-Join)
- 自然连接
- 基本思路
- 关系代数复杂扩展操作
- 三、关系演算
- 四、习题解答和解析
- 五、补充习题
[XJTUSE DATABASE]——第二章 关系模型
一、基本概念
关系模型三要素
基本结构:关系/表
基本操作:Relation Operator
完整性约束:实体完整性、参照完整性和用户自定义的完整性
如何定义关系
1️⃣ 首先定义“列”的取值范围“域(Domain)”
集合中元素的个数称为域的基数(Cardinality)
不同的列可来自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
2️⃣ 再定义“元组”及所有可能组合成的元组:笛卡尔积
一组域D1 , D2 ,…, Dn的笛卡尔积为:
笛卡尔积的每个元素(d1 , d2 , … , dn)称作一个n元组(行)
若Di的基数为mi,则笛卡尔积的基数,即元组个数为$ m_1\times m_2\times …\times m_n$
3️⃣ 关系
一组域D1 , D2 ,…, Dn的笛卡尔积的子集。
笛卡尔积中具有某一方面意义的那些元组(行)被称作一个关系(Relation)。
由于关系的不同列可能来自同一个域,为区分,需要为每一列起一个名字,该名字即为属性名。
关系可用 R ( A 1 : D 1 , A 2 : D 2 , … , A n : D n ) R(A_1:D_1 , A_2:D_2 , … , A_n:D_n ) R(A1:D1,A2:D2,…,An:Dn)表示,可简记为 R ( A 1 , A 2 , … , A n ) R(A_1 , A_2 , … , A_n ) R(A1,A2,…,An),这种描述又被称为关系模式(Schema)或表标题(head)
例如下图的关系为3元(目)关系,描述为:
家庭(丈夫:男人,妻子:女人,子女:儿童)或家庭(丈夫,妻子, 子女)
重要概念
关系模式与关系
候选码(Candidate Key)/候选键
关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。
有时,关系中有很多组候选码
主码(Primary Key)/主键
主属性与非主属性
包含在任何一个候选码中的属性被称作主属性,而其他属性被称作非主属性
最简单的,候选码只包含一个属性
最极端的,所有属性构成这个关系的候选码,称为全码(All-Key)。
外码(Foreign Key)/外键
关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键。
例如“合同”关系中的客户号不是候选码,但却是外码。因它与“客户”关系中的候选码“客户号” 相对应。
两个关系通常是靠外码连接起来的。
关系模型中的完整性
实体完整性
关系的主码中的属性值不能为空值;
空值:不知道或无意义的值;
意义:关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的
参照完整性
如果关系R1的外码Fk与关系R2的主码Pk相对应,则R1中的每一个元组的Fk值或者等于R2 中某个元组的Pk 值,或者为空值。
意义:如果关系R1的某个元组t1参照了关系R2的某个元组t2,则t2必须存在
例如关系Student在D#上的取值有两种可能:
用户自定义完整性
用户针对具体的应用环境定义的完整性约束条件
如S#要求是10位整数,其中前四位为年度,当前年度与他们的差必须在4以内
二、关系代数运算
关系代数操作:集合操作和纯关系操作
某些关系代数操作,如并、差、交等,需满足“并相容性”
关系代数基本操作
并Union
定义:假设关系R和关系S是并相容的,则关系R与关系S的并运算结果也是一 个关系,记作:R ∪S, 它由或者出现在关系R中,或者出现在S中的元组构成。
数学描述: KaTeX parse error: Undefined control sequence: \or at position 24: …=\{ t | t\in R \̲o̲r̲ ̲t\in S \} ,其中t是元组
并运算是将两个关系的元组合并成一个关系,在合并时去掉重复的元组。
R ∪S 与 S ∪R 运算的结果是同一个关系
示例如下:查询或者参加体育队或者参加文艺队所有学生的信息
差Difference
定义:假设关系R 和关系S是并相容的,则关系R 与关系S 的差运算结果也是一个关系,记作:R - S, 它由出现在关系R中但不出现在关系S中的元组构成。
数学描述: KaTeX parse error: Undefined control sequence: \or at position 21: …=\{ t | t\in R \̲o̲r̲ ̲t\notin S \} ,其中t是元组
R - S 与 S - R 是不同的
示例:
广义笛卡尔积 Cartesian Product
定义:关系R (<a1 , a2, …, an >) 与关系S(<b1, b2, …, bm >) 的广义笛卡尔积 (简称广义积,或 积 或笛卡尔积) 运算结果也是一个关系,记作: R x S, 它由关系R中的元组与关系S的元组进行所有可能的拼接(或串接)构成。
数学描述:$ R \times S ={ <a_1 , a_2, …, a_n, b_1, b_2, …, b_m> | <a_1 , a_2, …, a_n > \in R \and <b_1, b_2, …, b_m> \in S }$
示例:
选择Select
定义:给定一个关系R, 同时给定一个选择的条件condition(简记con), 选择运算结果也是一个关系,记作 σ c o n ( R ) \sigma _{con}(R) σcon(R) , 它从关系R中选择出满足给定条件condition的元组构成。
数学描述:KaTeX parse error: Undefined control sequence: \and at position 29: …(R)=\{t|t\in R \̲a̲n̲d̲ ̲con(t)='true'\}
设 R ( A 1 , A 2 , … , A n ) R(A_1 ,A_2 , … ,A_n) R(A1,A2,…,An), t是R的元组, t 的分量记为 t [ A i ] , t[A_i], t[Ai], 或简写为Ai
条件con由逻辑运算符连接比较表达式组成
逻辑运算符:KaTeX parse error: Undefined control sequence: \and at position 1: \̲a̲n̲d̲\quad \or \quad… 或写为 and , or, not
比较表达式: X θ Y X \theta Y XθY, 其中X, Y 是t的分量、常量或简单函数, θ \theta θ是比较运算符, θ ∈ { > , ≥ , < , ≤ , = , ≠ } \theta \in\{ > , \ge , < , \le , = , ≠\} θ∈{>,≥,<,≤,=,=}
示例
投影Project
定义:给定一个关系R, 投影运算结果也是一个关系,记作 PA® , 它从关系R中选出属性包含在A中的列构成。
数学描述:$ \Pi_{A_{i1}, A_{i2}, … ,A_{ik}}® = { <t[A_{i1}], t[A_{i2}],…,t[A_{iK}]> | t\in R }$
设 R ( A 1 , A 2 , … , A n ) , A i 1 , A i 2 , … , A i k ⊆ A 1 , A 2 , … , A n R(A_1 ,A_2 , … ,A_n), \ { A_{i1}, A_{i2}, … ,A_{ik} } \subseteq { A1 ,A2 , … ,An } R(A1,A2,…,An), Ai1,Ai2,…,Aik⊆A1,A2,…,An
t [ A i ] t[A_i] t[Ai]表示元组t中相应于属性Ai的分量
投影运算可以对原关系的列在投影后重新排列
投影操作从给定关系中选出某些列组成新的关系, 而选择操作是从给定关系中选出某些行组成新的关系
示例
投影与选择一起使用
关系代数扩展操作
交Intersection
定义:假设关系R和关系S是并相容的,则关系R与关系S的交运算结果也是一个关系,记作:R ∩S, 它由同时出现在关系R和关系S中的元组构成。
数学描述:$ R\cap S ={ t | t\in R \and t\in S } $,其中t是元组
R∩S 和 S∩R 运算的结果是同一个关系
交运算可以通过差运算来实现:$R \cap S = R - (R - S) = S - (S - R) $
示例:
θ \theta θ-连接( θ \theta θ-Join, theta-Join)
定义:给定关系R和关系S, R与S的 θ \theta θ连接运算结果也是一个关系,记作 R ⋈ S A θ B \underset{A\theta B}{R\Join S} AθBR⋈S,它由关系R和关系S的笛卡尔积中, 选取R中属性A与S中属性B之间满足 θ \theta θ条件的元组构成。
数学描述
R
⋈
S
A
θ
B
=
σ
t
[
A
]
θ
s
[
B
]
(
R
×
S
)
\underset{A\theta B}{R\Join S}=\sigma_{t[A]\ \theta\ s[B]}(R\times S)
AθBR⋈S=σt[A] θ s[B](R×S)
示例


等值连接(Equi-Join)
定义:给定关系R和关系S, R与S的等值连接运算结果也是一个关系,记作 R ⋈ S A = B \underset{A= B}{R\Join S} A=BR⋈S ,它由关系R和关系S的笛卡尔积中选取R中属性A与S中属性B上值相等的元组所构成。
数学描述:
R
⋈
S
A
=
B
=
σ
t
[
A
]
=
s
[
B
]
(
R
×
S
)
\underset{A= B}{R\Join S}=\sigma_{t[A]\ =\ s[B]}(R\times S)
A=BR⋈S=σt[A] = s[B](R×S)
当
θ
\theta
θ-连接中运算符为“=”时,就是等值连接,等值连接是
θ
\theta
θ-连接的一个特例;
广义积的元组组合并不是都有意义的,另广义积的元组组合数目也非常庞大,因此采用 θ \theta θ-连接/等值连接运算可大幅度降低中间结果的保存量,提高速度。
自然连接
定义:给定关系R和关系S, R与S的自然连接运算结果也是一个关系,记作 R ⋈ S R\Join S R⋈S ,它由关系R和关系S的笛卡尔积中选取相同属性组B上值相等的元组所构成。
数学描述
R
⋈
S
=
σ
t
[
A
]
=
s
[
B
]
(
R
×
S
)
{R\Join S}=\sigma_{t[A]\ =\ s[B]}(R\times S)
R⋈S=σt[A] = s[B](R×S)
示例:


基本思路
3️⃣ 连接完后,可以继续使用选择、投影等运算,即所谓数据库的“选投联”操作。
关系代数复杂扩展操作
除
除法运算经常用于求解“查询… 全部的/所有的…”问题
前提条件:给定关系 R ( A 1 , A 2 , … , A m ) R(A_1 ,A_2 , … ,A_m) R(A1,A2,…,Am)为m度关系,关系 S ( B 1 , B 2 , … , B n ) S(B_1 ,B_2 , … ,B_n) S(B1,B2,…,Bn)为n度关系。如果可以进行关系R与关系S的除运算,当且仅当:属性集 { B 1 , B 2 , … , B n } \{ B_1 ,B_2 , … , B_n \} {B1,B2,…,Bn}是属性集 { A 1 , A 2 , … , A m } \{ A1 ,A2 , … ,Am \} {A1,A2,…,Am}的真子集,即m>n。
定义:关系R 和关系S的除运算结果也是一个关系,记作 R ÷ S R\div S R÷S,分两部分来定义。
1️⃣ 先定义 R ÷ S R\div S R÷S的结果应有哪些属性
设属性集 { C 1 , C 2 , … , C k } = { A 1 , A 2 , … , A m } – { B 1 , B 2 , … , B n } \{C_1,C_2, … ,C_k \} = \{A_1,A_2, … ,A_m \}\ – \ \{B_1,B_2, … ,B_n \} {C1,C2,…,Ck}={A1,A2,…,Am} – {B1,B2,…,Bn}, 则有k=n–m
则 R ÷ S R\div S R÷S结果关系是k度(m-n度)关系,由 { C 1 , C 2 , … , C k } \{C_1,C_2, … ,C_k \} {C1,C2,…,Ck}属性构成
2️⃣ 再定义 R ÷ S R\div S R÷S的元组怎样形成
再设关系 R ( < a 1 , … , a m > ) R (<a_1, …, a_m>) R(<a1,…,am>)和关系 S ( < b 1 , … , b n > ) S (<b_1, …, b_n >) S(<b1,…,bn>), 那么 R ÷ S R\div S R÷S结果关系为元组 < c 1 , … , c k > <c_1, …, c_k> <c1,…,ck>的集合,元组 < c 1 , … , c k > <c_1, …, c_k> <c1,…,ck>满足下述条件:
它与S中每一个元组 < b 1 , … , b n > <b_1, …, b_n > <b1,…,bn>组合形成的一个新元组都是R中的某一个元组 < a 1 , … , a m > <a_1, …, a_m> <a1,…,am> 。(其中,a1, …, am ,b1, …, bn, c1, …, ck分别是属性A1 , … ,Am,B1 , … ,Bn C1 , … ,Ck 的值)
数学描述
其实就是挑出R中含有S中属性全部值的的相关元组的投影
示例:



外连接
定义:两个关系R与S进行连接时,如果关系R(或S)中的元组在S(或R)中找不到相匹配的元组,则为了避免该元组信息丢失,从而将该元组与S(或R)中假定存在的全为空值的元组形成连接,放置在结果关系中,这种连接称之为外连接(Outer Join)。

三、关系演算
按照谓词变量的不同,可分为关系元组演算和关系域演算
关系元组演算
关系元组演算公式的基本形式:{ t | P(t) }
上式表示:所有使谓词 P 为真的元组 t 的集合
示例
1️⃣ 检索出年龄小于20岁并且是男同学的所有学生。
2️⃣ 再例如:检索出年龄小于20岁或者03系的所有男学生。
3️⃣ 在元组演算公式构造过程中,如果需要,可以使用括号,通过括号改变运算的优先次序,即:括号内的运算优先计算
检索出不是03系的所有学生
4️⃣ 检索不是(小于20岁的男同学)的所有同学
5️⃣ “检索出年龄不是最小的所有同学”
关系代数表达式
6️⃣ 检索软件学院的所有同学
7️⃣ 检索出比张三年龄小的所有同学
四个复杂例子
用元组演算公式实现关系代数
关系代数有五种基本操作:并、差、广义积、选择、投影操作,还有:交、theta-连接操作。
1️⃣ 并运算:KaTeX parse error: Undefined control sequence: \or at position 27: … \{ t | t\in R \̲o̲r̲ ̲t\in S \}
2️⃣ 差运算:KaTeX parse error: Undefined control sequence: \and at position 24: … \{ t | t\in R \̲a̲n̲d̲ ̲ ̲\neg t\in S \}
3️⃣ 交运算:KaTeX parse error: Undefined control sequence: \and at position 27: … \{ t | t\in R \̲a̲n̲d̲ ̲ ̲t\in S \}
4️⃣ 广义笛卡尔积 KaTeX parse error: Undefined control sequence: \and at position 72: …S)(t[A] = u[A] \̲a̲n̲d̲ ̲ ̲t[B] = s[B])\}
5️⃣ 选择运算: KaTeX parse error: Undefined control sequence: \and at position 33: …= { t | t\in R \̲a̲n̲d̲ ̲ ̲F(con) }
6️⃣ 投影运算:$ \Pi _A( R ) = { t[A] | t\in R }$
关系域演算
关系域演算公式的基本形式: { < x1 , x2 , … , xn > | P ( x1 , x2 , … , xn ) }
其中, xi 代表域变量或常量, P为以xi为变量的公式。
示例:
1️⃣ 检索出不是03系的所有学生
2️⃣ 检索不是(小于20岁的男同学)的所有同学的姓名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-arCgotes-1643162622251)(C:/Users/26969/AppData/Roaming/Typora/typora-user-images/image-20220126095128116.png)]
3️⃣ 检索成绩不及格的同学姓名、课程及其成绩

不产生无限关系和无穷验证的运算被称为是安全的
关系演算不一定是安全的