本笔记是我在学习《数据库系统概论(第5版)》所记,提取课本重点,加上我自己的理解
文章目录
1.关系数据模型的三要素
关系模式的形式化定义为五元组
关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成
1.1关系数据结构(P38)
1.1.1关系
关系模型的数据结构只包含一种单一的结构——关系
关系模型建立在集合的基础上,这里给出集合论角度的各种定义(之前已给出非形式化定义):
-
域
定义:域是一组具有相同数据类型的值的集合
-
笛卡尔积
定义:给定一组域D1、D2、···、Dn ,允许其中某些域是相同的,D1、D2、···、Dn的笛卡尔积为:D1D2···*Dn={(d1,d2,···,dn) | di ,i=1,2,···,n}
每一个元素(d1,d2,···,dn) 叫做一个n元组,简称元组
元组中每一个值di叫做一个分量
一个域允许的不同取值个数被称为这个域的基数
若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1D2…*Dn的基数M为
M = ∏ i = 1 n m i M = \prod\limits_{i=1}^{n} m_{i} M=i=1∏nmi
-
关系
定义:D1D2···*Dn的子集叫做在域D1、D2、···、Dn上的关系,表示为:R(D1,D2,···,Dn)
R是关系的名字,n是关系的目或度,n=1时称该关系为一元关系,n=2称二元关系…
直接笛卡尔积得出的二维表是没有实际意义的,一般说的关系要结合实际语义
候选码:一属性组的值能唯一地标识一个元组,而其子集不能
主码:若一个关系有多个候选码,选一个为主码
候选码可能只包含一个属性,也可能包含全部属性(全码)
候选码的各个属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性
关系的三种类型:
基本关系(基本表或基表) | 实际存储数据的逻辑表示 |
---|---|
查询表 | 查询结果对应的表 |
视图表 | 由基本表或其他视图导出的表,是虚表 |
基本关系的六条性质:
1. 列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。
2. 不同的列可出自同一个域,其中的每一列为一个属性,不同的属性要给予不同的属性名。
3. 列的顺序无所谓,即列的次序可以任意交换。由于列顺序是无关紧要的,因此在许多实际关系数据库产品中增加新属性时,永远是插至最后一列。
4. 任意两个元组的候选码不能取相同的值。
5. 行的顺序无所谓,即行的次序可以任意交换。
6. 分量必须取原子值,即**每一个分量都必须是不可分的数据项**。这是关系规范化条件中最基本的一条。
1.1.2关系模式
在数据库中,型和值的区分随处可见
比如在关系数据库中,关系模式是型,关系是值
由前可知,关系是元组的集合,因此关系模式要表示元组集合的结构,这里,其用五元组的方式来表示
定义:关系的描述称为关系模式(relation schema)。它可以形式化地表示为R(U,D,DOM,F),通常可以简记为R(U)或R(A1,A2,…,An)
(R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。A1,A2,…,An为属性名)
1.1.3关系数据库
关系数据库也有型和值之分:
- 关系数据库的型也称为关系数据库模式,是对关系数据库的描述。
- 关系数据库的值是这些关系模式在某一时刻对应的关系的合,通常就称为关系数据库。
1.1.4关系模型的存储结构
由前可知,关系数据的逻辑模型是二维表
在关系数据库的物理存储中
有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织交给OS完成
有的关系DBMS从OS那申请若干大的文件,自行划分文件空间,组织表、索引等存储结构,进行存储管理
1.2关系操作集合(P43)
关系模型给出了关系操作的说明,但没有对具体操作语言进行规定,所以不同的关系数据库管理系统可以自己定义和开发不同的语言来实现操作
1.2.1基本关系操作
常用的操作包括两大部分:
-
插入(insert)、删除(delete)、修改(update)操作。
-
查询(query)操作
包括选择(select)、投影(project)、连接(join)、除(divide)、并(union)、差(except)、交(intersection)、笛卡儿积等
查询操作是最主要的部分,其中,选择、投影、并、差、笛卡儿积是5种基本操作,其他操作可以用基本操作来定义和导出
1.2.2关系数据语言的分类
早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数(relational algebra)和关系演算(relational calculus)。
关系代数用对关系的运算来表达查询要求,关系演算则用谓词来表达查询要求。
关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算
关系代数、元组关系演算和域关系演算均是抽象的查询语言,实际的查询语言还提供了许多附加功能,例如聚集函数(aggregation function)、关系赋值、算术运算等。
特别的,还有一种介于关系代数和关系演算之间的结构化查询语言(Structured Query Language,SQL)。SQL是一种高度非过程化的语言,不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、数据定义语言、数据操纵语言和数据控制语言(Data Control Language,DCL)于一体的关系数据语言,充分体现了关系数据语言的特点和优点,是关系数据库的标准语言。
1.3关系的完整性(P45)
完整性约束有三类:
- 实体完整性(entity integrity)——针对主码
- 参照完整性(referential integrity)——针对外码
- 用户定义的完整性(user-defined integrity)。
其中前两个是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性
1.3.1实体完整性
规则:实体完整性规则若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(null value)。所谓空值就是“不知道”或“不存在”或“无意义”的值。
即:主码必须存在且有意义
- 实体完整性规则对应的是基本关系,一个基本表通常对应一个实体集
1.3.2参照完整性
实际中,不同的关系间会产生联系,同样在关系数据的表达中,由外码表达出参照关系
属性F在基本关系R中,但不是R的主码,H是基本关系S的主码,F和H相对应(在同一个域中)
则:F是R的外码(foreign key),关系R为参照关系,S为被参照关系
外码可以是属性组
参照完整性就是定义主码与外码之间的引用规则:
规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码H相对应(R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:
或者取空值(F的每个属性值均为空值);
或者等于S中某个元组的主码值
即:对于有关系的两个关系,外码必须联系起两个关系,比如:参照关系的外码改变了,被参照关系相应的被改变
1.3.3用户定义的完整性
除了以上两种基本的完整性,不同的关系数据库对于不同的实际情况时,往往还需要其他的约束性条件,这就需要用户自行定义,得到的即是此完整性约束
2.关系代数(P48)
关系代数用对关系的运算来表达查询,比较抽象
按运算符的不同将其分为两类:
2.1传统的集合运算
并(union)、差(except)、交(intersection)、笛卡尔积(cartesian product)
具体运算过程略
2.2专门的集合运算(P50)(重点)
2.2.1选择(selection)
也称限制(restriction),通过对某些属性的限制而选择出需要的元组
格式:
σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ t u r e ′ } \sigma_{F}(R)=\{t|t\in R\wedge F(t)='ture'\} σF(R)={t∣t∈R∧F(t)=′ture′}
F是选择条件,是一个判断语句,R为需要选择操作的关系
对于F,基本形式为:**$X\theta Y ∗ ∗ , ** , ∗∗,\theta $包括:
- 注意:“<>”为"不等于"
例子:
关系Student:
进行选择操作有: σ S d e p t = ′ I S ′ ( S t u d e n t ) \sigma_{Sdept='IS'}(Student) σSdept=′IS′(Student),则得到:
如上:选出来的是一整个元组
若选择条件F有多个,其中用逗号,连接
2.2.2投影(projection)
通过对属性名的选择,得到若干属性列
格式:
Π A = { t [ A ] ∣ t ∈ R } \Pi_{A} = \{t[A]|t\in R\} ΠA={t[A]∣t∈R}
A是属性名,R为需要选择操作的关系
投影之后不仅取消了原关系的某些列,同时还取消了重复行
例子:
关系Student:
进行选择操作有: Π S n a m e , S d e p t ( S t u d e n t ) \Pi_{Sname,Sdept}(Student) ΠSname,Sdept(Student),则得到:
若选择属性名F有多个,其中用逗号,连接
2.2.3连接(join)
通过条件,将两个关系表按需求连接到一起,得到新的关系表,连接是行的操作
格式为:
R ⋈ A θ B S = { ⌢ t r t s ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] = t s [ B ] } R\mathop\bowtie\limits_{A\theta B}S=\{\mathop\frown\limits_{t_{r}t_{s}}|t_{r}\in R\wedge t_{s}\in S\wedge t_{r}[A]=t_{s}[B] \} RAθB⋈S={trts⌢∣tr∈R∧ts∈S∧tr[A]=ts[B]}
$ A\theta B 为 连 接 的 条 件 , 为连接的条件, 为连接的条件,\mathop\frown\limits_{t_{r}t_{s}}$被称为元组的连接(或串接)
- 等值连接: A θ B A\theta B AθB中 θ \theta θ为=,在关系R和S中,选取A、B属性相等的元组合并
- 若没有$ A\theta B$则默认为自然连接,自然连接是一种特殊的等值连接,要求两个关系表R、S必须有同名的属性组,由此相连,同时去除重复的属性列
例子:
2.2.4除运算(division)
设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中
格式:
R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ Π γ ( S ) ⊆ Y x } R\div S=\{t_{r}[X]|t_{r}\in R\wedge \Pi_{\gamma}(S)\subseteq Y_{x} \} R÷S={tr[X]∣tr∈R∧Πγ(S)⊆Yx}
Tx为x在R上的象集,x=tr[X]
象集:本质上是选择后加投影,在一张关系表中求A属性的象集,即选择出包含A的元组,再去除A得到最终投影,注意象集表达格式,见下例
除运算比较复杂,这里引用书上的例子:
在解决实际问题时,通常先假设出问题所相关的一张关系表,有此关系表对题所给关系表相除得到所需关系表,最后求解设的关系表即可
一般题目要求“包括…”或者"至少…"等,会用到除运算
3.关系演算(略)
使用元组关系演算语言ALPHA