数据库系统原理之关系模型的基本概念(一)
关系型数据库是基于关系模型理论的,在学习关系型数据库之前,最好掌握一些关系模型的知识,方便进行类比的学习。
首先来看一下关系模型的介绍。
关系模型的介绍
关系模型最早是由 E.F.Codd 在 1970 年,在集合论和逻辑学理论的基础上,通过对表(Table)和表的操作进行严格的数学定义提出的。
也就是说,关系模型,是一个数学模型。使用数学的方法对表(Table)和表的操作进行了定义。
著名的 SQL 语言,就是基于关系模型的数据库操作语言。很多的数据库理论,也是基于关系模型提出的。关系模型和层次模型以及网状模型(后面两个模型已经过时,不再使用了),是三大数据库模型之一。
关系模型研究的内容
从定义上看,我们知道关系模型就是用来处理 Table 的,包含三个方面的内容:
- 使用数学方法描述数据库的基本结构形式(Table/Relation)
- 使用数学方法描述 Table/Relation 与 Table/Relation 之间的各种操作(关系运算)
- 使用数学方法描述实现这些操作应该遵循的约束条件(完整性约束)
现在我们使用的关系型 DBMS,就是对关系模型理论的一种实现,在 DBMS 中对表各种操作,都有一整套的数学理论作为支撑。
关系运算
关系运算就是使用数学的方法,来对 Table/Relation 和 Table/Relation 之间的操作进行描述,包括两部分内容:基于集合论的关系代数运算和基于逻辑学理论的关系演算运算。关系模型是基于集合论和逻辑学理论提出的,基于这两套数学理论进行的运算自然必不可少。
我们在 DBMS 中做的各种操作:如数据库的定义和数据库的查询,都可以转换为关系运算这样的数学语言。事实上 DBMS 也正是这样做的:提供 SQL 语言让使用者进行数据库操作,然后底层将 SQL 语言转换为相应的数学语言进行运算,得出结果。
因此,如果我们学会了怎样使用关系运算来定义表,怎样使用关系运算来操作表,那么再去学习 SQL 也就不在话下了。
什么是关系
关系(Relation)和表(Table)各自指什么呢?它们之间有什么样的区别?要弄清这个问题,首先需要知道关系的确切含义。
域
域是一组具有相同数据类型的数据的集合,集合中的个数叫做域的基数。每一列中的数据,都是域中某一个值,虽然不一定知道具体是域中的哪一个值,但我们知道总共有哪些类型的取值。
对于行也是如此,虽然我们不知道某一行(元组)具体的值是什么,但我们知道这一行(元组)有哪些可能的值。
笛卡尔积
所有行(元组)的集合,就是笛卡尔积。举例来说,我们有两个域:手机(小米,三星,苹果)和电脑(联想,戴尔,惠普)。这两个域构成的所有可能的元组如下:
手机 | 电脑 |
---|---|
小米 | 联想 |
小米 | 戴尔 |
小米 | 惠普 |
三星 | 联想 |
三星 | 戴尔 |
三星 | 惠普 |
苹果 | 联想 |
苹果 | 戴尔 |
苹果 | 惠普 |
这两个域构成了一共有 个元组的集合,这个集合就是手机和电脑域的笛卡尔积,基数为9。
假设我们有 n 个域 ,每个域的基数为
,那么它们构成的笛卡尔积的基数为
。
通过数学方式来描述笛卡尔积的定义如下:
关系
多个域构成的笛卡尔积中的元组并不都是有意义的,我们把这些有意义的元组提取出来形成的新的集合,就叫做关系。关系是由一系列有意义的元组的集合,其是笛卡尔积的子集。
他们之间也有一些区别,如笛卡尔积使用列,关系使用字段或属性,笛卡尔积使用行,关系使用元组。
关系和笛卡尔积,都是数学上的概念。
关系模式
通过来表示关系的结构,可以简写为
,这样的描述方式也叫做关系模式(Schema)。关系模式是对关系的一种结构性描述。
R 是关系名,Ai 是属性,Di 是属性所在的域,n 是关系的度或者目(属性的个数),关系中元组的数目称为关系的基数。
在 DBMS 中,我们一般使用数据类型作为域,如 integar,char,date ···,在数据库中可以这样使用关系模式:
现在我们类比着看关系模型和数据库中的一些概念,,是不是觉得很相似呢?的确,数据库可不简单,其背后有一整套的数学理论进行着支撑!
关系模式和关系
关系模式是固定不变的,是稳定的。关系是关系模型在某一时刻的值,是可以发生变化的,关系模式是关系的结构。
关系和表
关系是数学上的概念,表是关系型 DBMS 对于关系的实现,二者有着基本相似的概念,也有一些区别。比如关系要求元组不能相同,而数据库表中的行是可以相同的(不考虑主键)。
总结
本文主要介绍了关系模型的一些基本概念,包括关系模型的介绍,研究内容,以及对笛卡尔积,关系,域,关系模式这些概念进行了介绍,关系模型和关系是数学上的概念,数据库的表则是对关系模型的一种实现。这部分概念性的东西有点多,一篇文章来写感觉太长了,剩下的一点内容,在后文进行介绍。
完。