【数据库系统概念第七版】学习笔记 第二章 关系模型介绍
前言
1. 关系数据库结构
基本概念
- 表
- 关系:表
- 元组:行
- 属性:列
- 域:属性允许取值的集合
- 原子的:域中的元素被认为不可再分
- 空值:未知的值
- 数据库模式:数据库的逻辑设计
- 数据库实例:给定时刻数据库中数据的快照
- 关系模式:关系模式由一个属性列表和对应的域组成
n元关系
一个关系中包含n个属性,则称该关系为n元关系。
2. 码
概念
- 超码:一个或多个属性的集合,属性组合在一起可以在关系中唯一标识一个元组。
- 候选码:最小的超码。即在候选码中,任意删掉一个属性都不能唯一标识一个元组
- 主码:表示在实际的数据库设计中,被数据库设计者选作用于在一个关系中区分不同元组的方式的候选码。习惯上,将主码属性写在其它属性的前面,主码属性还要加下划线。
- 主码约束:表示在数据库设计中,由主码建模的约束。
- 外码:关系 r 1 r_1 r1中的属性 A A A也必须是关系 r 2 r_2 r2中某个元组的主码属性B的取值,这时A属性集被称作从 r 1 r_1 r1引用 r 2 r_2 r2的外码。(注意是A属性集,而不是B,因此外码不一定是关系r1的主码)
- 引用关系:上述例子中 r 1 r_1 r1被称作引用关系
- 被引用关系:上述例子中 r 2 r_2 r2被称作被引用关系
- 外码约束:上述例子中的约束被称作外码约束。特点在于,被引用属性必须的被引用关系的主码。
- 引用完整性约束:放松了主码的外码约束,即不再要求是主码。
概念之间的区别
超码,候选码,主码,外码
问题一:哪些可以唯一标识元组?
答:超码,候选码,主码
问题二:码之间的包含关系?
超码
⊇
候选码
⊇
主码
超码\supseteq候选码\supseteq主码
超码⊇候选码⊇主码
问题三:外码是什么?
关系
r
1
r_1
r1中的属性
A
A
A也必须是关系
r
2
r_2
r2中某个元组的主码属性B的取值,这时A属性集被称作从
r
1
r_1
r1引用
r
2
r_2
r2的外码。(注意是A属性集,而不是B,因此外码不一定是关系r1的主码)
外码是引用关系中的属性,其它的并无其它性质。
模式图
关系名字在最顶上,方框内,先写主码,再写其它属性,外码约束和引用完整性约束用箭头表示。如果全是主码,就不需要划线了(如depositor和brrower)。
关系代数
一元运算
选择运算 σ x ( r ) \sigma_x(r) σx(r)
根据逻辑表达式x,对关系r进行选择
投影运算 Π L ( E ) \Pi_L(E) ΠL(E)
会去重
更名运算 ρ x ( E ) \rho_x(E) ρx(E)
常常用于对同一个表声明两次进行判断,为了避免不重名,需要对一部分进行更名。
广义投影运算 Π F 1 , F 2 , . . . , F n ( E ) \Pi_{F_1, F_2, ..., F_n}(E) ΠF1,F2,...,Fn(E)
实际上就是一次投影多个属性。
二元运算
并运算 ∪ \cup ∪
需要两种关系同构。
笛卡儿积 × \times ×
就相当于暴力链接。
集差 − - −
要保证相减两边的关系同构才可以,如果为了构造为相容的关系,可以对目标进行自然连接,然后再减去
交运算 ∩ \cap ∩
链接 ⋈ \bowtie ⋈
悬摆元组:自然连接中,实际上对结果毫无贡献的元组。
不考虑悬摆元组的链接,称作内连接。否则称为外连接。
赋值 ← \leftarrow ←
除
效果十分复杂。
聚集运算
所有的聚集运算,默认不去重,如果需要用去重,需要加关键词distinct。
分组运算G
G
1
,
G
2
,
.
.
.
,
G
n
G
F
1
(
A
1
)
,
.
.
.
.
,
F
m
(
A
m
)
(
E
)
_{G_1, G_2,..., G_n}G_{F1(A1),...., Fm(Am)}(E)
G1,G2,...,GnGF1(A1),....,Fm(Am)(E)
其中
G
i
G_i
Gi是分组属性,
F
i
F_i
Fi是聚集函数,
A
i
A_i
Ai是属性名
结果模式中,包含分组属性+聚集的结果
最大值max
最小值min
平均值avg
统计计数count
数据库操作
下文中的表达式,r表示关系,E表示关系代数表达式
删除
r ← r − E r\leftarrow r-E r←r−E
插入
r ← r ∪ E r\leftarrow r\cup E r←r∪E
更新
r ← Π F 1 , F 2 , . . , F n ( r ) r\leftarrow \Pi_{F_1, F_2, .., F_n}(r) r←ΠF1,F2,..,Fn(r)
空值null
算数运算中,如果有空值,结果规定为空。
聚集运算中,如果有空值,运算时忽略空值。对于去重和分组,空值被认为全部等价。
关系代数表达式的等价规则
选择关系满足交换律
选择关系的级联等价于合取操作进行选择
投影运算的级联等价于最外层的投影
集合运算的交并满足交换律和结合律
集合的差运算不满足交换和结合律
视图View
所有不属于概念模型但为用户所见的虚拟关系,称作视图。只保留视图的定义,不保留视图的结果。
视图的优点
- 个性化服务
- 安全性:限制用户访问范围
- 逻辑独立性
创建视图
create view v as <query expression>
视图在数据库中,只保留视图的定义而不保留元组。
视图作为一种虚拟关系。
视图的插入
问题1:如果插入的信息有缺失
方案1:不允许插入
方案2:用null填充
问题2:如果插入的信息不满足视图的定义
不允许插入
问题3:插入的信息不满足视图的约束,即一些链接信息未提供
不允许插入
视图之间的依赖
直接依赖;间接依赖
视图定义中,不支持递归定义,即不能用自身定义自身
视图的扩展
如果视图的表达式e包含其它视图v,则不断替换e中相关的定义为v的定义,直到不包含任何视图。
因此递归定义是无法终止的,所以不支持递归定义。
物化视图
把视图作为基本关系保存下来,可以看作数据库的cache。从而加快视图的查询
适合基本关系不发生经常变化的视图。否则需要不断修改基本关系。
元组关系演算
定义
{
t
∣
P
(
t
)
}
\{t|P(t)\}
{t∣P(t)}
表示使谓词P为真的元组的集合,t为元组变量,P是公式,P由原子公式构成。
原子公式
s ∈ r s [ x ] Θ u [ y ] s [ x ] Θ c s\in r\\ s[x]\Theta u[y]\\ s[x]\Theta c s∈rs[x]Θu[y]s[x]Θc
公式的定义
实际上就是逻辑运算的公式。