前言
前面我们讲了关系模型就是一张扁平的二维表,它只包含一种数据结构-关系,这是一种非形式化的概念,现在我们从出集合论角度给出关系数据结构的形式化定义
域
在上篇好像是说过的,一组具有相同数据类型的值的集合,比如性别的集合都是char类型,且只能选择男或女两种值,那么它的就是:
{男,女} //当然如果有第三种,那就自已看着办
笛卡尔积
笛卡尔积是域上的一种集合运算
- 数学代数式表达:
假设一组域为D1,D2,…,Dn,允许其中某些域是相同的,那么D1xD2x…xD3的笛卡尔积为:
D1xD2x...xDn = {(d1,d2,...,dn) | di∈Di,i=1,2,..,n}
每一个元素的(d1,d2,…,dn)叫做元组,元素中的每一个 di 叫做一个元组的分量,一个域允许的不同取值范围个数称为这个域的基数
- 实例证明
假设有D1,D2,D3三个域,且域的数据类型相同,并具有一定的联系
D1=导师集合={赵一,钱二}
D2=专业集合={计算机专业,信息专业}
D3=研究生集合={张三、李四}
观察可知笛卡尔积的基数为 2x2x2=8 ,那么它的笛卡尔积为:
D1xD2xD3 = {(赵一,计算机专业,张三),(赵一,计算机专业,李四),
(赵一,信息专业,张三),(赵一,信息专业,李四),
(钱二,计算机专业,张三),(钱二,计算机专业,张三),
(钱二,信息专业,李四),(钱二,计算机专业,李四)}
据结果又可知笛卡尔积的元组数为:2x2x2=8,然后我们将12个元组用二维表展开,如下:
导师 | 专业 | 研究生 |
---|---|---|
赵一 | 计算机专业 | 张三 |
赵一 | 计算机专业 | 李四 |
赵一 | 信息专业 | 张三 |
赵一 | 信息专业 | 李四 |
钱二 | 计算机专业 | 张三 |
钱二 | 计算机专业 | 李四 |
钱二 | 信息专业 | 张三 |
钱二 | 信息专业 | 李四 |
关系
关系的结构
如上笛卡尔积可知D1xD2x…xDn的子集叫做在域D1xD2x…xDn上的关系,表示为:
R(D1xD2x...xDn) //这里的R表示关系的名字,n是关系的目或度,也可以看做一张表有多少列
关系中每个元素是关系中的元组,通常用 t 表示
当n=1时,称该关系为单元关系,或一元关系,
当n=2时,称该关系为二元关系,
当n=m时,称该关系为m元关系
码
- 候选码,一个关系中的某一属性组的值能唯一地表示一个元组,而其子集不能,则称该属性组为候选码
如R(学号,姓名,性别)中,学号可以知道这个学生的姓名,也可以知道这个学生的性别,那么学号是这个关系的候选码
- 主码,若一个关系有多个候选码,则选定其中一个为主码
很明显学号是候选码,所以就是这个关系的主码
- 主属性,候选码的诸属性称为主属性
- 非主属性,不包含在任何候选码中的属性称为非主属性或非码属性
- 全码,若一个关系中所有属性是这个关系模式的候选码,称为全码
关系的类型
关系有三种类型:基本关系(通常又称基本表或基表)、查询表和视图表
- 基本表是实际存在的表,它是实际存储数据的逻辑表示
- 查询表时查询结构对应的表
- 视图是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
基本关系的6条性质
- 列是同质的,即每一列中的分量是同一类型的数据,来自同一个域
- 不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名
- 列的顺序无所谓,即列的次序可以任意交换
- 任意两个元组的候选码不能取相同的值
- 行的顺序无所谓,即行的次序可以任意交换
- 分量必须取原子值,即每一个分量都必须是不可分的数据项
关系模式
关系的描述称为关系模式,它可以形式化地表示为
R(U,D,DOM,F)
- R为关系名
- U为组成该关系的属性名集合
- D为U中属性所来自的域
- DOM为属性向域的映像集合
- F为属性间数据的依赖关系集合
示例
subject( //研究课题关系
U{name,major,tutor} //关系的属性集{学生姓名,专业,导师}
D{char} //关系的属性所在域的集合{字符串类型}
DOM{DOM(name)=DOM(major)=DOM(tutor)=char} //属性向域的映像集合{分别解释关系中的属性来自那个域}
F{name->major,(name ,major)->tutor} //属性间数据的依赖关系集合{学生姓名可以确定属于那个专业,学生姓名和专业可以确定导师是谁}
)
借鉴
王珊,萨师煊.数据库系统概论(第五版)[M].北京:高等教育出版社,2014:38-43.