【吐血整理】数据库重点知识总结【2】

本文是数据库专栏【吐血整理】系列的第二篇,以介绍关系数据库为主,欢迎阅读~

先让你康康我的组成

  • 一、关系数据结构及形式化定义
    • 1. 关系
    • 2. 关系模式
    • 3. 关系数据库
    • 4. 关系模型的存储结构
  • 二、关系操作
    • 基本的关系操作
    • 关系数据库语言的分类
  • 三、关系的完整性
    • 1. 实体完整性
    • 2. 参照完整性
    • 3. 用户定义的完整性
  • 四、关系代数
    • 传统的集合运算
    • 专门的关系运算
    • 小拓展
  • 五、关系代数练习


一、关系数据结构及形式化定义

1. 关系

关系: 单一的数据结构
现实世界的实体及实体间的各种联系均用关系来表示
二维表: 逻辑结构
从用户角度,关系模型中数据的逻辑结构是一张二维表

①域(Domain)
域(Domain): 域是一组具有相同数据类型的值的集合。
例如:整数、所有球类的集合,指定长度的字符串集合、{‘男人’,‘女人’} …

②笛卡尔积(Cartesian Product)
笛卡尔积(Cartesian Product):
给定一组域D1,D2,…,Dn允许其中某些域是相同的
D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn = {(d1,d2,…,dn)| d   i   ∈ D   i   d~i~\in D~i~ d i D i ,i=1,2,…,n}

总结一下: 笛卡尔积就是所有域的所有取值的一个组合(即全集),不能重复

举个栗子哈:
假设集合A={D,B},集合B={1,2,3},两个集合的笛卡尔积为:
AXB={(D,1),(D,2),(D,3),(B,1),(B,2),(B,3)}

  • 不会写下标和上标的小伙伴注意啦!
    下标这样写:~下标~ 效果:下标
    上标这样写:^上标^ 效果:上标
    咳咳可爱的人是不会白嫖的~(暗示点赞关注!)

· 元组(Tuple):
笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组
例如:在AXB={(D,1),(D,2),(D,3),(B,1),(B,2),(B,3)}中,每一个(D,1),(D,2)… 都是2元组
· 分量(Component):
笛卡尔积元素(d1,d2,…,dn)中的每一个值 di 叫作一个分量
例如:刚刚的例子中 D,B,1,2,3 都是分量
· 基数(Cardinal number):
若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1XD2X…XDn的基数M为:

M = ∏ i = i n m i M=\prod ^{n}_{i=i}m_{i} M=i=inmi (即基数的累乘)

可理解为:基数就是集合中的元素的个数
例如:集合A={D,B}基数为2,集合B={1,2,3}基数为3,AXB={(D,1),(D,2),(D,3),(B,1),(B,2),(B,3)}的基数为2×3=6

③关系(Relation)
1) 关系
D1XD2X…XDn子集 叫作在域D1,D2,…,Dn上的关系,表示为:
R(D1,D2,…,Dn
R关系名n 是关系的目或度
例如:COUPLE(BOY,GIRL),R=COUPLE ,n=2
2)关系的表示
关系是一个二维表
表的每行对应一个元组,表的每列对应一个属性
3)码(Key)

  • 候选码:
    若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
    简单的情况:候选码只包含一个属性
    最极端的情况:所有属性组是候选码,称为全码
  • 主码(PK):
    若一个关系有多个候选码,则选定其中一个为主码(一般用下划线来表示该候选码为主码)
  • 主属性:
    候选码的诸属性称为主属性。
    不包含在任何侯选码中的属性称为非主属性或非码属性

值得注意的是: D1,D2,…,Dn笛卡尔积(全集) 的某个子集(即关系) 才 有实际含义。

三类关系:
· 基本关系(基本表或基表)
实际存在的表,是实际存储数据的逻辑表示
· 查询表
查询结果对应的表(暂存在内存)
· 视图表
由基本表或其他视图表导出的表,是虚表不对应实际存储的数据
基本关系的性质
① 列是同质的
② 不同的列可出自同一个域

其中的每一列称为一个属性
不同的属性要给予不同的属性名

③ 列的顺序无所谓,列的次序可以任意交换
④ 任意两个元组的候选码不能相同
⑤ 行的顺序无所谓,行的次序可以任意交换
⑥ 分量必须取原子值,这是规范条件中最基本的一条

2. 关系模式

关系模式------------型
· 对关系的描述
· 静态的、稳定的

关系------------------值
· 关系模式在某一时刻的状态或内容
· 动态的、不断变化的

  • 关系模式是对关系的描述,可以形式化地表示为:
    R(U,D,DOM,F)
    R: 关系名
    U:组成该关系的属性名集合
    D:U中属性所来自的域
    DOM:属性向域的映象的集合
    F:属性间数据的依赖关系的集合

举个栗子:
篮球(BASKETBALL)和足球(FOOTBALL)出自同一个域——球(BALL)

在模式中定义属性向域的映像,说明它们分别出自哪个域:
DOM(BASKETBALL)
= DOM(FOOTBALL)
= BALL

关系模式通常可以简记为:
R (U)R (A1,A2,…,An)

  • R: 关系名
  • A1,A2,…,An : 属性名(U是属性名的集合)

关系模式和关系往往笼统称为关系,通过上下文加以区别

3. 关系数据库

在一个给定的应用领域中,所有关系的集合构成一个关系数据库

关系数据库的
· 关系数据库模式,是对关系数据库的描述

关系数据库的
· 关系模式在某一时刻对应的关系的集合,通常称为关系数据库

4. 关系模型的存储结构

关系数据库的物理组织

  • 有的RDBMS中一个表对应一个操作系统文件,将物理数据组织交给操作系统完成
  • 有的RDBMS从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构,并进行存储管理
    ps:关系数据库管理系统(Relational Database Management System:RDBMS)

二、关系操作

基本的关系操作

查询:
选择、投影、连接、除、并、差、交、笛卡尔积
(选择、投影、并、差、笛卡尔基是5种基本操作,下文的关系代数部分详细讲解
更新:插入、删除、修改

关系数据库语言的分类

关系代数语言

关系演算语言(元组关系演算语言和域关系演算语言)

具有关系代数和关系演算双重特点的语言
代表:SQL(Structured Query Language)


三、关系的完整性

1. 实体完整性

实体完整性规则(Entity Integrity)
· 若属性A是基本关系R的主属性,则属性A不能取空值
ps:空值就是“不知道”或“不存在”或“无意义”的值

比如:选修课(学号,课程号,成绩)
“学号、课程号”为主码
“学号”和“课程号”两个属性都不能取空值

可以简单记忆为:主属性不能为空

2. 参照完整性

关系间的引用
在关系模型中实体及实体间的联系都是用关系来描述
比如:学生实体、专业实体(主码用下划线表示)
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
这个例子中: 学生关系引用了专业关系的主码 “专业号”
学生关系中的 “专业号”值必须是 确实存在的专业的专业号

外码(Foreign Key)
F是基本关系R一个或一组属性,但不是关系R的码(ps:码可唯一确定一个元组)。如果F与基本关系S的主码Ks相对应,则称F是R的外码
· 基本关系R称为参照关系(Referencing Relation)
· 基本关系S称为被参照关系(Referenced Relation)
咱通过例子来理解一下:
【吐血整理】数据库重点知识总结【2】_第1张图片
“专业号”属性F是学生关系的外码
专业关系S被参照关系,学生关系R参照关系

参照完整性规则
若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks 相对应,则对于R中每个元组在F上的值必须为:

  • 要么取空值F的每个属性值均为空值)
  • 要么等于S中某个元组的主码值

简单记忆:外码要么为空,要么源自于被参照关系的主码

3. 用户定义的完整性

针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需应用程序承担这一功能。
比如: 课程(课程号,课程名,学分)
· “课程号”属性必须取唯一值
· 非主属性“课程名”不能取空值
· “学分”属性只能取值{0.5,1.0,1.5,2.0,2.5,3.0}


四、关系代数

关系代数:一种抽象的查询语言,用对关系的运算来表达查询。
【吐血整理】数据库重点知识总结【2】_第2张图片

传统的集合运算

R∪S R - S R ∩ S 如下图所示:
【吐血整理】数据库重点知识总结【2】_第3张图片
【吐血整理】数据库重点知识总结【2】_第4张图片
笛卡尔积(Cartesian Product)
严格地讲应该是广义的笛卡尔积
R: n目关系,k1 个元组(可理解为R有n列,k1
S: m目关系,k2 个元组(可理解为S有m列,k2

R X S

  • 列:(n+m)列元组的集合
    元组的前n列是关系R的一个元组
    后m列是关系S的一个元组
  • 行: k1 X k2元组(基数)
  • 即相当于用R的每一行去和S的每一行“拼”起来,看下图可形象理解

如图所示(3+3=6列,3*3=9行):
【吐血整理】数据库重点知识总结【2】_第5张图片
【吐血整理】数据库重点知识总结【2】_第6张图片

专门的关系运算

1. 选择(Selection)σ
选择 运算符的含义:
在关系R中选择满足给定条件的诸元组
σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ 真 ′ \sigma _{F}\left( R\right) =\{ t|t\in R\wedge F\left( t\right) =' 真' σF(R)={ttRF(t)=

F:选择条件,是一个逻辑表达式,取值为“真”或“假”
· 基本形式为:X1θY1
· θ表示比较运算符,它可以是>,≥,<,≤,=<>

比如:查询英语系(ES)的全体学生:
σ S d e p t = ′ E S ′ ( S t u d e n t ) \sigma _{Sdept}=_{'ES'}\left( Student\right) σSdept=ES(Student)
在这里插入图片描述
总而言之:选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算
在这里插入图片描述
2. 投影(Projection)π
从R中选择出若干属性列组成新的关系
π A ( R ) = { t [ A ] ∣ t ∈ R \pi _{A}\left( R\right) =\{ t\left[ A\right]| t\in R πA(R)={t[A]tR }
A:R中的属性列
投影操作主要是从列的角度进行运算
【吐血整理】数据库重点知识总结【2】_第7张图片
投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
· 举个栗子叭:查询学生的姓名和所在系。
Student关系上学生姓名和所在系两个属性上的投影
πSname,Sdept(Student)
结果:
【吐血整理】数据库重点知识总结【2】_第8张图片
避免重复行 举例:查询学生关系Student中都有哪些系。
πSdept(Student)
结果只有三行,去掉了重复的DB
在这里插入图片描述
3 . 连接(Join)⋈
连接运算的含义:
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
在这里插入图片描述
· A和B:分别为RS上度数相等且可比的属性组
· θ:比较运算符

连接运算是:在R和S的广义笛卡尔积R X S中,选取R在A属性组上的值S在B属性组上的值满足比较关系θ的元组
一般的连接操作是从行的角度进行运算
【吐血整理】数据库重点知识总结【2】_第9张图片
自然连接还需要取消重复列,所以是同时从行和列的角度进行运算
(此处连接就不展开介绍了,展开后比较多东西,以后会专门写关于连接(JOIN)的一篇文章)

4. 除 ÷
· 介绍除运算之前需要先介绍象集的概念:
给定一个关系R(X,Z),XZ为属性组。
t[X]=x时,xR中的象集(Images Set) 为:

Z x = { t [ z ] ∣ t ∈ R , t [ X ] = x Z_{x}=\{ t\left[ z\right]|t\in R,t\left[ X\right]=x Zx={t[z]tR,t[X]=x }

它表示R中属性组X上值为x的诸元组在Z上分量的集合
t[X] 表示元组 t中相应于属性X的一个分量)
来个栗子:
【吐血整理】数据库重点知识总结【2】_第10张图片

  • x1R中的象集
    Zx1 ={Z1,Z2,Z3}
  • x2R中的象集
    Zx2 ={Z2,Z3}
  • x3R中的象集
    Zx3={Z1,Z3}

除运算的含义:给定关系R (X,Y)S (Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx 包含 SY上投影的集合。
这样解释不太好理解,咱看下面的图理解一下哈:
【吐血整理】数据库重点知识总结【2】_第11张图片
在关系R中,A可以取四个值 {a1,a2,a3,a4}
a1 的象集为 {(b1,c2),(b2,c3),(b2,c1)}
a2 的象集为 {(b3,c7),(b2,c3)}
a3 的象集为 {(b4,c6)}
a4 的象集为 {(b6,c6)}
S(B,C) 上的投影为
{(b1,c2),(b2,c1),(b2,c3) }
只有a1的象集包含了S在(B,C)属性组上的投影
所以 R÷S ={a1}

除操作是同时从行和列角度进行运算
【吐血整理】数据库重点知识总结【2】_第12张图片

小拓展

并、差、笛卡尔积、投影和选择 这5种运算为关系代数中的基本运算(即 ∪、−、 X 、 Π \Pi Π 、σ)
其他的3种运算:交、连接和除(∩ 、⋈、÷),都可以用这5种基本运算来表示:
R(A, C),S(B, C) ,A和B分别为RS上度数相等且可比的属性组,θ是比较运算符 )

表示如下
R ∩ S = R - (R - S) 或 S - (S - R)
R ⋈ A θ B \underset{A θ B}\Join AθBS = σ A θ B ( R × S ) \sigma_{A θ B}(R \times S) σAθB(R×S)
R ÷ S = Π A ( R ) − Π A ( Π A ( R ) × Π C ( S ) − R ) \Pi_{A}(R) - \Pi_{A}(\Pi_{A}(R) \times \Pi_{C}(S) - R) ΠA(R)ΠA(ΠA(R)×ΠC(S)R)

ps:请结合定义来理解表达式吖


五、关系代数练习

在本章节的学习之后David老师给大家布置了一个关系代数的练习,俗话说的好 “光说不练假把式”,学了要会用吖!作业内容链接:【2019-2020春学期】数据库作业3:第二章课后题
在CSDN当中直接表达数学公式会略感无力但是CSDN的Markdown提供了对LaTex公式的支持。对于数学公式转LaTex,我在这里给大家安利一个网站叭:在线识别手写公式(有时候也不是那么好用,不过日常使用是没问题哒~)

第6题题解如下:
此处LaTex公式除了在上面安利的网站中转化,也可以参考David老师的博客:在CSDN中使用“Markdown编辑器”编辑“关系代数”,毕竟掌握写法是根本,融会贯通
1) Π S N O ( σ J N O = ′ J 1 ′ ( S P J ) ) \Pi_{SNO}(\sigma_{JNO='J1'}(SPJ)) ΠSNO(σJNO=J1(SPJ))
2) Π S N O ( σ J N O = ′ P 1 ′ ∧ P N O = ′ J 1 ′ ( S P J ) ) \Pi_{SNO}(\sigma_{JNO='P1'}\wedge _{PNO='J1'}(SPJ)) ΠSNO(σJNO=P1PNO=J1(SPJ))
3) Π S N O ( Π S N O , P N O ( σ J N O = ′ J 1 ′ ( S P J ) ) ⋈ Π P N O ( σ C O L O R = ′ 红 ′ ( P ) ) ) \Pi_{SNO}(\Pi_{SNO,PNO}(\sigma_{JNO='J1'}(SPJ))\Join \Pi_{PNO}(\sigma_{COLOR='红'}(P))) ΠSNO(ΠSNO,PNO(σJNO=J1(SPJ))ΠPNO(σCOLOR=(P)))
4) Π J N O ( S P J ) − Π J N O ( Π P N O ( σ C O L O R = ′ 红 ′ ( P ) ) ⋈ Π S N O ( σ C I T Y = ′ 天 津 ′ ( S ) ) ⋈ Π S N O , P N O , J N O ( S P J ) ) \Pi_{JNO}(SPJ)-\Pi_{JNO}(\Pi_{PNO}(\sigma_{COLOR='红'}(P))\Join \Pi_{SNO}(\sigma_{CITY='天津'}(S)) \Join \Pi_{SNO,PNO,JNO}(SPJ)) ΠJNO(SPJ)ΠJNO(ΠPNO(σCOLOR=(P))ΠSNO(σCITY=(S))ΠSNO,PNO,JNO(SPJ))
5) Π J N O , P N O ( S P J ) ÷ Π P N O ( σ S N O = ′ S 1 ′ ( S P J ) ) \Pi_{JNO,PNO}(SPJ) \div \Pi_{PNO}(\sigma_{SNO='S1'}(SPJ)) ΠJNO,PNO(SPJ)÷ΠPNO(σSNO=S1(SPJ))
下面是手写版的:
【吐血整理】数据库重点知识总结【2】_第13张图片


本文到这里也就结束啦,感谢你耐心地阅读~ 如有不恰当的地方,望提出指正吖
这里是一个想把学习过程记录成博客分享给大家的undergraduate,请多关照
咱们下期 ~
【吐血整理】数据库重点知识总结【2】_第14张图片
上一篇:【吐血整理】数据库重点知识总结【1】
安利:SQL Server 数据库基本操作入门篇【2】

你可能感兴趣的:(#,【吐血整理】,数据库)