关系型数据库
关系数据库简介
- 1970年IBM公司的E.F.Codd提出关系数据模型
- 1972年提出了关系第一、第二、第三范式
- 1974年提出了关系的BC范式
关系数据结构及形式化定义
关系
单一的数据结构 ------ 关系
现实世界的实体及实体间的各种联系均用关系来表示
逻辑结构 ------ 二维表
从用户角度 关系模型中数据的逻辑结构是一张二维表
关系模型是建立在集合代数的基础上
域 Domain
定义 : 域是一组具有相同数据类型的值的集合
例 : 整数 实数 介于某个取值范围的整数 指定长度的字符串集合 {‘男’,‘女’} 等等
笛卡尔积 Cartesian Product
定义 : 给定一组域为
D
1
,
D
2
,
.
.
.
,
D
n
D_1,D_2,...,D_n
D1,D2,...,Dn,这些域可以是相同的
D
1
,
D
2
,
.
.
.
,
D
n
D_1,D_2,...,D_n
D1,D2,...,Dn的笛卡尔积为:
D
1
×
D
2
×
.
.
.
×
D
n
=
{
(
d
1
,
d
2
,
.
.
.
,
d
n
)
∣
d
i
∈
D
i
,
i
=
1
,
2
,
.
.
.
,
n
}
D_1×D_2×...×D_n\ =\ \{\ (d_1,\ d_2,\ ...,\ d_n)\ |d_i \in D_i,\ i=1,\ 2,\ ...,n\}
D1×D2×...×Dn = { (d1, d2, ..., dn) ∣di∈Di, i=1, 2, ...,n}
例:
# D1学生集合为 {'张三','李四'}
# D2性别集合为 {'男','女'}
# D3专业集合为 {'计算机应用','护理','会计'}
# 则 D1 D2 D3 的笛卡尔积为
# D1×D2×D3 = {('张三','男','计算机应用'),('张三','男','护理'),('张三','男','会计'),('张三','女','计算机应用'),('张三','女','护理'),('张三','女','会计'),('李四','男','计算机应用'),('李四','男','护理'),('李四','男','会计'),('李四','女','计算机应用'),('李四','女','护理'),('李四','女','会计')}
笛卡尔积的表示方法 : 笛卡尔积可表示为一个二维表,每行对应一个元组,表中的每列对应一个域
D1×D2×D3 =
学生 | 性别 | 专业 |
---|---|---|
张三 | 男 | 计算机应用 |
张三 | 男 | 护理 |
张三 | 男 | 会计 |
张三 | 女 | 计算机应用 |
张三 | 女 | 护理 |
张三 | 女 | 会计 |
李四 | 男 | 计算机应用 |
李四 | 男 | 护理 |
李四 | 男 | 会计 |
李四 | 女 | 计算机应用 |
李四 | 女 | 护理 |
李四 | 女 | 会计 |
元组 Tuple
笛卡尔积中的每一个元素 ( d 1 , d 2 , . . . , d n ) (d_1,\ d_2,\ ...,\ d_n) (d1, d2, ..., dn) 称作一个 n n n元组 ( n − t u p l e ) (n-tuple) (n−tuple) 或简称元组 ( t u p l e ) (tuple) (tuple)
分量 Component
笛卡尔积元素 ( d 1 , d 2 , . . . , d n ) (d_1,\ d_2,\ ...,\ d_n) (d1, d2, ..., dn)中的每一个 d i d_i di称作一个分量
基数 Cardinal number
一个域允许的不同取值个数称为这个域的基数
若
D
i
(
i
=
1
,
2
,
.
.
.
,
n
)
D_i (i=1,\ 2,\ ...,\ n)
Di(i=1, 2, ..., n)为有限集,其基数为
m
i
(
i
=
1
,
2
,
.
.
.
,
n
)
,
m_i\ (i=1,\ 2,\ ...,\ n),
mi (i=1, 2, ..., n),则
D
1
×
D
2
×
.
.
.
×
D
n
D_1×D_2×...×D_n
D1×D2×...×Dn的基数
M
M
M为:
M
=
∏
i
=
1
n
m
i
\huge M=\prod^n_{i=1}m_i
M=i=1∏nmi
上面的
D
1
×
D
2
×
D
3
D_1×D_2×D_3
D1×D2×D3 的基数为 :
2
×
2
×
3
=
12
2×2×3=12
2×2×3=12
关系 Relation
(1) 关系
D
1
×
D
2
×
.
.
.
×
D
n
D_1×D_2×...×D_n
D1×D2×...×Dn的子集称作在域
D
1
,
D
2
,
.
.
.
,
D
n
D_1,\ D_2,\ ...,\ D_n
D1, D2, ..., Dn上的关系,表示为 :
R
(
D
1
,
D
2
,
.
.
.
,
D
n
)
R\ \ \ (D_1,\ D_2,\ ...,\ D_n)
R (D1, D2, ..., Dn)
R
R
R表示为关系名,
n
n
n表示关系的目或度 Degree
当 n = 1 n=1 n=1时 称该关系为单元关系
当 n = 2 n=2 n=2时 称该关系为元二关系
(2) 元组
关系中的每个元素是关系中的元组 通常用 t t t来表示
(3) 关系的表示
关系也是一个二维表 表的每行对应一个元组 表的每列对应一个域,一个属性
(4) 属性 Attribute
关系中不同的列可以对应相同的域 为了加以区分 必须对每列起一个名字 称为属性
n目关系必有n个属性
(5) 码 Key
候选码 Candidate key :
若关系中的某一属性组的值能唯一的标识一个元组 则称该属性组为候选码
最简单的情况 : 候选码只包含一个属性
全码 All-key
最极端的情况 : 关系模式中的所有属性组是这个关系模式的候选码 称为全码
主码 Primary key
若一个关系有多个候选码 则选定其中一个为主码
外码 Foreign Key
定义 : 设 F F F是基本关系 R R R的一个或一组属性 但不是关系 R R R的码,如果 F F F与基本关系 S S S的主码 K S K_S KS相对应 则称 F F F是基本关系 R R R的外码
基本关系 R R R称为参照关系
基本关系 S S S称为被参照关系
- 关系R和S不一定是不同的关系
- 目标关系S的主码K_S和参照关系的外码F必须定义在同一域上
- 外码不一定要与相应的主码同名 当外码与相应的主码属于不同关系时 往往取相同的名字 以便于识别
主属性 Prime attribute
候选码的诸属性称为主属性
非主属性
不包含在任何候选码中的属性
(6) 三类关系
- 基本关系 (基本表或基表) : 实际存在的表 是实际存储数据的逻辑表示
- 查询表 : 查询结果对应的表
- 试图表 : 由基本表或其他试图导出的表 是虚表 不对应实际存储的数据
(7) 基本关系的性质
- 列是同质的 Homogeneous
- 不同的列可以出自同一个域 其中的每一列称为属性 不同的属性要给予不同的属性名
- 列的顺序无所谓 列的次序可以任意交换
- 任意两个元组的候选码不能相同
- 行的顺序无所谓 行的顺序可以任意交换
- 分量必须取原子值 这是规范条件中最基本的一条 (不能拆分单元格)
关系模式
什么是关系模式
==关系模式 ( Relation Schema)==是对关系的描述 关系模式是型 关系是值
(1) 元组集合的结构
属性构成 属性来自的域 属性与域之间的
(2) 一个关系通常由赋予它的元组语义确定
(3) 现实的世界中还存在着完整性约束
定义关系模式
关系模式可以形式化的表示为 : R ( U , D , D O M , F ) R\ (U,\ D,\ DOM,\ F) R (U, D, DOM, F)
# R : 关系名
# U : 组成该关系的属性名的集合
# D : 属性组U中属性所来自的域
# DOM : 属性向域的映像集合
# F : 属性间的数据依赖关系集合
关系模式与关系
- 关系模式是静态的 稳定的
- 关系是动态的 随时间不断变化的
关系是关系模式在某一时刻的状态或内容 在实际工作中关系模式和关系往往统称为关系 需要通过上下文加以区分
关系数据库
在一个给定的应用领域中 所有关系的集合构成一个关系数据库
关系数据库的型与值
关系数据库的型 : 关系数据库模式 对关系数据库的描述
关系数据库模式 : 若干域的定义 在这些域上定义的若干关系模式
关系数据库的值 : 关系模式在某一刻对应的关系的集合简称为关系数据库
关系模型的存储结构
1. 有的关系数据库管理系统中一个表对应一个操作系统文件 将物理数据组织交给操作系统完成
2. 有的关系数据库管理系统从操作系统申请若干文件 自己划分文件空间 组织表 索引等存储结构 并进行存储管理
关系数据结构
基本关系操作
常用的关系操作
查询 : 选择 投影 连接 除 并 交 差等
其中 选择、投影、并、差、笛卡尔积是五种基本操作
数据更新 : 插入 删除 修改
查询的表达能力是其中最主要的部分
关系操作的特点
集合操作方式 : 操作的对象和结果都是集合 一次一集合的方式
关系数据库语言的分类
关系代数语言
用对关系的运算来表达查询要求 代表 : LSBL
关系演算语言
用谓词来表达查询要求
元组关系演算语言 : 谓词变元的基本对象是元组变量
域关系演算语言 : 谓词变元的基本对象是域变量
具有关系代数和关系演算双重特点的语言
代表 : SQL (Structured Query Language)
关系的完整性
关系模型中有三类完整性约束 : 实体完整性 参照完整性和用户定义的完整性
其中实体完整性 参照完整性是关系模型必须满足的完整性约束条件 称为关系的两个不变性 应该由关系系统自动支持
用户定义的完整性是应用领域中需要遵循的约束条件 体现了具体领域中的语义约束
实体完整性 Entity Integrity
实体完整性是指若属性A是基本关系R的主属性 则A不能取空值
空值就是 “不知道” 或 “不存在” 或 “无意义” 的值
实体完整性规则的说明 :
- 实体完整性规则是针对基本关系而言的 一个基本表通常对应现实世界的一个实体集
- 现实世界中的实体是可区分的 即它们具有某种唯一性的标识
- 关系模型中以主码作为唯一性标识
- 主码中的主属性不能取空值
实体完整性规则规定基本关系的所有主属性都不能取空值
参照完整性
关系间的引用
在关系模型中实体与实体之间的联系都是用关系来描述的 存在着关系和关系之间的引用
例:
# 学生 (*学号,姓名,性别,*专业号,年龄)
# 专业 (*专业号,姓名)
学生关系引用了专业关系的主码 "专业号", 学生关系中的 "专业号" 值必须是确实存在的专业号,即专业关系中有该专业的记录.
学生中的专业号是外码 那么学生表中专业号的值必须依赖于专业表中专业号的值来确定 不能出现专业表中专业号之外的值
用户定义的完整性
针对某一具体关系数据库的约束条件 反应某一具体应用所涉及的数据必须满足具体的语义要求
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统方法处理它们 而不要用应用程序承担这一功能
例: 学生 (姓名,年龄,性别,分数)
# 年龄必须是正整数 0 <= n <= 100
# 性别只能取 {'男','女'}
# 分数只能是正数 0 <= n <= 100
关系代数
关系代数是一种抽象的查询语言 是对关系的运算来表达查询
关系代数的运算对象是关系 运算结果也是关系
关系代数按运算符的不同可分为传统的集合运算和专门的关系运算
集合运算是从关系的水平方向即行的角度进行
专门的关系运算不仅涉及行而且涉及列
集合运算符
运算符 | 含义 |
---|---|
∪ \cup ∪ | 并 |
− - − | 差 |
∩ \cap ∩ | 交 |
× \times × | 笛卡尔积 |
专门的关系运算符
运算符 | 含义 |
---|---|
σ \sigma σ | 选择 |
π \pi π | 投影 |
⋈ \Join ⋈ | 连接 |
÷ \div ÷ | 除 |
传统的集合运算
并 union
关系 R R R和 S S S具有相同的目 n n n (即两个关系都有 n n n个属性),相应的属性取自同一个域
R
R
R与
S
S
S的并运算表示为
R
∪
S
=
{
t
∣
t
∈
R
∨
t
∈
S
}
R\cup S\ = \ \{t|t\in R\vee t\in S\}
R∪S = {t∣t∈R∨t∈S}
运算结果为:
n
n
n目关系,由属于
R
R
R或属于
S
S
S的元组组成
例:
R R R
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
S S S
A | B | C |
---|---|---|
a1 | b2 | c2 |
a1 | b3 | c2 |
a2 | b2 | c1 |
R ∪ S R\cup S R∪S
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
a1 | b3 | c2 |
差 except
关系 R R R和 S S S具有相同的目 n n n (即两个关系都有 n n n个属性),相应的属性取自同一个域
R
R
R与
S
S
S的差运算表示为
R
−
S
=
{
t
∣
t
∈
R
∧
t
∉
S
}
R- S\ = \ \{t|t\in R\wedge t\notin S\}
R−S = {t∣t∈R∧t∈/S}
运算结果为:
n
n
n目关系,由属于
R
R
R并且不属于
S
S
S的元组组成
例:
R − S R-S R−S:
A | B | C |
---|---|---|
a1 | b1 | c1 |
交 intersection
关系R和S具有相同的目n (即两个关系都有n个属性),相应的属性取自同一个域
R与S的交运算表示为
R
∩
S
=
{
t
∣
t
∈
R
∧
t
∈
S
}
R
∩
S
=
R
−
(
R
−
S
)
R\cap S\ = \ \{t|t\in R\wedge t\in S\}\\ R\cap S\ = \ R-(R-S)
R∩S = {t∣t∈R∧t∈S}R∩S = R−(R−S)
运算结果为: n目关系,由属于R并且属于S的元组组成
例:
R ∩ S R\cap S R∩S:
A | B | C |
---|---|---|
a1 | b2 | c2 |
a2 | b2 | c1 |
笛卡尔积 Cartesian Product
严格来讲应该是广义的笛卡尔积 (Extended Cartesian Product)
R: n目关系,k个元组
S: m目关系,r个元组
R与S的笛卡尔积表示为R×S:
R
×
S
=
{
t
r
⌢
t
s
∣
t
r
∈
R
∧
t
s
∈
S
}
R×S\ = \ \{{t_r}^\frown{t_s}|t_r\in R\wedge t_s\in S\}
R×S = {tr⌢ts∣tr∈R∧ts∈S}
运算结果为: 行:
k
×
r
k×r
k×r个元组,列:
n
+
m
n+m
n+m个属性的元组的集合
其中元组的前n列是关系R的元组 后m列是关系m的元组
R × S R×S R×S:
R.A | R.B | R.C | S.A | S.B | S.C |
---|---|---|---|---|---|
a1 | b1 | c1 | a1 | b2 | c2 |
a1 | b1 | c1 | a1 | b3 | c2 |
a1 | b1 | c1 | a2 | b2 | c1 |
a1 | b2 | c2 | a1 | b2 | c2 |
a1 | b2 | c2 | a1 | b3 | c2 |
a1 | b2 | c2 | a2 | b2 | c1 |
a2 | b2 | c1 | a1 | b2 | c2 |
a2 | b2 | c1 | a1 | b3 | c2 |
a2 | b2 | c1 | a2 | b2 | c1 |
专门的关系运算
关系运算包括:选择 投影 连接 除运算
相关记号说明:
关系模式为 R ( A 1 , A 2 , . . . , A n ) R\ (A_1,\ A_2\ ,\ ...,\ A_n) R (A1, A2 , ..., An),它的一个关系为 R R R, t ∈ R t\in R t∈R表示 t t t是 R R R的一个元组, t [ A i ] t[A_i] t[Ai]则表示元组t中相应与属性 A i A_i Ai的一个分量
若 A = A i 1 , A i 2 , . . . , A i k A={A_{i1},\ A_{i2},\ ...,\ A_{ik}} A=Ai1, Ai2, ..., Aik,其中 A i 1 , A i 2 , . . . , A i k A_{i1},\ A_{i2},\ ...,\ A_{ik} Ai1, Ai2, ..., Aik是 A 1 , A 2 , . . . , A n A_1,\ A_2\ ,\ ...,\ A_n A1, A2 , ..., An中的一部分,则A称为属性列或属性组
t [ A ] = ( t [ A i 1 , t [ A i 2 , . . . , t [ A i k ] ) t[A]=(t[A_{i1},\ t[A_{i2},\ ...,\ t[A_{ik}]) t[A]=(t[Ai1, t[Ai2, ..., t[Aik])表示元组t在属性列A上诸分量的集合, A ˉ \bar{A} Aˉ则表示 A i 1 , A i 2 , . . . , A i k {A_{i1},\ A_{i2},\ ...,\ A_{ik}} Ai1, Ai2, ..., Aik中去掉 A i 1 , A i 2 , . . . , A i k {A_{i1},\ A_{i2},\ ...,\ A_{ik}} Ai1, Ai2, ..., Aik后剩余的属性组
R R R为 n n n目关系, S S S为 m m m目关系, t r ∈ R , t s ∈ S , t r ⌢ t s t_r\in R,\ t_s\in S,\ {t_r}^\frown{t_s} tr∈R, ts∈S, tr⌢ts称为元组的连接, t r ⌢ t s {t_r}^\frown{t_s} tr⌢ts是一个 n + m n+m n+m列的元组,前 n n n个分量为 R R R中的一个 n n n元组,后 m m m个分量是 S S S中的一个 m m m元组
给定一个关系
R
(
X
,
Z
)
R\ (X,\ Z)
R (X, Z),
X
X
X和
Z
Z
Z为属性组,当
t
[
X
]
=
x
t[X]=x
t[X]=x时,
x
x
x在
R
R
R中的象集
Z
x
Z_x
Zx为
Z
x
=
{
t
[
Z
]
∣
t
∈
R
,
t
[
X
]
=
x
}
Z_x=\{t[Z]\ |\ t\in R,\ t[X]=x\}
Zx={t[Z] ∣ t∈R, t[X]=x}
它表示
R
R
R中属性组
X
X
X上值为
x
x
x的诸元组在
Z
Z
Z上分量的集合
例:
R:
X | Y |
---|---|
x1 | y1 |
x1 | y2 |
x1 | y3 |
x2 | y3 |
x2 | y6 |
x3 | y1 |
x3 | y5 |
则
Z
x
1
=
{
y
1
,
y
2
,
y
3
}
Z
x
2
=
{
y
3
,
y
6
}
Z
x
3
=
{
y
1
,
y
5
}
Z_{x1}=\ \{y1,\ y2,\ y3\}\\ Z_{x2}=\ \{y3,\ y6\}\\ Z_{x3}=\ \{y1,\ y5\}
Zx1= {y1, y2, y3}Zx2= {y3, y6}Zx3= {y1, y5}
选择 Selection
选择又称为限制 Restriction 在关系R中选择满足给定条件的诸元组 记作:
σ
F
(
R
)
=
{
t
∣
t
∈
R
∧
F
(
t
)
=
t
r
u
e
}
\sigma_F\ (R)\ = \ \{t\ |\ t\in R\wedge F(t) = true\}
σF (R) = {t ∣ t∈R∧F(t)=true}
其中
F
F
F为选择条件 基本形式为:
X
1
θ
Y
1
X_1\ \theta\ Y_1
X1 θ Y1
其中,
θ
\theta
θ表示比较运算符,它可以是
>
(
大于
)
,
<
(
小于
)
,
>
=
(
)
大于等于
,
<
=
(
小于等于
)
,
<
>
(
不等于
)
>(大于),<(小于),>=()大于等于,<=(小于等于),<>(不等于)
>(大于),<(小于),>=()大于等于,<=(小于等于),<>(不等于),
X
1
,
Y
1
X_1,Y_1
X1,Y1是属性名,或为常量,或为简单函数,属性名可以用它的序号来代替
例:
在学生表中查询所有分数在90分以上的学生
θ
S
s
u
m
>
90
(
S
t
u
d
e
n
t
)
\theta_{Ssum>90}\ (Student)
θSsum>90 (Student)
投影 Projection
从R中选择出若干属性列组成新的关系
π
A
(
R
)
=
{
t
[
A
]
∣
t
∈
R
}
\pi_{_A}\ (R)\ =\{t[A]\ |\ t\in R\}
πA (R) ={t[A] ∣ t∈R}
其中: A: R中的属性列 投影操作主要是从列的角度进行运算 投影之后不仅取消了原关系中的某些列 ,还可能取消某些元组(避免重复元组)
例:
只查询学生姓名与分数
π
S
n
a
m
e
,
S
s
u
m
(
S
t
u
d
e
n
t
)
\pi_{{Sname,Ssum}}\ (Student)
πSname,Ssum (Student)
连接 Join
又称为
θ
\theta
θ连接,表示从两个关系的笛卡尔积中选取属性间满足一定条件的元组
R
⋈
A
θ
B
S
=
{
t
r
⌢
t
s
∣
t
r
∈
R
∧
t
s
∈
S
∧
t
r
[
A
]
θ
t
s
[
B
]
}
R\ \bowtie_{A\theta B} S = \{{t_r}^\frown{t_s}\ |\ t_r\in R\ \wedge\ t_s\in S\ \wedge\ t_r[A]\theta\ t_s[B]\}
R ⋈AθBS={tr⌢ts ∣ tr∈R ∧ ts∈S ∧ tr[A]θ ts[B]}
A和B : 分别为R和S上度数相等并且可比的属性组
θ \theta θ : 比较运算符
运算结果 : 从R和S的广义笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系 θ \theta θ的元组
等值连接 equijoin
θ \theta θ为 ′ = ′ '=' ′=′的连接运算称为等值连接
等值连接的含义 : 从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组
R
⋈
A
=
B
S
=
{
t
r
⌢
t
s
∣
t
r
∈
R
∧
t
s
∈
S
∧
t
r
[
A
]
=
t
s
[
B
]
}
R\ \bowtie_{A= B} S = \{{t_r}^\frown{t_s}\ |\ t_r\in R\ \wedge\ t_s\in S\ \wedge\ t_r[A]\ =\ t_s[B]\}
R ⋈A=BS={tr⌢ts ∣ tr∈R ∧ ts∈S ∧ tr[A] = ts[B]}
自然连接 Natural join
自然连接是一种特殊的等值连接 两个关系中进行比较的分量必须是相同属性组 在结果中把重复的属性列去掉
自然连接的含义 : R和S具有相同的属性组B
R
⋈
S
=
{
t
r
⌢
t
s
∣
t
r
∈
R
∧
t
s
∈
S
∧
t
r
[
B
]
=
t
s
[
B
]
}
R\ \bowtie S = \{{t_r}^\frown{t_s}\ |\ t_r\in R\ \wedge\ t_s\in S\ \wedge\ t_r[B]\ =\ t_s[B]\}
R ⋈S={tr⌢ts ∣ tr∈R ∧ ts∈S ∧ tr[B] = ts[B]}
自然连接还需要取消重复列 所以是同时从行和列的角度进行运算
悬浮元组: 两个关系R和S在进行自然连接时,关系R和S中被舍弃的元组称为悬浮元组
外连接: 如果把悬浮元组舍弃的元组也保存在结果关系中,在其他属性上填上空值 null,这种连接就叫做外连接
左外连接 : 只保留左边关系R中的悬浮元组
右外连接 : 只保留右边关系S中的悬浮元组
例:
R
A | B | C |
---|---|---|
a1 | b1 | 5 |
a1 | b2 | 6 |
a2 | b3 | 8 |
a2 | b4 | 12 |
S
B | E |
---|---|
b1 | 3 |
b2 | 7 |
b3 | 10 |
b3 | 2 |
b5 | 2 |
R ⋈ C < E S R\Join_{C<E} S R⋈C<ES (一般连接)
A | R.B | C | S.B | E |
---|---|---|---|---|
a1 | b1 | 5 | b2 | 7 |
a1 | b1 | 5 | b3 | 10 |
a1 | b2 | 6 | b2 | 7 |
a1 | b2 | 6 | b3 | 10 |
a2 | b3 | 8 | a2 | b3 |
R ⋈ S R\Join S R⋈S (自然连接)
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
除 Division
给定关系 R ( X , Y ) R(X,Y) R(X,Y),和 S ( Y , Z ) S(Y,Z) S(Y,Z),其中 X , Y , Z X,Y,Z X,Y,Z为属性组, R R R中的 Y Y Y与 S S S中的 Y Y Y可以有不同的属性名,但必须出自相同的域
R R R与 S S S的除运算得到一个新的关系 P ( X ) P(X) P(X), P P P是 R R R中满足下列条件的元组在 X X X属性列上的投影
元组在
X
X
X上分量值
x
x
x的象集
Y
x
Y_x
Yx包含
S
S
S在
Y
Y
Y上投影的集合 记作:
R
÷
S
=
{
t
r
[
X
]
∣
t
r
∈
R
∧
π
Y
(
S
)
⊆
Y
x
}
R\div S\ = \ \{tr[X]\ |\ tr\in R\wedge \pi Y(S) \subseteq Y_x \}
R÷S = {tr[X] ∣ tr∈R∧πY(S)⊆Yx}
Y
x
Y_x
Yx :
x
x
x在
R
R
R中的象集,
x
=
t
r
[
X
]
x=tr[X]
x=tr[X]
例:
R
R
R
A | B | C |
---|---|---|
a1 | b1 | c2 |
a2 | b3 | c7 |
a3 | b4 | c6 |
a1 | b2 | c3 |
a4 | b6 | c6 |
a2 | b2 | c3 |
a1 | b2 | c1 |
S S S
B | C | D |
---|---|---|
b1 | c2 | d1 |
b2 | c1 | d1 |
b2 | c3 | d2 |
Z a 1 = { ( b 1 , c 2 ) , ( b 2 , c 3 ) , ( b 2 , c 1 ) } Z a 2 = { ( b 3 , c 7 ) , ( b 2 , c 3 ) } Z a 3 = { ( b 4 , c 6 ) } Z a 4 = { ( b 6 , c 6 ) } Z_{a1}=\{(b1,c2),\ (b2,c3),\ (b2,c1)\}\\ Z_{a2}=\{(b3,c7),\ (b2,c3)\}\\ Z_{a3}=\{(b4,c6)\}\\ Z_{a4}=\{(b6,c6)\}\\ Za1={(b1,c2), (b2,c3), (b2,c1)}Za2={(b3,c7), (b2,c3)}Za3={(b4,c6)}Za4={(b6,c6)}
π B , C ( S ) \pi _{{B,C}} (S) πB,C(S)
B | C |
---|---|
b1 | c2 |
b2 | c1 |
b2 | c3 |
π B , C ( S ) \pi _{_{B,C}} (S) πB,C(S)只包含象集 Z a 1 Z_{a1} Za1的所有元素
所以
R ÷ S R\div S R÷S
A |
---|
a1 |