数据库基础---关系数据库简介和关系代数8种运算方法及例题

2017-11-09  本文已影响434人  刘翾

关系数据库

关系数据模型

关系是一个数学概念。
当把关系的概念引入到数据库系统作为数据模型的数据结构时,既有所限定和也有所扩充。

关系的数学定义

例:

课程={离散,C语言…..},学生={张三,李四…..}

笛卡儿积(cartesian product):设D1、...、Dn是n个域。D1、...、Dn上的笛卡尔乘积定义为集合
D1×...×Dn ={ (d1 , ..., dn ) | di ∈Di,1≤i≤n }。

解:

D1={离散,C语言…},D2={张三,李四…}
D1×D2={(离散,张三),(离散,李四),……
       (C语言,张三),(C语言,李四),……
       …….}

关系(relation):笛卡尔乘积D1×...×Dn的任意一个子集合称为一个定义在域D1、...、Dn上的关系。

对数学定义的限定和扩充

限定:无限关系在数据库系统中是无意义的。因此限定关系数据模型中的关系必须是有限集合。

数学上,(离散,张三)≠(张三,离散)
扩充:通过为关系的每个域附加一个属性名的方法取消关系元组的有序性
数据库上:(离散,张三)=(张三,离散)

基本关系具有以下六条性质:


完整性约束规则

几个基本概念

关联完整性约束说明,任何关系的一个元组只能通过外部键与另一个关系中存在的元组相关联.


关系运算

关系代数

例: 两个关系实例


这里写图片描述这里写图片描述

(1.) 并运算

设R和S是n元关系,而且两者各对应属性的数据类型也相同。R和S的并操作定义为 R∪S = { t | t∈R∨t∈S }。
白话: R和S关系合一起, 相同的不写

这里写图片描述这里写图片描述

(2.) 差操作

设R和S是n元关系,而且两者各对应属性的数据类型也相同。R和S的差定义为 R-S ={ t | t∈R∧tS}。
白话: 因为是R-S, 找R在S关系中没有的

这里写图片描述这里写图片描述

(3.) 笛卡尔乘积

设R是n元关系,S是m元关系,R和S的的笛卡尔积定义为
R×S={(r1,...,rn,s1,...,sm)|(r1,..., rn )∈R∧(s1, ...,sm )∈S}。
白话: 和普通的笛卡尔乘机差不多, 自己看看, 规律很好找.

这里写图片描述这里写图片描述

(4. ) 投影操作

设R是一个n元关系,R的投影操作定义为
∏i1,i2,...,im(R) = {(ri1, ...,rim)|(r1 ,...,ri1,...,rim,...,rn)∈R}。
白话: 看横行, 如果有两个横行相同, 只写一个. 因此若是S关系投影操作的话, 也就是有b和a

这里写图片描述这里写图片描述

(5. ) 选择操作

设R是一个n元关系,F是一个形如riθc的公式,其中θ∈{=,≠,>,<,≤,≥},R的选择操作定义为F(R)={(r1,...,ri ,...,rn )|(r1,...,ri ,...,rn )∈R∧riθc }。
白话: 把符合条件的拿出来

这里写图片描述这里写图片描述

(6. ) 交操作

设R和S是n元关系,而且两者各对应属性的数据类型也相同。R和S的交操作定义为 R  S = { t | t∈R∧t∈S }= R-(R-S)。
白话: 相同的拿出来

这里写图片描述这里写图片描述

(7. ) 连接操作

设R是n元关系,S是m元关系,A是R的属性,B是S的属性,A和B的值域具有相同的数据类型,θ∈{=, ≠, >, <, ≤, ≥}。R和S的连接操作定义为


这里写图片描述这里写图片描述

其中,r[A]表示元组r在属性A上的值,s[B]表示元组s在属性B上的值。我们称A和B是连接属性。

白话: 两个关系先做笛卡尔积运算, 然后再根据条件进行比对. 留下符合条件的
例子:

这里写图片描述这里写图片描述

(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的属性集合,XZ,Y=Z-X。R除以S的商定义为R÷S={t|t∏Y(R)且sS, tsR},其中,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. 在“研发部”工作的所有工作人员名字

这里写图片描述这里写图片描述

语言解释: 1. EMPLOYEE表与DEPARTMENT表在部门编号相等的条件下, 进行连接, 然后再新表中选择DNAME="研发部", 最后对NAME进行投影.
2 . 先在DEPARTMENT中选择"研发部", 然后与EMPLOYEE进行连接, 然后投影

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

这里写图片描述这里写图片描述

语言解释: 在WORKS_ON中选择P1项目, 与EMPLOYEE进行连接, 然后对NAME进行投影得到参加p1工作人员的名字, 最后用所有的名字减去它.

上一篇下一篇

猜你喜欢

热点阅读