数据库原理及应用-数据模型之关系数据模型
2018-02-04 23:03:28
一、关系数据模型
关系型数据模型的基本的数据结构只有一种:表(relation)。在关系数据模型中将现实世界中的实体以及实体的联系都用表来表达,而层次数据模型中是用记录来表示实体,PCR表示关系,网状数据类型中是用记录来表示实体,系来表示关系,关系型数据模型将两者统一采用表来表达,这是一个很大的区别。
关系模型的特性:
- 基于集合论的知识,有更高的抽象级别
- 屏蔽掉底层的实现算法,容易理解
- 引入关系代数系统
- 引入结构化的查询语言
- Soft link,软连接,通过建立对照表替代了指针
1、属性(Attributes)和域(Domain)
在现实世界中,描述一个事物,常常取其若干特征来描述,这些类型称为属性,属性的取值范围称为域。
在传统的关系数据模型中对域还加上了一个限制,就是所有的域都得是原子数据,也就是只能是基本的数据类型,不能出现表中套表的情况。允许出现空值。这称为一范式。
2、关系(Relation)和元组(Tuple)
将现实世界中的实体或者联系可以建立一张表或者多张表。
关系可以看成定义在其所有属性域上的多元关系,这称为关系的模式,n是属性的个数,也被称为关系的目。
对于关系的实例可以这样定义:
3、主键(Primary Key)
主键是一组属性集。主键(集)可以唯一确定一条元组,并且其任意子集无法做到这一点。如果不满足后一条我们称之为超键(super key)。比如id可以唯一确定一个人,{id,age}也可以唯一确定一条元组,但是其子集id也可以唯一确定一条元组,因此这被称为超键。
如果一个表中有多个主键,那么可以选择其中一个作为主键,其他的作为候补键(alternate key)。
如果主键由所有属性组成,则称之为全键(all key)。
4、外键(Foreign Key)及引用完整性
外键是一组属性集。外键(集)用来引用其他表中的元组,并且这个属性在被引用的表中得是主键。其实就是软连接。
引用完整性:如果把外键当作逻辑指针,那么它指向的元组必须是存在的,得非空。
5、其他的完整性约束
1)域完整性约束(Domain integrity constraint):值域得满足约束
2)实体完整性约束(Entity integrity constraint):主键的值不允许为空
二、关系代数
关系代数是关系数据模型的理论基础。
下面例子中使用的表:
- Projection
投影操作就是挑选表中需要的列,将不需要的列的去除掉。投影操作应该要去重(去除重复元组),因为如果两条元组所有属性值都相等是没有意义的。但实际应用中,一般来说不会自动去重。
- Selection
将所有满足条件的元组挑选出来。
- Union, Intersection, Set-Difference
集合的并交差操作,执行集合的这些操作需要满足并兼容条件:属性个数相同且属性的类型相同。
- Cross-Product
笛卡尔乘积将两个表进行拼接,具体过程是元组之间两两组合,如果遇到属性重名的情况,需要对属性进行重命名。
- Join
单纯的笛卡尔乘积是没有什么意义的,我们真正想要的是Join,也就是连接操作。
1)条件连接(Condition Join):先笛卡尔乘积,再选择操作(Sometimes called a theta-join)
2)等值连接(Equi-Join):条件连接中的C只有相等条件,将满足属性值相等的筛选出来
3)自然连接(Natural Join):在笛卡尔乘积上的所有公共属性上做等值连接,最常用。
- Division
虽然不是基本的操作,但是很常用。主要适用于回答类似这种问题:Find sailors who have reserved all boats.
- Outer Joins
外连接就是自然连接的扩展。首先进行自然连接,然后将不符合条件的补空值保留下来。外连接又分左外连接,右外连接和全外连接。
- Outer Unions
外并操作就是把两个不满足并兼容的表进行合并。结果的属性集是两张表的属性的并集,元组是每张表的元素加上不存在属性补上空值。
三、关系演算
除了使用关系代数来表示关系操作外,还可以使用谓词演算来表达关系的操作,这称为关系演算。用关系代数来表达关系操作需要表明操作之间的次序,因此关系代数是一种过程性语言。用关系演算表示关系的操作,只要说明需要得到的结果,而不必表明操作的过程,因此这是一种非过程语言。目前SQL语言的就是以关系演算作为基础的。
关系演算随着所用变量的不同又可分为一下两种,这两种的本质是一样的:
1)元组关系演算(Tuple Relational Calculus,TRC)
2)域关系演算(Domain Relational Calculus,DRC)
- 域关系演算
所谓域关系演算就是变量是表中的各个属性,结果就是使谓词逻辑为真的元组组成的表。
另外,值得一提的是在使用谓词演算的时候要防止不安全的查询,不安全查询是指结果元组是无穷多个的查询。例如:
就是要查询所有不在Sailors这张表里的元素,这里的查询结果就是无穷多个,是个不安全的查询。
- 元组关系演算
元组关系演算和域关系演算的本质上一样的,只是在变量的选择上有一点差别,元组关系演算顾名思义变量选择的是元组。
四、ER图
1)基数比约束
2)参与度约束
可以进一步的约束每个实体参与联系的最小最大次数称为参与度约束。可以用括号给出。
五、传统数据模型的弊端
我们将层次,网状和关系数据模型称为传统数据模型,传统数据模型有如下的弊端和局限:
- 适合OLTP(On-Line Transaction Processing)联机事务处理的应用,是一种结构化数据的处理
- 基于记录,不能很好的面向用户和应用
- 缺乏基本的语义信息,无法直观的看出各个表之间的联系
六、其他数据模型
- Logic-based data model ,基于逻辑的数据模型:支持递归查询,提升DBMS的推理能力;
- Temporal data model,时态数据模型:有时间线信息
- Spatial data model,空间数据模型:更好的表达空间物体的关系
- XML data model