• 01 关系模型及其相关内容


    01 关系模型及其相关内容

    关系模型简述

    形象的说,一个关系就是一个Table。关系模型就是处理Table的,它由三个部分组成:

    • 描述DB各种数据基本结构形式Table/Relation
    • 描述Table与Table之间所可能发生的各种操作(关系运算)
    • 描述这些操作所应遵循的约束条件(完整性约束)

    关系模型的三个要素:

    • 基本结构:Relation/Table
    • 基本操作:关系运算(基本的:并、差、积、选择、投影;扩展的:交、连接、除。)
    • 完整性约束:实体完整性、参照完整性和用户自定义完整性。

    关系模型一般以集合为单位操作,非关系模型一般以记录为单位操作。

    关系的定义

    表(Table):

    • 首先定义“列”的取值范围是“域”。
    • 再定义行“元组”及所有可能组合成的元组:笛卡尔积(每个列的取值的组合)。

    关系:一组域的笛卡尔积的子集(有意义组合的子集)。笛卡尔积中具有某一方面意义的那些元组被称作一个关系(Relation)。由于关系的不同列可能来自同一个域,为区分,需要为每一列起一个属性名。

    关系的特性:

    • 列是同质的:即每一列中的分量来自同一个域,是统一类型的数据。
    • 不同的列可来自同一个域,称其中每一列为一个属性,不同的属性要给予不同的属性名。
    • 列位置互换性:区分那一列是靠列名。
    • 行位置互换性:区分哪一行是靠某一或某几列的值(关键字/键字/码字)。

    理论上,关系的任意两个元组不能完全相同(数学定义上的规范);现实应用中,表(Table)可能存在两个完全相同的元组。

    关系第一范式:属性不可再分(不允许复合属性和多值属性);

    候选码/候选键:关系中的一个属性组,其值能够唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。

    主码/主键:当有多个候选码时,可以选定一个作为主码。

    主属性与非主属性

    • 包含在任何一个候选码中的属性被称作为主属性,而其他属性被称作非主属性。
    • 最简单的,候选码只包含一个属性。
    • 最极端的,所有属性构成这个关系的候选码,称为全码。

    外码/外键

    • 关系R中的一个属性组,他不是R的候选码,但是它是另一个关系S的候选码相对应,则称这个属性组为R的外码或外键。
    • 两个关系通常是靠外码连接起来的。

    关系模型中的完整性

    实体完整性

    • 关系的主码中的属性值不能为空值;
    • 空值:不知道或无意义的值。

    参照完整性

    • 外码可以为空值;
    • 若非空值,则其值必须是另一个关系中主码的值,即保证连接的正确性。

    用户自定义完整性

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

    关系模型中的关系代数

    关系代数运算的特点

    基于集合,提供了一系列的关系代数操作:并、差、笛卡尔积(广义积)、选择、投影和更名等基本操作。

    以及交、连接和关系除等扩展操作,是一种集合思维的操作语言。

    关系代数操作以一个或多个关系位输入,结果是一个新的关系。

    用对关系的运算来表达查询,需要指明所用操作,具有一定的过程性。

    是一种抽象语言,是学习其他数据库语言,如SQL等的基础。

    关系代数操作:集合操作纯关系操作

    • 集合操作:并、交、差、笛卡尔积。
    • 纯关系操作:投影、选择、连接、除。

    关系代数的基本操作

    并相容性

    定义:参与运算的两个关系及其相关属性之间有一定的相对性、可比性或意义关联性。

    关系R和关系S存在相容,当且仅当:

    • 关系R和关系S的属性数目必须相同;
    • 对于任意i,关系R的第i个属性的域必须和关系S的第i个属性的域相同。

    并(Union)

    定义:假设关系R和关系S是相容的,则关系R与关系S的并运算结果也是一个关系,它是由或者出现在关系R中,或者出现在S中的元组构成。并运算是将两个关系的元组合并成一个关系,在合并时去掉重复的元组。

    差(Difference)

    定义:假设关系R和关系S是相容的,则关系R与关系S的差运算结果也是一个关系,它是由或者出现在关系R中但是不出现在S中的元组构成。差运算是不满足交换律的。

    广义笛卡尔积(Cartesian Product)

    定义:关系R与关系S的广义笛卡尔积运算的结果也是一个关系,它是由关系R中的元组与关系S的元组进行所有可能的拼接(或串接)构成。两个关系元组的组合。

    选择(Select)

    定义:给定一个关系R,同时给定一个选择的条件condition(简记con),选择运算结果也是一个关系,它从关系R中选择除满足给定条件condition的元组构成。

    选择操作从给定的关系中选出满足条件的行。

    注意条件符号的运算优先级。

    投影(Project)

    定义:给定一个关系R,投影运算结果是一个关系,它从关系R中选出属性包含在A中的列构成。

    关系代数的扩展操作

    交(Intersection)

    定义:假设关系R和关系S是并相容的,则关系R与关系S的交运算结果也是一个关系,它由同时出现在关系R和关系S中的元组构成。

    连接(Join)

    • Θ \Theta Θ - 连接( Θ \Theta Θ - Join)

    投影与选择操作只是对单个关系(表)进行操作,而实际应用中往往涉及多个表之间的操作,这就需要 Θ \Theta Θ - 连接操作。

    定义:给定关系R和关系S,R与S的 θ \theta θ连接运算结果也是一个关系,它由关系R和关系S的笛卡尔积中,选取R中属性A与S中属性B之间满足 θ \theta θ条件的元组组成。这里要求属性A和属性B具有可比性,其中 θ \theta θ为比较条件。

    • 等值连接(Equi-Join)

    定义:给定关系R和关系S,R与S的等值连接运算结果也是一个关系,它由关系R和关系S的笛卡尔积中,选取R中属性A与S中属性B上值相等的元组所构成。即当 Θ \Theta Θ - 连接中的规则为“=”时,就为等值连接。

    • 自然连接(Natural-Join)

    定义:给定关系R和关系S,R与S的自然连接运算结果也是一个关系,它由关系R和关系S的笛卡尔积中,选取R同属性组B上值相等的元组所构成。其本质上一种特殊的等值连接,连接后去除一组重复的属性。

    • 外连接(Outer-Join)

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

    外连接=自然连接(或 θ \theta θ连接)+=失配的元组(与空元组形成的连接)。

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

    • 左外连接=自然连接(或 θ \theta θ连接)+=左侧表中失配的元组。
    • 右外连接=自然连接(或 θ \theta θ连接)+=右侧表中失配的元组。
    • 全外连接=自然连接(或 θ \theta θ连接)+=两侧表中失配的元组。

    更名

    即将表的表名更改,通常使用在自连接操作中。

    除(Division)

    除法运算经常用于求解 “查询…全部的/所有的…” 问题。

    前提条件:给定关系R为n度关系与关系S为m度关系的除运算,当且仅当:S属性集是R属性集的真子集时,关系R才能与关系S进行除法运算,其运算结果也是一个关系,其结果分为两部分如下:

    • 属性:属性为关系R的属性去除关系S的属性。
    • 值:所得结果的关系与关系S的笛卡尔积的所有元组必须都能在关系R中找到。

    关系演算

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

    关系演算是描述关系运算的一种思维方式。

    SQL语言是继承了关系代数和关系演算各自的优点所形成的。

    按照谓词变量(操作对象)不同,可分为关系元组演算和关系域演算。

    关系元组演算

    基本形式: { t ∣ P ( t ) } \{t|P(t)\} {tP(t)} ,上式表示:所有使谓词P为真的元组t的集合。

    • t是元组变量;
    • t ∈ \in R表示元组t在关系R中;
    • t[A]表示元组t的分量,即t在属性A上的值;
    • P是谓词逻辑相似的公式,P(t)表示以元组t为变量的公式

    P(t)可以如下递归地进行定义:

    • 三种原子公式是公式

    (1) s ∈ R s\in R sR ;

    (2) s [ A ]    θ    c s[A]\;\theta\; c s[A]θc ;

    (3) s [ A ]    θ    u [ B ] s[A]\;\theta\; u[B] s[A]θu[B]

    • 如果P是公式,那么 ¬ P \lnot P ¬P 也是公式。
    • 如果 P 1 , P 2 P_1,P_2 P1,P2 是公式,则 KaTeX parse error: Undefined control sequence: \and at position 4: P_1\̲a̲n̲d̲ ̲P_2,P_1\or P_2 也是公式。
    • 如果P(t)是公式,R是关系,则 ∃ ( t ∈ R ) ( P ( t ) ) \exists(t\in R)(P(t)) (tR)(P(t)) ∀ ( t ∈ R ) ( P ( t ) ) \forall(t\in R)(P(t)) (tR)(P(t))也是公式

    元组演算公式与关系代数对比应用例子:

    题目:

    已知:学生关系:Student(S#, Sname, Sage, Ssex, Sclass)

    ​ 课程关系:Course(C#, Cname, Chours, Credit, Tname)

    ​ 选课关系:SC(S#, C#, Score)

    (1)求学过李明老师讲授所有课程地学生姓名(全都学过)

    π S n a m e ( π S n a m e , C # ( S ⋈ S C ⋈ C ) ÷ π C # ( σ T n a m e = " 李明 " ( C ) ) ) \pi_{Sname}(\pi_{Sname,C\#}(S \Join SC \Join C) \div \pi_{C\#}(\sigma_{Tname="李明"}(C))) πSname(πSname,C#(SSCC)÷πC#(σTname="李明"(C)))

    KaTeX parse error: Undefined control sequence: \and at position 35: …\forall (u\in C\̲a̲n̲d̲ ̲u[Tname]="李明")(…

    (2)求没学过李明老师讲授任意一课程地学生姓名(全没学过)

    π S n a m e − π S n a m e ( σ T n a m e = " 李明 " ( S ⋈ S C ⋈ C ) ) \pi_{Sname}-\pi_{Sname}(\sigma_{Tname="李明"}(S\Join SC\Join C)) πSnameπSname(σTname="李明"(SSCC))

    KaTeX parse error: Undefined control sequence: \and at position 18: …t[Sname]|t\in S\̲a̲n̲d̲\;\forall(u\in …

    (3)求至少学过一门李明老师讲授课程地学生姓名(至少学过一门)

    π S n a m e ( σ T n a m e = " 李明 " ( S ⋈ S C ⋈ C ) ) \pi_{Sname}(\sigma_{Tname="李明"}(S\Join SC\Join C)) πSname(σTname="李明"(SSCC))

    KaTeX parse error: Undefined control sequence: \and at position 18: …t[Sname]|t\in S\̲a̲n̲d̲\exists(u\in SC…

    (4)求至少有一门李明老师坚守课程没有学过的学生姓名(至少有一门没学过)

    π S n a m e − π S n a m e ( π S n a m e , C # ( S ⋈ S C ⋈ C ) ÷ π C # ( σ T n a m e = " 李明 " ( C ) ) ) \pi_{Sname}-\pi_{Sname}(\pi_{Sname,C\#}(S \Join SC \Join C) \div \pi_{C\#}(\sigma_{Tname="李明"}(C))) πSnameπSname(πSname,C#(SSCC)÷πC#(σTname="李明"(C)))

    KaTeX parse error: Undefined control sequence: \and at position 36: …exists (u\in C\̲a̲n̲d̲ ̲u[Tname]="李明")(…

    关系域演算

    公式基本形式: { < x 1 , x 2 , . . . , x n > ∣ P ( x 1 , x 2 , . . . , x n ) } \{|P(x_1,x_2,...,x_n)\} {<x1,x2,...,xn>P(x1,x2,...,xn)} 其中, x i x_i xi 代表域变量或常量, P P P 为以 x i x_i xi 为变量的公式。

    P(t)可以如下递归地进行定义:

    • 三种原子公式是公式

    (1) < x 1 , x 2 , . . . , x n > ∈ R \in R <x1,x2,...,xn>∈R,由域变量构成的元组属于关系R ;

    (2) x    θ    c x\;\theta\; c xθc ,域变量x与常量c之间满足比较关系 θ \theta θ;

    (3) x    θ    y x\;\theta\; y xθy ,域变量x与域变量y之间满足比较关系 θ \theta θ

    • 如果P是公式,那么 ¬ P \lnot P ¬P 也是公式。
    • 如果 P 1 , P 2 P_1,P_2 P1,P2 是公式,则 KaTeX parse error: Undefined control sequence: \and at position 5: P_1 \̲a̲n̲d̲ ̲P_2,P_1 \or P_2 也是公式。
    • 如果P(t)是公式,x是域变量,则 ∃ ( x ) ( P ( x ) ) \exists(x)(P(x)) (x)(P(x)) ∀ ( x ) ( P ( x ) ) \forall(x)(P(x)) (x)(P(x))也是公式

    域演算语言QBE

    QBE:Query By Example

    特点:操作独特,基于屏幕表格的查询语言,不用书写复杂公式,只需要将条件填在表格中即可。是一种高度非过程化的查询语言。

    QBE操作框架由四个部分构成

    关系名区:用于书写待查询的关系名。

    属性名区:用于显示对应欢喜名区关系的所有属性名。

    操作命令区:用于书写查询操作的命令。

    查询条件区:用于书写查询条件。

    关系演算的安全性

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

    • 关系代数是一种集合运算,是安全的。(集合本身是有限的,有限元素集合的有限次运算仍旧是有限的。)
    • 关系演算不一定是安全的。(例如:KaTeX parse error: Undefined control sequence: \or at position 29: …))\}\;,\{t|R(t)\̲o̲r̲ ̲t[2]>3 \} 可能表示无限关系,R(t) 是有限的,但是不在 R(t) 中的袁术就可能使无限的,后例中的 t[2]>3 是无限的。再例如验证可能导致无限验证。

    所以需要对关系演算世家约束条件,即任何公式都在一个集合范围内操作,而不是无限范围内操作,才能保证其安全性。

    • 安全约束有限集合DOM

    D O M ( ψ ) DOM(\psi) DOM(ψ) 是一个有限集合,其中的每个符号要么是 ψ \psi ψ 中明显出现的符号,要么是出现在 ψ \psi ψ 中的某个关系R的某个元组的分量。DOM主要用于约束 ψ \psi ψ 中一些谓词的计算范围,它不必是最小集合。

  • 相关阅读:
    算法刷题-哈希表
    完全免费的PDF软件
    电脑硬盘分区软件哪个好用,无损分区软件哪个好
    go 稀疏数组
    01、用三种方法实现 DIV + CSS 进度条的展示(静态以及动态)
    postgres源码解析38 表创建执行全流程梳理--2
    算法分析与设计CH25:回溯算法Back-Tracking——N皇后问题
    【准研一学习】狂肝15小时整理的Verilog语言入门知识
    Opengl之立方体贴图
    web前端期末大作业——HTML+CSS+JavaScript仿王者荣耀游戏网站设计与制作
  • 原文地址:https://blog.csdn.net/baidu_39049318/article/details/126244664