关系型数据库第二章笔记---关系模型以及常用关系代数

基本概念

关系的定义

定义2-1: 域

**域(**domain)是一组值的集合,同一个域中的所有值均应具有相同的数据类型

定义2-2: 笛卡尔积

域D1,D2,…,Dn上的笛卡儿积是一个集合: D1×D2×…×Dn={(d1,d2,…dn) | di∈Di,1≤i≤n} 其中允许Di=Dj且i≠j,我们将该集合中的每一个元素 (d1,d2,…dn)称为一个元组(tuple),元组中的每一个值di 称为一个分量(component),有n个分量的元组称为n元组

我们用|Di|表示域Di中值的个数,即Di的基数,设|Di|=mi, 则D1×D2×…×Dn的基数M为:M=Πmi,1≤i≤n。

定义2-3: 关系

D1×D2×…×Dn上的任意一个子集均是定义在域D1,D2,…Dn上的一个关系(relation),记为R。

  • 由n个域构成的关系通常称为n元关系,关系中的每个元素即是这个关系的元组。

  • 由于笛卡儿积集合即是一个二维表,所以关系自然也可以表示为二维表。

  • 表的每行是一个元组,每列对应一个域。

  • 由于无限关系无法在数据库中表示,因此关系模型中的关系也特指有限的元组集合。

定义2-4: 属性

为关系的每个列所起的名字称为关系的属性(attribute),一般可表示为A,B,C…。

n目关系必有n个属性,表的任意一列对应一个属性,属性的名称称为“属性(列)名”,具体元组的属性取值称为“属性(列)值”

定义2-5: 超键

如果一个关系中的某个属性或属性集能够唯一的确定一个元组,则称该属性(集)是这个关系上的超键(Super key,SK)

定义2-6: 候选键

如果将超键中的任一属性去掉后剩余的属性集不能唯一标识一个元组,则称该属性集是关系上的候选键(Candidate key,CK)

定义2-7: 主键

若一个关系中有多个候选键,则可从中选择一个作为关系的主键(Primary key,PK)

一般情况下,如不加特别说明,键即指主键。

定义2-8: 外键

如果关系R中的某个属性集是另外一个关系S的候选键,那么称该属性集为关系R上的(来自S的)外键(foreign key,FK)

具有一定联系的不同关系间依靠外键建立彼此的关联,这是关系模型数据结构的重要组成部分。

关系的特性

  • 列是同质:即每一列中的分量来自同一域,是同一类型的数据

  • 不同的列可来自同一个域,称其中的每一列为一个属性

  • 列于行的位置都是可以互换的

  • 理论上,关系的任意两个元组不能完全相同(即两个援助的每个分量都相同)

  • 属性不可再分特性:又被称为第一范式

    image-20210328095100415.png

关系模式与关系

关系可看作是关系模式在某一时刻的状态或内容,即,关系模式是型,关系是值

关系是“动态的”,关系模式是“静态的”

关系完整性

定义

关系模型的完整性(integrity)规则是为了保证数据的正确性、有效性和相容性而在关系上施加的约束条件。

分类

  • 实体完整性
  • 参照完整性
  • 用户自定义完整性
实体完整性

关系的主码中的属性值不能为空值

空值:不知道或无意义的值

意义:关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的。

参照完整性

如果关系R1的外码Fk与关系R2的主码Pk相对应,则R1中的每一个元组的Fk值或者等于R2 中某个元组的Pk 值,或者为空值

一个表中的外键要么为另一张表的主键,要么为空值

用户自定义完整性

用户针对具体的应用环境定义的完整性约束条件

即对表中属性做一些限制,如S#要求是10位整数,其中前四位为年度,当前年度与他们的差必须在4以内

image-20210328095517999.png

DBMS对关系完整性的支持

实体完整性和参照完整性由DBMS系统自动支持

DBMS系统通常提供了如下机制:

(1)它使用户可以自行定义有关的完整性约束条件

(2)当有更新操作发生时,DBMS将自动按照完整性约束条件检验更新操作的正确性,即是否符合用户自定义的完整性

关系模型

关系模型(Relation Model)由一组相互联系的关系组成,是用二维表结构来表示实体与实体间的联系的模型

关系模型由关系数据结构关系操作集合关系完整性约束三部分组成,如图所示:

image-20210328095721219.png

关系操作集合是指关系模型提供的一组完备的高级关系运算,这些关系运算支持对数据库的各种操作。关系运算通常分成关系代数和关系演算。

image-20210328095757979.png

关系模型的优点

  • 单一的数据结构形式,具有高度的简明性和精确性。
  • 逻辑结构和相应的操作完全独立于数据存储方式,具有高度的数据独立性。
  • 关系模型使数据库的研究建立在比较坚实的数学基础上。
  • 关系数据库语言与一阶谓词逻辑的固有内在联系,为以关系数据库为基础的推理系统和知识库系统的研究提供了方便。

关系代数

基本内容

组成

关系代数中运算对象是关系,运算结果也是关系,运算符包括四类:

(1) 集合运算符:∪(并),-(差),∩(交),×(广义笛卡尔积)

(2) 专门的关系运算符:σ(选择),π(投影),∞(连接),÷(除)

(3) 算术比较符:>(大于),≥(大于等于),<(小于),≤(小于等于),=(等于),≠(不等于)

(4) 逻辑运算符:∧(与),∨(或),┐(非)

记号

  • 给定关系模式R(A1 , A2 , … , An),设R是它的一个具体的关系, t ∈ R t\in R tR是关系的一个元组

  • 分量:
    设t ∈ \in R,则t[Ai]表示元组t中相应于属性Ai的一个分量

  • 属性列:
    Ai={Ai1, Ai2, … ,Aik} ⊆ \subseteq {A1, A2, … ,An},称A为属性列
    A ‾ \overline{A} A表示{A1 ,A2 , … ,An}中去掉A后剩余的属性组
    t[Ai] = ( t[Ai1], t[Ai2], … , t[Aik])

选择

定义

在关系R中选择满足给定条件的元组(从行的角度): σ C ( R ) = { t ∣ t ∈ R , C ( t ) = t r u e } \sigma_C(R)=\{t|t\in R,C(t)=true\} σC(R)={ttR,C(t)=true} C是选择的条件, ∀ t ∈ R \forall t\in R tR,C(t)要么为真,要么为假
F的形式:由逻辑运算符连接算术表达式而成
逻辑表达式:KaTeX parse error: Undefined control sequence: \and at position 1: \̲a̲n̲d̲ ̲,\or ,\not

算术表达式: X θ Y X \theta Y XθY
X,Y是属性名、常量、或简单函数
θ \theta θ是比较算符, θ ∈ { > , ≥ , < , ≤ , = , ≠ } \theta \in \{>,\ge,<,\le,=,\ne\} θ{>,,<,,=,=}

例子

image-20210328101202621.png

查询年龄不小于20的男生

image-20210328101246291.png

投影

定义

从关系R中取若干列组成新的关系(从列的角度): ∏ A ( R ) = { t [ A ] ∣ t ∈ R } , A ⊆ R \prod_A(R)=\{t[A]|t\in R\},A\subseteq R A(R)={t[A]tR},AR

投影的结果中要去掉相同的行

例子

image-20210328101444627.png

列出所有学生的姓名和年龄: ∏ S N , A G E ( S ) \prod_{SN,AGE}(S) SN,AGE(S)

查询001号学生所选修的课程号: ∏ C # ( σ S # = ′ 00 1 ′ ( S C ) ) \prod_{C\#}(\sigma_{S\#='001'}(SC)) C#(σS#=001(SC))

并运算

定义

所有至少出现在两个关系中之一的元组集合: KaTeX parse error: Undefined control sequence: \or at position 22: …S=\{t | t\in R \̲o̲r̲ ̲t\in S\}

image-20210328101747587.png

两个关系R和S若进行并运算,则它们必须是相容的:

  • 关系R和S必须是同元的,即它们的属性数目必须相同
  • ∀ i \forall i i,R的第i个属性的域必须和S的第i个属性的域相同

例子

image-20210328101846165.png

查询选修了001号或002号课程的学生号:

方案一: KaTeX parse error: Undefined control sequence: \or at position 30: …igma_{C\#='001'\̲o̲r̲ ̲C\#='002'}(SC))

方案二: ∏ S # ( σ C # = ′ 00 1 ′ ( S C ) ) ∪ ∏ C # = ′ 00 2 ′ ( S C ) \prod_{S\#}(\sigma_{C\#='001'}(SC))\cup \prod_{C\#='002'(SC)} S#(σC#=001(SC))C#=002(SC)

差运算

定义

所有出现在一个关系而不在另一关系中的元组集合: KaTeX parse error: Undefined control sequence: \and at position 16: R-S=\{t|t\in R \̲a̲n̲d̲ ̲t\notin S\}

注:R和S必须是相容的

image-20210328121258374.png

例子

image-20210328121314514.png

查询选修了001号而没有选修002号课程的学生学号

方案一: KaTeX parse error: Undefined control sequence: \and at position 30: …igma_{C\#='001'\̲a̲n̲d̲ ̲C\#<>'002'}(SC)…

方案二: ∏ S # ( σ C # = ′ 00 1 ′ ( S C ) ) − ∏ S # ( σ C # = ′ 00 2 ′ ( S C ) ) \prod_{S\#}(\sigma_{C\#='001'}(SC))-\prod_{S\#}(\sigma_{C\#='002'}(SC)) S#(σC#=001(SC))S#(σC#=002(SC))

交运算

定义

所有同时出现在两个关系中的元组集: KaTeX parse error: Undefined control sequence: \and at position 20: …p S=\{t|t\in R \̲a̲n̲d̲ ̲t\in S\}

image-20210328122347867.png

交运算可以通过差运算重写: R ∩ S = R − ( R − S ) = S − ( S − R ) R\cap S=R-(R-S)=S-(S-R) RS=R(RS)=S(SR)

例子

image-20210328122444556.png

查询同时选修了001号和002好课程的学生号

方案一: KaTeX parse error: Undefined control sequence: \and at position 30: …igma_{C\#='001'\̲a̲n̲d̲ ̲C\#='002'}(SC))

方案二: ∏ S # ( σ C # = ′ 00 1 ′ ( S C ) ) ∩ ∏ S # ( σ C # = ′ 00 2 ′ ( S C ) ) \prod_{S\#}(\sigma_{C\#='001'}(SC))\cap\prod_{S\#}(\sigma_{C\#='002'}(SC)) S#(σC#=001(SC))S#(σC#=002(SC))

广义笛卡尔积

定义

元组的连串:

r = ( r 1 , … , r m ) r=(r_1,\dots,r_m) r=(r1,,rm), s = ( s 1 , … , s n ) s=(s_1,\dots,s_n) s=(s1,,sn),则定义r与s的连串为: r s ^ = ( r 1 , … , r m , s 1 , … , s n ) \widehat{rs}=(r_1,\dots,r_m,s_1,\dots,s_n) rs =(r1,,rm,s1,,sn)

笛卡尔积:

两个关系R,S,其度分别为m,n,则它们的笛卡尔积是所有这样的元组集合:元组的前m个分量是R中的一个元组,后n个分量是S中的一个元组: KaTeX parse error: Undefined control sequence: \and at position 33: …hat{rs}|r\in R \̲a̲n̲d̲ ̲s\in S\}

例子

image-20210328123215870.png

θ \theta θ连接

定义

从两个关系的广义笛卡儿积中选取给定属性间满足一定条件的元组

image-20210328123430276.png

A,B为R和S上度数相等且可比的属性列, θ \theta θ为算术比较符,为等号时称为等值连接

例子

image-20210328123513420.png

查询数学成绩比王红同学高的学生:

image-20210328123542164.png

自然连接

定义

从两个关系的广义笛卡尔积中选取在相同属性列B上取值相等的元组,并去掉重复的行

image-20210328123749412.png

自然连接与等值连接的不同

  • 自然连接中相等的风量必须是相同的属性组,并且要在结果中去掉重复的属性,而等值连接不用

当R与S无相同属性时, R ⋈ S = R × S R\Join S=R\times S RS=R×S

例子

image-20210328123944726.png

查询001号学生所在系的名称: ∏ D N ( σ S # = ′ 00 1 ′ ( S ⋈ D E P T ) ) \prod_{DN}(\sigma_{S\#='001'}(S\Join DEPT)) DN(σS#=001(SDEPT))

外连接

定义

为避免自然连接时因失配而发生的信息丢失,可以假定往参与连接的一方表中附加一个取值全为空值的行,它和参与连接的另一方表中的任何一个未匹配上的元组都能匹配,称之为外连接: 外连接 = 自然连接+ 失配的元组

外连接的形式:左外连接,右外连接,全外连接

⊐ ⋈ \sqsupset \bowtie :左外连接 = 自然连接+左侧表中失配的元组

⋈ ⊏ \bowtie\sqsubset :右外连接 = 自然连接+右侧表中失配的元组

⊐ ⋈ ⊏ \sqsupset \bowtie\sqsubset :全外连接 = 自然连接+两侧表中失配的元组

例子

左外连接

image-20210328124555513.png

右外连接

image-20210328124611847.png

全外连接

image-20210328124624738.png

外连接

image-20210328124658063.png

半连接

定义

R和S的半联接是将其自然联接的结果在R的属性集上投影,可以表示为:

image-20210328124749738.png

半连接不具有交换率

image-20210328124825780.png

例子

image-20210328124932099.png

除运算

定义

象集:

关系R(X , Z), X, Z是属性组,x是X上的取值,定义x在R中的象集为: KaTeX parse error: Undefined control sequence: \and at position 18: …x=\{t[Z]|t\in R\̲a̲n̲d̲ ̲t[X]=x\}

从R中选出在X上取值为x的元组,去掉X上的分量,只留Z上的分量

image-20210328125139955.png

除运算

image-20210328125238413.png

注:以上三种运算是等价的

R ÷ S 的 计 算 过 程 R\div S的计算过程 R÷S

  1. T = ∏ X ( R ) T=\prod_X(R) T=X(R)
  2. W = ( T × S ) − R W=(T\times S)-R W=(T×S)R
  3. V = ∏ x ( W ) V=\prod_x(W) V=x(W)
  4. R ÷ S = T − V R\div S=T-V R÷S=TV

例子

image-20210328125505429.png

同时选修了001号和002号课程的学生号

方案一:KaTeX parse error: Undefined control sequence: \or at position 42: …igma_{C\#='001'\̲o̲r̲ ̲C\#='002'}(C)

方案二:KaTeX parse error: Undefined control sequence: \or at position 37: …igma_{C\#='001'\̲o̲r̲ ̲C\#='002'}(C))

方案一是对的,方案二中SC表中还有grade属性,筛选出来的是选修了001和002号课程,并且成绩也一样的学生

关系型数据库查询实例

关系数据库模式

  • Student(S#,Class,Sname,Sex,Age)
  • Course(C#,Cname,Teacher)
  • SC(S#,C#,Grade)

例题

image-20210328130331852.png

image-20210328130405126.png

image-20210328130442815.png

关系演算

关系演算: 以数理逻辑中的谓词演算为基础

按谓词变元分类:

  1. 元组关系演算: 以元组变量作为谓词变元的基本对象
  2. 域关系演算:以域变量作为谓词变元的基本对象

元组关系演算

在元组关系演算(Tuple Relational Calculus)中,元组关系演算表达式简称为元组表达式,其一般形式为: { t ∣ P ( t ) } \{t | P(t)\} {tP(t)}

其中:
t是元组变量,表示一个元数固定的元组
P是公式,在数理逻辑中也称为谓词,也就是计算机语言中的条件表达式
{ t ∣ P ( t ) } \{ t | P(t)\} {tPt}表示满足公式P的所有元组t的集合

例子

image-20210328131332836.png

image-20210328131351927.png

image-20210328131448951.png

域关系演算

域关系演算表达式的一般形式: { x 1 … x k ∣ P ( x 1 , … , x k ) } \{x_1…x_k | P(x_1,…,x_k)\} {x1xkP(x1xk)},其中 x 1 , … , x k x_1,…,x_k x1xk都是域变量, P ( x 1 , … , x k ) P(x_1,…,x_k) P(x1xk)是域关系演算公式,一般由原子公式构成

image-20210328131622590.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hydrion-Qlz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值