数据库学习摘记 —— 关系代数和关系演算

关系数据结构

笛卡儿积:给定一组集合D1,D2,…,Dn,这些集合可以相同, 定义D1,D2,…,Dn 的笛卡尔积为:D1×D2×…×Dn={(d1,d2,…,dn) | di?Di,i=l,2,…,n},其中的每一个元素(d1,d2,…,dn)叫做一个n元组,元素中第i个值di叫做第i个分量。

关系:笛卡尔积D1×D2×…×Dn的任一个子集称为 D1,D2,…,Dn 上的一个关系。关系是元组的集合,亦即实 体的集合。

域:集合 D1,D2,…,Dn是关系中元组的取值范围,称为关系的域。关系中的每一列对应一个域,也称为关系的属性,不同的列可以有相同的域,列名对应域名,即属性名。

度:集合 D1,D2,…,Dn的n为关系的度。

候选键:能唯一地标识出一个元组的属性或属性组。

联合键:两个或两个以上属性组成的候选键。

全键:关系的全部属性构成关系的唯一候选键。该关系称为全键关系(All-Key Relation)

主键:在关系的多个候选键中选择的一个候选键,用它作为元组的唯一标示。在一个关系中只能有一个主键。

外键:关系R中的一组属性A不是关系R的主键,但A是另一个关系S的主键,则属性组A就是关系R的外键。

关系模式:若U={A1, A2 …, An}为关系R的属性集,则关系模式简记为R(U)或R(A1, A2, …, An)

?
?

完整性规则

实体完整性规则:关系中每个元组的主键属性对应的各个分量不能为空值。

参照完整性规则:设属性组A是关系R的外键且A又是关系S的主键,则对于R中的每一个元组在属性A上的值必须为:空值或者等于S中某一个元组的主键值。

实体完整性和参照完整性都是关系模型必须满足的完整性约束条件,这些约束条件由RDBMS自动支持。

用户定义的完整性:用户根据具体应用而对数据附加的约束条件。

?
?

关系代数中传统的集合运算

关系R与S是相容的: 若关系R和S满足:R和S具有相同的度;R中的第i个属性和S中的第i个属性定义在同一个域上。

并运算: R∪S;差运算:R-S;交运算:R∩S

广义笛卡尔积:设R为m元关系,S为n元关 系,则R与S的广义笛卡尔积R×S是一个(m+n) 元关系,其中的每个元组的前m个分量是R中的一个元组,后n个分量是S中的一个元组。若R有k1个元组,S有k2个元组,则R×S有(k1×k2)个元组,即广义笛卡尔积。

关系代数中专门的集合运算

选择运算:从关系Students中选取所有的男生。

其关系运算表达式为:σSsex=‘男‘(Students)

投影运算:选取学生关系Sudents中的所有Sname(姓名),Sage(年龄)和Class(班级)。

其关系运算表达式为:∏Sname, Sage, Class(Students)

连接运算:θ为算术比较符,从二个关系的广义笛卡尔 积中选取满足一定连接条件的元组。

自然连接:两个关系进行连接比较的属性列完全相同的等值连接,且结果关系中没有重复的属性。

R S=ΠB(σR.A=S.A(R×S)),B=ARUAS

除法运算:

T=Π1,2,…,n-m(R)

W=(T×S)-R????(计算T×S中不在R中的元组)

V=Π1,2,…,n-m(W)

R÷S=T-V

【查询选修了‘英语‘ 课程的学生姓名】

【检索选修了所有课程的学生编号和姓名】

SELECT Sname,Sno

FROM Students WHERE NOT EXISTS

(SELECT * FROM Courses WHERE NOT EXISTS

(SELECT * FROM Reports WHERE

SNO=Students.Sno AND Cno=Course.Cno))

元组关系演算

表达式的一般形式为{ t | α(t)},它是使α(t)为真的所有元组t构成的集合。其中,t是元组变量,α(t)是元组关系演算公式(简称公式),它由原子公式和运算符组成。

S-学生表、R-成绩表、C-课程表

【检索班级编号为‘199902‘的全班学生的学号】

{t[1] | S(t)∧t[5]=‘199902‘}

【查询选修了‘英语‘ 课程的学生姓名】

{t[2] | S(t)∧ヨu(R(u)∧u[1]= t[1]∧ヨv(C(v)∧v[1]=u[2]∧v[2]=‘英语‘))}

{t[2] | S(t)∧ヨuヨv (R(u)∧C(v)∧u[1]= t[1]∧v[1]=u[2]∧v[2]=‘英语‘)}

【检索选修了所有课程的学生】

{t | S(t)∧?v(C(v)∧ヨu(R(u)∧u[2]=v[1]∧u[1]=t[1]))}

域关系演算

【检索班级编号为‘199902‘的全班学生的学号】

{t1 | S(t1, t2, t3, t4, t5)∧t5=‘199902‘}}

【查询选修了‘英语‘课程的学生名】

{t2 | S(t1, t2, t3, t4, t5)∧ヨu1ヨu2ヨv1ヨv2(R(u1, u2, u3)∧C(v1, v2,v3)∧t1=u1∧u2=v1∧v2=‘英语‘)}

【检索选修了所有课的学生】

{(t1, t2, t3, t4, t5) | S(t1, t2, t3, t4, t5)∧ヨv1ヨu1ヨu2(R(u1, u2, u3)∧C(v1, v2, v3)∧u2=v1∧u1=t1)}

关系运算的安全限制

无限关系:当元组变元t中某一属性的定义域是无限时,如表示所有不在关系R中的元组的集合{t | ┐R(t)}。

无穷验证过程:t的取值范围为无限,如验证(?t)(ω(t))为真的过程。

安全表达式:不产生无限关系和无穷验证过程的表达式。

安全限制:为保证所有表达式都是安全表达式所采取的限制措施。

关系代数运算是安全的:当给定的所有关系是有限时,其运算的有限次复合不会出现无限关系和无穷验证。

等价:关系代数、安全的元组关系演算和安全的域关系演算的表达能力是等价的,可以相互转换。

安全限制方法:

定义一个ψ的有限符号集合,记作DOM(ψ)(不必是最小集合),它由以下两类符号构成:

ψ中的常量符号;

ψ中涉及的所有关系的所有元组的各个分量值。

这样,把{t | ┐R(t)}和(?t)(ω(t))中的t都全部限制在DOM(ψ)中取值,就不会出现无限关系和无穷验证过程,这时关系演算是安全的。

【关系R如右,求元组演算表达式S={t | ┐R(t)}】

令DOM(ψ)=∏A(R)∪∏B(R)∪∏C(R)={a, b, 1, 3, 7, 8},则结果关系:

S={ t | ┐R(t)}=DOM(ψ)×DOM(ψ)×DOM(ψ)-R。因此,由于有DOM(ψ)的安全限制,关系S中有216-2=214 个元组,故是有限的。

查询优化

途径:

代数优化:对查询语句进行变换,只改变其基本操作顺序提高查询效率,但不涉及存取路径。

物理优化:根据系统提供的存取路径,比如顺序或索引等来选取较好查询方案。

规则优化:根据一些启发式规则,如先做选择、投影,再做连接操作等来选择较好的查询方案。

代价优化:在规则基础上,对所提供的查询方案进行执行代价估算,选择代价最小的查询方案。

执行代价:

在集中式数据库中,查询的执行代价为:总代价=I/O代价+CPU代价

在多用户环境下查询的执行代价为:总代价=I/O代价+CPU代价+内存代价

查询优化策略(启发式规则):

选择运算应尽早执行

把投影运算和选择运算同时进行

把投影操作与它前面或后面的一个双目运算结合起来

在执行连接运算之前,可对需要连接的关系进行适当地预处理,如建索引或排序

把笛卡尔乘积和其后的选择运算合并成为连接运算

存储公用子表达式

查询优化的等价公式:

  • 笛卡儿积、自然连接和条件连接都满足交换律和结合律
  • 投影运算的串接:

  • 选择运算的串接:

  • 选择运算与投影运算交换:

  • 选择运算与笛卡尔积交换:

设F中涉及的属性都是E1的属性:

如果F=F1∧F2,且F1只涉及E1的属性,F2只涉及E2的属性:

如果F= F1∧F2 ,且F1只涉及E1的属性,F2涉及E1和E2两者的属性:

投影运算与笛卡尔积交换:

设E1、E2是两个关系代数表达式,A1,A2,…,An是E1的属性,B1,B2,…,Bm是E2的属性

查询优化的步骤:

  • 把查询要求转换成某种内部表示 ;

如关系代数语法树;

  • 把语法树转换成某种优化形式;

利用关系代数等价公式的优化算法

  • 选择低层的存取路径;

查询优化器根据数据字典获得当前数据库

  • 状态的信息

生成多个查询计划,选择代价最小的去完成查询任务。

?

?

?

?

原文地址:https://www.cnblogs.com/kuluo/p/12540253.html

时间: 2024-10-11 03:01:18

数据库学习摘记 —— 关系代数和关系演算的相关文章

数据库复习9——关系代数和关系演算

数据库复习 CH8 关系代数 8.1 关系代数 关系代数是SQL之外还有一种描写叙述数据库操作的形式化语言,关系变量(表)是关系代数中的基本表达式 关系代数三个重要的形式化定义例如以下: σF(E):E一个表达式(基本表达式或表达式中间结果).F是关于E中属性的断言,相当于where从句中限制条件(Restrict操作) ΠA(E):E一个表达式,A是E属性的子集,相当于select从句(Projection操作) ρX(E):E一个表达式,X是E表达式结果的重命名 8.2 关系代数操作符 (1

数据库学习摘记 —— 数据库基本概念

数据与信息 数据: 描述客观事物特征或性质的某种符号(符号可以是数值.文字.图形.图像.声音等形式),它们都可以经过数字化处理后存入计算机. 数据项: 数据的基本单元,即最小单位,每个数据项都有一个数据项名和若干可能的数据项值. 记录型: 描述一类事物的若干特征或性质的数据项名的集合,即数据结构. [描述某校所有学生的记录型] 姓名.性别.出生日期.籍贯.所在系别. 入学日期 数据记录: 按照记录型的规定描述一个事物的若干特征或性质的数据项值的集合. [描述一个学生李明的记录] 李明,男,21,

分布式在线数据库学习 && 资料汇总

参考: 慕课网在线分布式数据库原理与实践 淘宝沈询博客 沈询微博 淘宝技术原理系列视频 在公司学习TDDL,无意间感觉这方面挺有意思的. 很多工程上的方案并不像论文上写的那样精准,要考虑的问你有很多,最后看到的方案比较粗暴.高效.精准性略低. 性能 易用 可运维.可监控 结果简单 组件化 内网上的课程笔记: 分布式存储原理与TDDL 地址 零.数据库提供功能 ACID中的事务(保证原子性),sql的查询.视图.存储过程. 数据库功能:K-V存储 关系代数和事务引擎 用户API K-V存储关键 1

SQL Server数据库学习总结

经过一段时间的学习,也对数据库有了一些认识,数据库基本是由表,关系,操作组成:对于初学者首先要学的 一图胜"十"言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数据库有了一些认识.  数据库基本是由表,关系,操作组成:对于初学者首先要学的:  1.数据库是如何存储数据的  表,约束,触发器  2.数据库是如何操作数据的  insert,update,delete T-sql 函数 存储过程 触发器  3.数据库是如何显示数据的  select SQLSer

数据库学习之--Oracle 架构与MySQL架构对比

数据库学习之--Oracle 架构与MySQL架构对比 一.Oracle .MySQL应用对比 如果要说明三者的区别,首先就要从历史入手. Oracle:中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision. Ellision 32岁还一事无成,读了三个大学,没得到一个学位文凭,换了十几家公司,老婆也离他而去.开始创业时只有1200美元,却使得Oracle公司连续12年销售额每年翻一番. Oracle成立于1977年,早期的理论基础,反而来自于一篇IBM的论文<A

MYSQL数据库学习笔记1

MYSQL数据库学习笔记1 数据库概念 关系数据库 常见数据库软件 SQL SQL的概念 SQL语言分类 数据库操作 创建数据库 查看数据库的定义 删除数据库 修改数据库 创建表 数据类型 约束 修改表 表的增删查改 查询 数据库概念 数据库是一种对大量信息进行管理的一种方法. 数据库系统从结构上看,也是可以分为三层的: 物理层:数据实际如何存储 逻辑层:存储的是什么数据,以及数据间是什么关系 试图层:提供给用户的部分数据 关系数据库 目前关于数据库模型最主流的有两种, 一种叫做关系型数据库,这

数据库学习网站和linux学习网站

Oracle ITPub论坛 http://www.itpub.net 著名IT技术论坛.尤以数据库技术闻名. ITPUB论坛的前身应该是建立在 smiling 的 oracle小组,他们搬家前的主页应该是在下面的这个地址吧! http://oracle.myrice.com/ CNOUG论坛 http://www.cnoug.org/ oracle中国用户组,高手云集,讨论Oracle数据库安装.管理.备份.恢复.性能优化: Oracle数据库高级技术HA.VLDB.ORACLE INTERN

数据库学习笔记(一)

1.在ORACLE里默认只有三个系统用户,ORACLE是通过用户登入.  SYS用户:超级管理员,权限最高,它的角色是DBA.默认密码是change_on_install.具有创建数据库的权限   SYSTEM用户:系统管理员,权限很高,它的角色是DBA operator,默认密码manager.不具有创建数据库的权限!  普通用户(normal),如系统安装时的scott用户,默认密码是tiger.普通用户的权限是SYS用户或SYSTEM用户给的. 在SQL SERVER里是通过WINDOWS

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(boolea