数据库复习二
# 关系模型概述:
# 关系模型的组成
# 一、关系数据结构 —— 关系 (二维表)
关系数据结构特点:实体和联系都用关系这种单一的数据结构来实现
# 二、关系操作集合
- 并、交、差
- 广义笛卡尔积
- 选择、投影、连接、除
- 插入、删除、修改
关系操作的特点:操作对象和操作结果都是集合
关系语言:
# 三、关系完整性约束
实体完整性、参照完整性、用户定义完整性
# 关系的形式化定义
# 一、关系的定义
1、域 (Domain): 一组具有相同数据类型的值的集合。如整数、字符串等
2、笛卡尔积:给定一组域D1,D2,...,Dn (可相同),D1,D2,...,Dn 上的笛卡尔积为:D_1\times D_2\times...\times D_n=\
(d1,d2,...,dn) 称为一个元组 (Tuple)
di 叫做元组(d1,d2,...,dn) 的第 i 个分量 (component)
3、关系 (Relation):D1×D2×...×Dn 的一个子集叫做域D1,D2,...,Dn 上的关系,表示为R(D1,D2,...,Dn)
R 是关系名,n 是关系的目或度
定义在 n 个域上的关系称为 n 元关系
4、基数 (Cardinal number)
一个域允许的不同取值个数称为这个域的基数
若Di(i=1,2,...,n) 为有限集,其基数为mi(i=1,2,...,n),则D1×D2×...×Dn 的基数 M 为:M=i=1∏nmi
在关系中,基数是指行数
5、候选码:能唯一标识元组的属性 (组)
6、主码:多个候选码中选定一个作主码
7、主属性:候选码中的诸属性
8、非主属性:不出现在任何候选码的属性。
# 二、关系应具有的六条性质
列是同质的
不同的列可以出自同一个域
列序无关性
任意两个元组不能完全相同
行序无关性
分量不可再分
# 关系的完整性约束
关系的完整性分为实体完整性、参照完整性和用户定义完整性
设 F 是基本关系 R 的一个或一组属性但不是关系 R 的码。如果 F 与基本关系 S 的主码KS 相对应,则称 F 是基本关系 R 的外码。基本关系 R 称为参照关系,基本关系 S 被称为被参照关系或目标关系。
说明:
- 关系 R 和关系 S 不一定是不同的关系
- 目标关系 S 的主码KS 和参照关系的外码 F 必须定义在同一个 (或同一组) 域上
- 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同名字,以便与识别
# 1. 实体完整性规则:若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值。
- 空值:不知道或不存在
- 实体完整性规则规定基本关系的所有主属性都不能取空值
# 2. 参照完整性规则
若属性 (或属性组) F 是基本关系 R 的外码,它与基本关系 S 的主码KS 对应 (基本关系 R 和 S 不一定是不同关系),则对于每个元组在 F 上的值必须为:
- 或者取空值 (F 的每个属性值均为空值)
- 或者等于 S 中某个元组的主码值
# 3. 用户定义完整性
- 用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
- 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。通常由 RDBMS 的 Check 约束提供这类检查
# 关系代数
# 一、关系上的传统集合运算
1、并:R∪S
2、交:R∩S=R−(R−S)
3、差:R−S
4、广义笛卡尔积R×S (R 是k1 行 n 列,S 为k2 行 m 列)
- 列:(n+m) 列的元组集合
- 行:k1×k2 个元组
# 二、专门的关系运算 (选择、投影、连接、除)
1、选择 (σ)
- 含义:在关系 R 中选择满足给定条件的元组σF(R)={t∣t∈R∧F(t)=′True′}
- 其中 F:选择条件,是一个逻辑表达式
2、投影 (π)
- 含义:从 R 中选择出若干属性列组成新的关系πA(R)={t[A]∣t∈R}
- A:R 中的属性列的集合
- 投影操作主要是从列的角度进行运算
3、连接 (⋈)
含义:从两个关系的广义笛卡尔积中选取属性间满足一定条件的元组。
R⋈AθBS={trts⌢∣tr∈R∧ts∈S∧tr[A]θts[B]}
- A 和 B:分别为 R 和 S 上度数相等且可比的属性组
- θ:比较运算符
连接运算从 R 和 S 的广义笛卡尔积R×S 中选取 (R 关系) 在 A 属性组上的值与 (S 关系) 在 B 属性组上的值满足比较关系的元组
带有比较运算符θ 的连接运算符称为θ 连接
自然连接:
自然连接是一种特殊的等值连接
- 两个关系中进行比较的分量必须是同名的属性 (组)
- 在结果中把重复的属性列去掉
自然连接的含义:R 和 S 具有相同的属性组 B
自然连接解题思路:
- 确定结果列中的属性列
- 确定参数运算的关系的公共属性列 (同名属性取其一)
- 逐一取 R 中的元组分别和 S 中与其公共属性组取值相同的元组拼接
外连接:如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值,这种连接就叫做外连接
左外连接:R⟕S
- 如果只把左边关系 R 中要舍弃的元组保留就叫做左外连接
右外连接:R⟖S
- 如果只把右边关系 S 中要舍弃的元组保留就叫做右外连接
全外连接:R⟗S
4、除
象集Zx:
给定一个关系 R (X,Z),X 和 Z 为属性组。当 t [X]=x 时,x 在 R 中的象集为Zx={t[Z]∣t∈R,t[X]=x}
它表示 R 中属性组 X 上值为 x 的诸元组在 Z 上分量的集合
如关系 R 如下:
X | Z |
---|
x1 | Z1 |
x1 | Z2 |
x1 | Z3 |
x2 | Z2 |
x2 | Z3 |
x3 | Z1 |
x3 | Z3 |
求x1 在R 中的象集:Zx1={Z1,Z2,Z3}
求x2 在R 中的象集:Zx2={Z2,Z3}
求x3 在R 中的象集:Zx3={Z1,Z3}
给定关系 R (X,Y) 和 S (X,Y),其中 X,Y,Z 为属性组。R 中的 Y 与 S 中的 Y 可以有不同的属性名,但必须出自相同的域集。R 与 S 的除运算得到一个新的关系 P (X),P 是 R 中满足下列条件的元组在 X 属性列上的投影:元组在 X 上分量值 x 的象集YX 包含 S 在 Y 上投影的集合:
R÷S={tr[X]∣tr∈R∧πY(S)⊆YX},YX:x 在 R 中的象集,x=tr[X]
÷:R(X,Y)÷S(Y,Z)={tr[X]∣tr∈R∧πY(S)⊆YX∧x=tr[X]}
例子:查询选修了全部课程的学号和姓名:
πsno,sname(S)⋈(πsno,cno(SC)÷πcno(C))
# 三、总结
水平方向运算:∪,∩,−,σ
垂直方向运算:π
混合运算:×,θ,⋈,÷
关系代数表达式:由关系的运算经过有限次的复合后形成的样子
# 关系演算
关系演算就是用谓词来描述关系的构成。按照谓词变元的不同分为元组演算和域演算
# 一、元组演算
{t∣ϕ(t)} 称为元组演算表达式,其中 t 称为元组变量,ϕ(t) 称为元组演算公式
原子公式:
R(t)
R 是关系名,t 是元组变量。表示:t 是 R 中的元组
t[i]θu[j]
t,u 为元组变量,θ 为比较运算符。表示:元组 t 的第 i 个分量与元组 u 的第 j 个分量之间满足比较关系θ
t[i]θccθt[i],其中 c 为常量
关系代数表达式与元组演算表达式的等价转换:
R∪S≡{t∣R(t)∨S(t)}
R∩S≡{t∣R(t)∧S(t)}
R×S≡{tm+n∣∃u(m)∃v(n)(R(u)∧S(v)∧t[1]=u[1]∧...∧t[m]=u[m]∧t[m+1]=v[1]∧...∧t[m+n]=v[n])}
σF(R)≡{t∣R(t)∧F}
\pi_{i_{1},i_{2},...,i_{k}}(R)\equiv {\{} t^{(k)}\vert\exists u(R(u)\and t[1]=t[i_{1}]\land...\land t[k]=u[i_{k}]) {\}}
元组演算的等价规则:
P1∧P2⇔¬(¬P1∨¬P2)
P1∨P2⇔¬(¬P1∧¬P2)
∀x(P(x))⇔¬∃x(¬P(x))
∃x(P(x))⇔¬∀x(¬P(x))
P1→P2⇔¬P1∨P2