关系模型三要素 : 数据结构,完整性约束,操作集合
数据结构
关系数据模型用二维表来组织数据,这个二维表在关系数据库中就称为关系。关系数据库就是表或者说是关系的集合,表示逻辑结构而不是物理结构。
关系系统要求让用户所感觉的数据就是一张张表。
![](https://i-blog.csdnimg.cn/blog_migrate/13e3345aaa75d23c655f4ae3debfbb4c.png)
关系模型的操作对象:集合/表 。不是单个的数据行
集合处理能力是关系数据库特有的特征。
在非关系模型中,各个数据记录之间是通过指针等方式连接的,当要定位到某条记录时,需要用户自己按指针的链接方向逐层查找——导航。
在关系模型中,用户只需指定数据的定位条件,数据库管理系统就可以自动定位到该数据记录——非导航。
简单来说,非关系模型,每次查找,都要从根开始查找,而关系模型可以直接定位。
数据完整性约束:
实体完整性,参照完整性/引用完整性,用户定义的完整性
关系模型的基本术语
关系(relation):就是二维表。关系名就是二维表的表名
属性(attribute)/字段:
二维表中的每个列就称为一个属性/字段
属性名:
每个属性/每一列的名字
属性值:
每一列的值
关系的元数:
列的个数
值域(domain):
二维表中属性的取值范围 例如:性别:{男,女}
元组(tuple):
二维表中的一行数据/记录
分量(component):
元组中的每一个属性值 (一行中的一个格子)
关系模式(relation schema):
二维表的结构称为关系模式或者二维表的表头结构
设有关系名为R,属性分别为A1,A2,...An,则关系模式可以表示为:
R(A1,A2,...An) : 学生(学号,姓名,性别)
关系数据库(relation database):对应于一个关系模型的所有关系的集合
候选键(candidate key)/候选关键字/候选码:如果一个属性或属性集的值能够惟一标识一个关系的元组而又不包含多余的属性,则称该属性或属性集为候选键。
主键(paimary key)/主码/主关键字:当一个关系中有多个候选键时,从中选择一个作为主键。
每个关系只能有一个主键。
用于唯一的确定一个元组/一行
主键示例:
学生( 学号 ,姓名,性别,年龄,所在系)
选课(学号,课程号,成绩)
(主键/候选码 可以是单个属性,也可以是属性集合)
主属性(primary attribute) : 包含在任意候选键中的属性(不是集合)
非主属性:不包含在任一候选键中的属性
![](https://i-blog.csdnimg.cn/blog_migrate/0894a133a7962c02e51dc753ebfbcd94.png)
定义笛卡尔积:设D1,D2,...Dn为任意集合,定义笛卡尔积D1,D2,....Dn为:
D1XD2X...Dn={ ( d1,d2,...dn) | di ∈Di,i=1,2,...}
其中每一个元素( d1,d2,...dn)称为元组。
元组中每一个di称为是一个分量。
有点类似排列组合:
![](https://i-blog.csdnimg.cn/blog_migrate/0ffbef81db955bb1d2c784c3cebbe0fe.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9e12490abeccc2f47977dfe833785e80.png)
笛卡尔积 D1,D2,...Dn的任意一个子集称为D1,D2,...Dn上的一个n元关系
形式化的关系定义同样可以把关系看成二维表,给表中的每个列取一个名字,称为属性。
属性D1,D2,D3
n元关系有n个属性,一个关系中的属性的名字必须是唯一的。
属性Di(i=1,2,…,n)的取值范围称为该属性的值域。
即D3={男,女} 男和女就是D3这个属性的取值范围
注:
关系中的每个分量都是不可再分的最小属性
表中列的数据类型是固定的,即列中的每个分量都是同类型的数据,来自相同的值域。
不同列的数据可以取自相同的值域,每一个列成为一个属性,每个属性有不同的属性名。
关系表中列的顺序不重要。
关系表行的顺序也不重要。
同一个关系中的元组不能重复,即在一个关系中不能出现完全相同的两行。
完整性约束
数据完整性是指数据库中存储的数据是有意义的或正确的,和现实世界相符。
实体完整性 (主键)
保证每个元祖都是可识别的和唯一的
不允许存在主键值为空的记录以及主键值重复的记录
参照完整性 /引用完整性 (外键)
描述实体之间的联系的
或者值为空;
或者等于其所参照的关系中的某个元组的主键值。
用户定义的完整性 /域完整性/语义完整性(值域)
指明关系中属性的取值范围
D3={男,女} 男和女就是D3这个属性的取值范围
关系代数:
关系是由元组构成的集合。
关系代数的操作数和操作结果都是关系。
关系代数的三大要素 :运算对象,运算符,运算结果
![](https://i-blog.csdnimg.cn/blog_migrate/7f812b8fe28cf27822c0633af99ea887.png)
![](https://i-blog.csdnimg.cn/blog_migrate/af90c532e8c34b1670716ed6043d0f8d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cab2946767c817ff6cc5cbe88e17d01e.png)
R∪S={t | t∈R ∨t∈S }
R∩S={t | t∈R ∧t∈S }
R-S={t | t∈R ∧t ∉S }
RxS={tr ^ ts | tr∈ R∧ts∈S}
笛卡尔积示例:
![](https://i-blog.csdnimg.cn/blog_migrate/5a2692487644070eca37df921e59f5c6.png)
选择运算:选择满足条件的元组/行组成一个新的关系
σF(R)={ r | r∈R ∧ F(r)=‘真’ }
(f:表达式)
例如:σSdept=‘计算机系’ 条件表达式(Student 表名)
![](https://i-blog.csdnimg.cn/blog_migrate/13f96ecb34983f3af297fb627fe191a8.png)
投影运算:选择指定属性,组成一个新的关系
ΠA(R) = (t(A)| t∈R)
例如:∏sname,sdept 属性名(Student 表名)
![](https://i-blog.csdnimg.cn/blog_migrate/336583438ccff3a9aa82ecc7c5d70ecd.png)
连接运算:
用来连接相互之间有联系的两个关系,从而产生一个新的关系。
一般情况下,连接属性是出现在不同关系中的语义相同的属性,有笛卡尔积乘积导出。
连接形式:
θ连接(θ :=,>,<,>=,<=,!=)
等值连接(θ :=的情况)
自然连接
外连接
除操作:
![](https://i-blog.csdnimg.cn/blog_migrate/9e29385202c6697de45ae2f51d0a8c6f.png)
关系代数操作总结:
![](https://i-blog.csdnimg.cn/blog_migrate/e1e735f4685a43c18b6714df3a10383f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/27fe4829d7dcb141503af19b517a84b9.png)