关系模型的数据结构非常简单, 只包含单一的数据结构 : 关系, 在用户看来关系模型中数据的逻辑结构是一张扁平的二维表.
关系模型的数据结构虽然简单, 但是可以表达丰富的语义, 描述现实世界实体与实体之间的各种联系.
关系模型是建立在集合代数的基础上, 这里从集合论的角度给出关系数据结构的形式化定义 :
域
域是一组相同数据类型的值得集合. 例如 : 自然数 整数 实数…
笛卡儿积
笛卡儿积是域上的一种集合运算.
给定一组域, D1, D2, D3 … 且允许某些域是相同的, 则 D1, D2, D3… 的笛卡儿积为 D1 X D2 X ... X Dn = {(d1, d2, d3, ..., dn) | di ∈ Di, i = 1,2,3...}
, 其中, 每一个元素 (d1, d2, …) 称为一个 n 元组, 简称为元组, 元组中的每一个值 di 叫做一个分量.
一个域允许的不同取值个数称为这个域的基数, 例如 若 Di (1,2,3,4…) 为有限集, 其基数为 mi ( i = 1, 2, 3…), 则D1 X D2 X … X Dn 基数为 M = m(i-1) + mi (i 从 1 到 n 累加)
关系
定义 :
D1 X D2 X … X Dn 的子集叫做在域 D1, D2, D3 … Dn 上的关系, 表示为 R(D1, D2, D3) , 其中 R 为关系的名字, n 是关系的目或者度.
当 n = 1 时, 该关系称为单元关系, 或一元关系.
当 n = 2 时, 该关系称为二元关系.
属性 :
由于关系是笛卡儿积的有限子集, 因此关系也是一张二维表, 表中的每行对应一个与元组, 每列对应一个域, 由于 域 是可以相同的, 为了加以区分, 必须对每列起一个名字, 称为属性, n 目关系必有 n 个属性.
主码与候选码 :
若关系中某一属性组的值可以唯一标识一个元组, 而子集不能, 则称该属性组为候选码. 若一个关系有多个候选码, 则选一个为主码, 候选码的诸属性称为主属性, 不包含在任何候选码中的属性称为非主属性, 或非码属性.
最极端的情况下, 关系模式中的所有的属性都是这个关系模式的候选码, 称为全码.
类型 :
关系可以有三种类型 : 基本关系 查询表 视图表
基本关系 : 实际存在的表, 实际存储数据的逻辑表示.
查询表 : 查询结果对应的表
视图表 : 由基本表或者其他表导出的表, 是虚表, 不对应实际存储数据.
基本关系的性质 :
在关系型数据库中, 关系模式是型, 关系是指, 因此关系模式的任务就是对关系进行描述 : 即他由哪些属性组成以及他们对应的域, 以及属性和域之间的关系.
定义 :
关系的描述称为关系模式, 可以形式化的表示为 :
R(U,D,DOM,F) :
R : 关系名
U : 组成该关系的属性名的集合.
DOM : 属性向域的映射集合.
F : 属性间数据的依赖关系集合.
在一个给定的应用领域, 所有关系的集合构成一个关系数据库.
关系数据库也有型和值之分, 关系数据库的型称为关系数据库模式, 是对关系数据库的描述, 关系数据库模式包括若干域的定义,以及在这些域上定义的若干关系模式.
关系数据库的值是这些关系模式在某一时刻对应的关系的集合, 称为关系数据库.
关系模型中有三类完整性约束 : 实体完整性, 参照完整性, 用户定义完整性.
其中实体完整性和参照完整性是关系模型中必须满足的完整性约束条件, 称为关系的两个不变性.
用户定义完整性是应用领域需要遵循的约束条件, 体现了具体领域的语义约束.
若属性 A 是基本关系 R 中的主属性组, 则 A 中的任何一个属性都不能取空值, 空值就是不知道,不存在和无意义的值.
若属性 F 是基本关系 R 中的一个外码, 则属性 F 可以为空值, 但是如果不为空值则值必须在 R 中存在.
不同数据关系数据库系统根据其应用环境不同还需要一些特殊的条件, 比如学生的成绩范围要在 0 - 100 之间.
关系模型中常用的关系操作包括查询和修改 删除 添加两大部分.
其中查询操作时最主要的部分, 查询操作又分为选择 投影 连接 除 并 差 交 并 笛卡儿积 等.
关系代数是一种抽象的查询语言, 他是采用对关系的运算来表达查询.
可分为 : 传统的关系运算和专门的关系运算
并 : R ∪ S = {t | t ∈ R V t ∈ S}
交 : R ∩ S = {t | t ∈ R ^ t ∉ S}
差 : R - S = {t | t ∈ R ^ t ∈ S}
笛卡儿积 : R X S = {tr ts| tr ∈ R ^ ts ∈ S }
例子 : R 与 S 的 并,交,差,笛卡儿积
R :
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
S :
A | B | C |
---|---|---|
a1 | b2 | c2 |
a1 | b3 | c2 |
a2 | b2 | c1 |
R ∪ S
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
a1 | b3 | c2 |
R ∪ S
A | B | C |
---|---|---|
a1 | b2 | c2 |
a2 | b2 | c1 |
R - S
A | B | C |
---|---|---|
a1 | b1 | c1 |
R X 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 中选择满足给定条件的各元组. 记作 : δf® = {t | t ∈ R,^ f(t) = “真”}
f 表示选择条件, 他是一个逻辑表达式, 取逻辑值 真或者 假.
f的基本形式是 : X1 θ X2 其中 θ 可以使 >, >=, < , <=, =, 或者 <> . X1 Y1 是属性名, 或为常量, 或为简单的函数, 在基本选择的基础上可以进一步进行逻辑运算, 即进行求非, 与, 或 运算.
投影 :
关系 R 上的投影是从 R 中选择若干属性列组成新的关系. 记作 : ∏A ® = {t[A] | t ∈ R}.
其中 A 为 R 中的属性列.
投影之后不仅取消了原关系中的某个列, 而且还可能取消某些元素, 因为取消了某些属性列之后, 就可能出现重复行, 应取消这些完全相同的行.
连接 :
连接也称为 θ 连接, 他是从两个关系的笛卡儿积中选取属性间满足一定条件的元组, 当 θ 为 = 时, 连接运算称为等值连接.
自然连接时一种特殊的连接, 他要求两个关系中进行比较的分量必须为同名的属性组, 并且在结果中把重复的属性列去掉.
在进行自然连接中, 关系R中的某些元组或者S中的某些元组经过比较不会被选中, 这些被舍弃的元组称为悬浮元组.
如果把悬浮元组也保存在关系结果中, 那么这种连接称为外连接, 如果只保存左边关系的悬浮元组,就叫做左连接, 如果只保留右边关系的悬浮元组就叫做右外连接.
除运算 :
定义晦涩难懂不在累赘, 直接给出怎么进行运算.
R ÷ S 为例
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 :
B | C | D |
---|---|---|
b1 | c2 | d1 |
b2 | c1 | d1 |
b2 | c3 | d2 |
第一步 : 找出两个关系中相同属性组.
相同属性组为 B 和 C.
第二步 : 列出 R 中不同属性组的值.
在 R 中不同属性为 A
A 的值为 : {a1,a2,a3,a4}
第三步 : 找出的值的象集
A 中的值由 a1, a2, a3, a4
a1 的象集为 : {{b1,c2},{b2,c3},{b2,c1}}
a2 的象集为 : {{b3,c7},{b2,c3}}
a3 的象集为 : {{b4,c6}}
a4 的象集为 : {{b6,c6}}
第四步 : 比较 比较S中相同属性组的值是否都在某一个象集上, 如果是则给出结果
R 中相同属性组的值为 : {{b1,c2},{b2,c1},{b2,c3}}
与上面的象集进行比较, 发现只有 a1 中包含了 R 中的所有相同属性组的值.
写出结果 :
R ÷ S
A |
---|
a1 |