2.关系模型
关系模型的数据结构及形式化定义
关系
1.域
定义:域是一组具有相同数据类型的值的集合
一个域允许的不同取值个数称为这个域的基数
域是属性的取值范围
2.笛卡尔积
定义:给定一组域 D1,D2,...,Dn。允许其中有相同的域,D1到Dn的笛卡尔积为
D1 * D2 * ... * Dn={(d1,d2,...,dn)|d∈Di,i=1,2,...,n}
每一个元素(d1,d2,...,dn)叫一个n元组,简称元组
元组中的di叫作一个分量
例:
D1=人(HUMANBEING)={张三,李四}
D2=性别(SEX)={男,女}
D3=年龄(AGE)={20,30}
则D1 * D2 * D3 ={(张三,男,20),(张三,男,30),(张三,女,20),(张三,女,30),
(李四,男,20),(李四,男,30),(李四,女,20),(李四,女,30)}
(张三,男,20),(李四,女,20)等都是元组,“张三”,“30”等都是元组的分量
笛卡尔积示例
| 人(HUMANBEING) | 性别(SEX) | 年龄(AGE) |
|---|---|---|
| 张三 | 男 | 20 |
| 张三 | 男 | 30 |
| 张三 | 女 | 20 |
| 张三 | 女 | 30 |
| 李四 | 男 | 20 |
| 李四 | 男 | 30 |
| 李四 | 女 | 20 |
| 李四 | 女 | 30 |
3.关系
一般来说,在关系模型中的D1,D2,...,Dn的笛卡尔积是没有实际语义的,只有它的某个真子集才有实际含义
按上表来说,张三不可能同时既是男20岁又是女30岁,所以上表的一个子集才是有意义的
| 人(HUMANBEING) | 性别(SEX) | 年龄(AGE) |
|---|---|---|
| 张三 | 男 | 20 |
| 李四 | 男 | 30 |
将次关系取名为HSA,则其关系模式可以表示为
HSA(HUMANBEING,SEX,AGE)
关系的定义:给定一组域D1,D2,...,Dn,允许其中有相同的域。他们的笛卡尔积的子集称为这与域上的关系,表示为
R(D1,D2,...,Dn)
R是关系名,n是关系的目或度
三种类型的关系
1.基本关系/基本表/基表:实际存在的表
2.查询结果:查询执行产生的结果对应的临时表
3.视图:由基本表或其他视图导出的虚表,不存储数据
如果某个域是个无限集合(例如整数域),那么包含这个域的关系就成了一个无限关系。此外,数学上的笛卡尔积不满足交换律,例如(d1,d2)≠(d2,d1)。
对应这些情况,当关系作为数据模型的数据结构时,需要给予如下的限定和扩充
1:无限关系在数据库系统中是无意义的,即限定关系模型中的关系必须是有限集合
2:为关系中的每个列附加一个属性名,取消关系属性的有序性,使得列的次序可以任意交换,结果就是使(d1,d2)=(d2,d1)
基本关系的6条性质
1.列是同质的,即每一列中的分量是同一类型的数据,来自于同一个域
2.不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名
3.列的次序可以任意交换
4.任意两个元组的码不能取相同的值
5.行的次序可以任意交换
6.分量必须取原子值,即每一个分量都必须是不可分的数据项
4.关系模式
关系的描述称为关系模式,表示为
R(U,D,DOM,F)
R:关系名
U:组成该关系的属性的属性名集合
D:U中属性所来自的域
DOM:属性向域的映像集合
F:属性间数据依赖关系的集合
关系和关系模式
- 关系是动态的,随时间不断变化的
- 关系模式是静态的,稳定的
- 关系是关系模式在某一时刻的状态或内容
(关系模式相当于模具,按照这个模具生产的产品是一个实际的关系)
在实际工作中,关系模式和关系都笼统的称为关系,需要根据上下文加以区别
5.关系操作
(1)基本关系操作
常用的操作分为两大类:查询操作和更新操作
1)查询:从数据库中找到我们想要的结果,查询是关系操作中最主要的部分
查询操作分为以下几种
- 选择:找到满足要求的记录
- 投影:选出满足条件的列
- 并:两个表并在一起
- 差:
- 笛卡尔积
(以上为5种基本操作)
- 交
- 连接
- 除
2)更新:包括数据插入,删除,修改
(2)关系数据语言的分类
1)关系代数(ISBL)
2)关系演算(ALPHA,QBE)
3)具有关系代数和关系演算双重特点的语言(SQL)
6.完整性约束
关系模型中有三类完整性约束:实体完整性,参照完整性,用户定义的完整性
其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称为关系的两个不变性
(1)实体完整性
若属性A是基本关系R的主属性,则A不能取空值并且不能相同的
实体完整性规则规定基本关系的所有主属性都不能取空值
(2)参照完整性
外码:设F是关系R的一个或一组属性,F不是R的主码,但F是另外一个关系S的主码,则称F是关系R的外码
R称为参照关系
S称为被参照关系
R和S可以是相同关系
参照完整性规则:若属性(属性组)F是基本关系R的外码,则对于R中每个元组在F上的值必须为:
或者取空值(F的每个属性值均为空值)
等于S中主码F的某个主码值
(外码属性必须存在于另外一个关系中)
例如关系:学生(学号,专业号)
专业号的值必须出自于关系 专业(专业名,专业号) 中专业号的值,你不能给学生分配一个不存在的专业号
(3)用户定义的完整性
根据用户需求,用户自己定义完整性
7.关系代数
关系代数是一种抽象的查询语言,对关系的运算来表达查询
运算对象时关系,运算结果也是关系
关系代数按照运算符不同可分为集合运算和专门的关系运算
- 集合运算是从关系的水平即行的角度进行
- 专门的关系运算不仅涉及行而且涉及列
(1)集合运算
关系R与S具有相同的目(两个关系都有n个属性),相应的属性取自同一个域
//t表示一个元组
并:R∪S={t|t∈R∨t∈S}
差:R-S={t|t∈R∧t∉S}
交:R∩S={t|t∈R∧t∈S}
笛卡尔积:
(2)专门的关系运算
象集:给定一个关系R(X,Z),当t[X]=x时,x在R中的象集定义为
Zx={t[Z]|t∈R,t[X]=x}
Zx1,Zx2,Zx3是x在R中的象集
选择σ
在关系R中选择满足给定条件的诸多元组,记作
σF(R)
F是选择条件
例:σSage<18(Student),从学生表中选择Sage<18的学生
属性也可以用数字代替
投影π
从R中选择出若干属性列组成新的关系,记作
πA(R)
A:R中的属性列

连接⋈
连接也成Θ连接,记为R$\underset{AΘB}{⋈}$S
从两个关系的笛卡尔积R×S中选取,R上A属性组组的值,和S上B属性组的值,满足比较关系Θ的元组
A和B:R和S上度数相等(属性数量相等)且可比的属性组
两种常用连接
- 等值连接

当Θ为"="的连接称为等值连接
从R×S中选择A属性组和B属性组相等的元组
- 自然连接R⋈S
特殊的等值连接,R与S当中比较的属性组名字是相同的,域也是相同的
自然连接会取消重复列,只保留一列
一般连接

自然连接,比较属性组BC
- 悬浮元组:
对于上例,两个关系在自然连接时被舍弃(不符合条件)的元组称为悬浮元组
- 外连接:将悬浮元组也保存在自然连接关系中,其他属性上填上空值NULL,这种连接就成为外连接
- 左外连接:只保存左边关系的悬浮元组的外连接
- 右外连接:只保存右边关系的悬浮元组的外连接
除÷
给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R.Y和S.Y可以有不同的属性名,但必须出自相同的域
R÷S会得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影
条件:元组在X上分量x的象集Yx包含S在Y上投影的集合
R÷S={t[X]|t∈R∧πY(S)⊆Yx}
Yx:x在R中的象集,x=t[X]

a1的象集为{(b1,c2),(b2,c3),(b2,c1)}
a2的象集为{(b3,c7),(b2,c3)}
a3的象集为{(b4,c6)}
a4的象集为{(b6,c6)}
关系S在属性组BC上的投影为{(b1,c2),(b2,c1),(b2,c3)}
所以只有 BC(S)⊆BCa1

浙公网安备 33010602011771号