关系数据库
关系数据模型
关系的数学定义
例:
课程={离散,C语言…..},学生={张三,李四…..}
解:
D1={离散,C语言…},D2={张三,李四…} D1×D2={(离散,张三),(离散,李四),…… (C语言,张三),(C语言,李四),…… …….}
关系(relation):笛卡尔乘积D1×…×Dn的任意一个子集合称为一个定义在域D1、…、Dn上的关系。
对数学定义的限定和扩充
限定:无限关系在数据库系统中是无意义的。因此限定关系数据模型中的关系必须是有限集合。
基本关系具有以下六条性质:
- 列是同质的,即每一列中的分量是同一类型的数据;
- 不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性必须给不同的属性名;
- 列的顺序可任意交换;
- 任意两个元组不能完全相同;
- 行的顺序可任意交换;
- 分量必须取原子值,即每一个分量都必须是不可分的数据项。
完整性约束规则
几个基本概念
- 候选键:给定关系模式R(U),K属于U,如果
(1) R(U)的任何关系实例中的任意两个元组在属性集合K上的值都不相同----唯一性
(2) K的任何真子集都不满足条件(1)----极小性
称K是候选键。
例:Student(姓名, 学生编号, 年级, 专业, 系)
显然,学生编号是候选键。
如果姓名不重复,姓名也是候选键。 - 主键:一个关系模式可能具有多个候选键。
当一个关系中具有多个候选键时,我们选择一个作为该关系模式的主键。
候选键中的属性称为键(主)属性,其他属性称为非键(主)属性 - 外部键:设X是关系模式R(U)的一个属性集合。如果X是另一个关系模式R’(U’)的主键,则称X是R(U)关于R’(U’)的外部键。
例:外部键

关联完整性约束说明,任何关系的一个元组只能通过外部键与另一个关系中存在的元组相关联.
关系运算
- 基于代数的定义:关系代数

- 基于逻辑的定义:关系演算
由于使用变量的不同,关系演算又分为元组关系演算和域关系演算。
关系代数
(1.) 并运算

(2.) 差操作

(3.) 笛卡尔乘积

(4. ) 投影操作

(5. ) 选择操作

(6. ) 交操作

(7. ) 连接操作

(7. 1) 几个特殊的连接操作
①自然连接 设Att(R)和Att(S)分别是R和S的属性集合。连接条件为R.B=S.B,连接的结果关系的属性集合为Att(R)∪(Att(S)-{B}),即B在结果关系中只出现一次。称这样的连接操作为自然连接操作,
白话: 找相同的然后拼在一起, 例如B属性, 看看下面的例子;

②复合连接 类似于自然连接,只是连接结果不包含连接属性。

③半连接

白话: 下面的例子由于是R半链接S, 则因此拿R去和S所比较

(8. ) 商操作
设R和S是两个关系,Z是R的属性集合,X是S的属性集合,XZ,Y=Z-X。R除以S的商定义为R÷S={t|t∏Y(R)且sS, tsR},其中,ts表示由t和s的各属性值构成的一个R关系元组。
白话: 看下面的例子, 因为C, D是关系S中的两个属性, 因此在R集合对除了C, D的属性, 即A, B两属性进行投影, 得到a, b; b, c; e, d;这三组, 然后用这个结果与关系S进行笛卡尔积运算, 发现b c c d这组在关系R中没有, 其余a, b; e, d; 做的运算在R中存在. 因此最后结果为a, b; e, d;

关系代数运算例题
一个COMPANY数据库

下面介绍了一些需要用到的属性解释
NAME--员工名字 SSN--员工编号 SUPERSSN--上司编号 DNO--部门编号 DNUMBER--部门编号 MGRSSN--负责人编号 PNAME--项目名称 PNUMBER--项目编号 ESSN--员工编号 PNO--项目编号
问1: 参加了p2项目的员工号(由于符号不太好打, 我手写的)

语言解释: 在WORKS_ON表中选择PNO=P2的元组, 再对员工号即ESSN进行投影.
问2. 在“研发部”工作的所有工作人员名字

问3. 没有参加项目p1的工作人员名字

语言解释: 在WORKS_ON中选择P1项目, 与EMPLOYEE进行连接, 然后对NAME进行投影得到参加p1工作人员的名字, 最后用所有的名字减去它.
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224923.html原文链接:https://javaforall.net
