数据库系统基础教程一:关系数据库与关系代数

       6年前曾经学过一本国产的数据库教材,但是当时脑子还没有开化,或者对于教材的内容缺少感性认识,因此学习之后没有任何效果。最近因为要做一个带CMS的系统,需要把数据库理论重新学习一遍,因此买了本数据库系统基础教程来看,这一系列文章作为对本次学习的一个总结和概括。

       1.1 数据库系统

        数据库指由DBMS管理的数据和集合。

        DBMS需要具有如下功能:(1) 支持用户使用DDL来定义数据的逻辑结构。(2) 支持用户使用DQL和DML来查询和更新存储的数据。(3) 支持海量数据高效处理。 (4) 具有持久性容可恢复性。 (5) 并发控制性或原子性。文件系统不满足上述五点。

        数据库经历了几代的发展,从早期的层次型、网状到现代的关系型。关系型数据库起源于Ted Codd的著名论文《大型共享数据库的关系模型》,目前数据向面对对象领域进行新的发展。在超大型与小型两极都取得了许多发展,在面向信息集成中,数据仓库用来整合多个数据库。


        1.2 DBMS概述

        此处介绍DBMS的基本模块单元。

       

       对于上面这张图的解释如下。在最上端,有两类数据库用户。一类为DBA,他们创建数据库模式。另一类为用户和应用程序,他们查询或修改数据。在图的最下面是物理存储器,数据存储在磁盘上并由存储管理器来写入和读入缓存。缓冲区管理用来管理可用内存,并提供块数据的高速存储。记录管理器用来管理数据文件、索引文件、数据格式等,管理这些信息有助于快速从数据文件中取出所需数据。查询处理器包括查询编译器和执行引擎,查询编译器把查询转换成查询序列,包括 查询分析、预处理、查询优化器。事务管理需要日志与并发控制,执行引擎用于执行上层编译的命令序列并获取数据,它通常与缓冲获取数据。事务处理包含日志和并发控制,并发控制需要锁表的支持。


        2 关系数据模型

        在介绍了数据库的基本概念后,我们下面来学习关系数据库的基础概念。

        2.1 数据模型

        一种数据模型包括三方面的内容,物理数据结构、数据上的操作、数据上的约束。典型的数据模型有关系模型、头结构化数据模型XML、OO数据模型

        2.2 关系模型基础

        直观来看,关系模型可以看作二维的表。关系的列称为属性

        关系名和属性的组合称为关系的模式,记作R(A,B,C,...),关系的属性可以任意排列。 

        关系中的行称为元组

        关系的每个属性都有一个类型,称为,在关系模式中可以进行体现,如R(A:string,B:int...)。

        一个关系中元组的集合称为关系的实例,关系中元组可以任意排列。

        是由一个或多个属性组成,键约束保证关系实例上,任何两个元组都不可能有相同的键。键的表示为属性加下划线。如R(ID,A ,B)。

        2.3 在SQL中定义关系

        SQL中有三种类型的关系:持久存储的关系,即表。临时存储的关系,即View。而由DBMS自己临时生成的关系称为临时表。

        数据类型:这里只介绍日期和时间。SQL中的日期表示为DATE '2013-01-24'  时间表示为 TIME '21:00:00.250',即在类型后以单引号括起来字符串值。

        下面我们用SQL创建一个简单的关系:

         

create table Country
(
    id     int auto_increment,
    name   char(32) unique default "",

    primary key(id)
);
删除关系需要用drop table Country; 修改关系使用alter table Country add location char(16) /drop name; 主键用primary key来声明,单个属性的键可以在属性后说明,若多个属性组成的主键,则必须采用上面的方式来说明。primary key的属性必须不能相同且不能为NULL,而unique只要求不能相同,但可以为NULL。注意NULL不能和NULL作比较,unique的属性如果未声明为NOT NULL,则可以有多个NULL值。

        2.4 关系代数

        2.4.1 关系代数概述

        传统的关系代数操作主要有以下四类:(1) 关系操作并、交、差。 (2) 选择操作,除去某些列的操作。(3) 组合操作,包括笛卡儿积运算以及连接运算。 (4) 重命名操作。通常把关系代数表达式称为查询。

        2.4.2 关系上的集合操作

        最常用的集合操作为并 R U S 、交 R ∩ S、差 R - S。这三个运算比较简单,即是把关系实例当作集合来进行运算,不在此过多说明。需要注意的是R和S必须具有同样的属性集合,且各个属性的类型也必须匹配。

        2.4.3 投影π

        投影用来从关系R中生成只含部分列的新关系。

        表达式πA1A2,...An(R)表示一个关系,它只包含关系R的属性A1,A2,....,An所代表的列,即新关系可以表示为:S(A1,A2,....An)。

        2.4.4 选择σ

        选择用于产生一个只包含R部分元组的子集合,新关系的元组必须满足某个基于R属性的条件C。选择用表达式σc(R)表示。[σ音为sigma]。例如对于一个成绩单的表,可以从中选择成绩在90分以上的学生:σgrade>90(R)

        2.4.5 笛卡儿积χ

        关系R(Ai) X S(Bi)是一个有序对的集合,有序对的第一个元素为R中的任意元组Ai,有序对的第二个元素为S中的任意元组Bi。积的元组个数为两个关系的元组个数的积。

        积的关系模式是R和S关系模式的并,如果二者有相同的属性,需要把一个关系中相应的属性名更改成不同的名称。当然为了清楚期间,若属性A同时是R和S的属性,则在积中可以分别记为R.A和S.A。

        2.4.6 自然连接

        关系也可以按照条件来进行连接。若R和S具有共同属性A1,A2,...,An,r和s分别为两个关系的元组,若当且仅当r和s在公共属性A1,A2,...,An上相同时,元组r和s方可进行连接,称为自然连接,记作R⋈S。例如对于关系Student(id,name)与成绩Grade(id,grade),为了寻找学生姓名和成绩,就可以将Student和Grade进行基于id的自然连接。

        在连接中,若一个元组不能和另外关系中的任何元组连接配对的话,称其为悬浮元组。

        2.4.7 θ连接

        θ连接是自然连接的扩展,其不必基于相等的属性,而可以基础任意条件C来进行连接,记作RcS。可以通过先构造RXS的结果,再结果中寻找满足条件C的元组。例如对于关系Student(id,name,age)和关系Teacher(id,name,age),我们希望找到比老师年龄还大的学生就可以,采用Rs.age>t.ageS来实现。

        2.4.8 重命名ρ

        ρs(R)表示把关系重命名为S,若在改名的同时还老需要重命名列,则表示为ρs(A1,A2,...,An)(R),即R的各列名称为Ai。

        2.4.9 操作之间的关系

        上面介绍的一些操作,可以被其他操作组合来进行等价表示。其中的6个操作,并,差,选择,投影,积,重命名构成一个独立的集合,每个操作都不能被集合中其他操作来实现。

        2.5 关系上的约束

        2.5.1 约束表示

        前提是R和S是关系。若R=∅表示R中没有元组。R⊆S表示R的元组均在S中出现。

        2.5.2 引用完整性约束

        关系R中的属性A,若其引用了关系S的属性B,则R的任一元组在属性A的分量,必然应该包括在关系S的元组在属性B的分量中,表示为πA(R) ⊆πB(S) 。

        2.5.3  键约束

        关系R(A1,A2,...,An),假设A1为关系的键属性,则对于A1相同两个元组,其A2-An也必然相同。记S为R的重命名关系,则σR.A1=S.A1 and R.ai != S.ai(R*S) = ∅

        2.5.4 其他约束举例

        以关系的属性的取值约束为例,规定R(A)的A只能取[0-5],则有σA<0 and A>5(R) = ∅

        

        3 基于包的代数与逻辑查询语言

        3.1 包上的关系代数操作

        商业DBMS实现的关系都是基于包而不集合。把关系看作包而不是集合,可以使一些关系操作实现效率更好。例如包的并可以简单组合两个关系,而不需要排重。对于投影操作仅需要选择所在列的数据即可,也不需要排重。

        3.1.1 包的并、交、差

        假定R和S是包,其中元r在R中出现n次,在S中出现m次,则有

        包R U S中,元组 r 出现n+m次

        包R ∩ S中,元组 r 出现min(m,n)次,

        包R-S中,元组 r 出现max(0,n-m)次

        3.1.2 包的投影操作

        在包的投影操作过程中,如果产生了多个同样的元组,则重复不会被从包投影结果中消除。

        3.1.3 包上的选择操作

        在包上选择操作时,结果中也不去掉重复元组。

        3.1.4 包的笛卡儿积

        一个关系中的每个元组跟另外一个关系中的每个元组配对,而不问这个元是不是重复出现。

        3.1.5 包的连接

        首先对比两个关系中的元组,看是否可配对,如果可以,则配对起来的元组就是结果中的一员。结果中不需要消除重复元组。        

        3.2 扩展的关系代数操作

        3.2.1 消除重复

         δ(R)表示返回一个没有重复元组的关系R。这个算子把包转换为集合。

        3.2.2 聚集操作符

        聚集操作符用来汇总关系某一列中出现的值。标准算子有以下几个

        1) SUM 产生一列的和

        2) AVG 产生一列的均值

        3) MIN&MAX 分别产生一列中最小值和最大值

        4) COUNT 产生一列中的值的数目,包括重复的元组。

        3.2.3 分组操作符

        有时人们不仅能对列来计算聚集,还需要按某个或多个属性值来分组,然后考虑分组内元的聚集操作。

        这里定义分组算子γL(R),其返回的关系的计算过程是:先把关系R的元组分组。每一组由L中分组属性为特定值的所有元组。然后对于每一组产生一个新元组,这个元组的内容为一个分组属性值,本组所有元组聚集操作的结果。

        δ操作是γ操作的冗余。去重相当在每一列上进行分组。

        3.2.4 扩展的投影操作

        前面我们看到投影操作πA1A2,...An(R),扩展这个操作,使它支持在元的组成分量上或选择分量上的计算。投影列表可以是以下所列元素之一:R的属性,x->y的重命名,E->z,其中E是一个涉及R的属性、常量、算术运算符或串运算符的表达式。z是命名后的新名字。

        3.2.5 排序操作符

        表达式τL(R),表示按L排序的关系R本身。L可以是一个属性列表,R的元组先按A1的值排序,对于A1属性相等的再按A2排序,依此类推。

        3.2.6 外连接

        外连接是连接的一个变种。其先执行自然连接,然后再把来自R或者S中的悬浮元组加入其中。加入的元组在对应属性上若不存在分量,则用NULL表示。

        自然外连接有几种不同变体,左外自然连接只加入械变量R的悬浮元组。右外连接只把右变量S的悬浮元组加入结果。

        针对θ连接也有对应的外θ连接,左外θ连接,右外θ连接。

        3.3 Datalog逻辑查询语言

        关系运算还可以基于Datalog逻辑查询语言,暂时不在此说明。

        3.4 关系代数与Datalog

        同上,略


         参考文献

         维基百科-关系代数 http://zh.wikipedia.org/wiki/%E5%85%B3%E7%B3%BB%E4%BB%A3%E6%95%B0_%28%E6%95%B0%E6%8D%AE%E5%BA%93%29#.E8.87.AA.E7.84.B6.E8.BF.9E.E6.8E.A5_.28.E2.8B.88.29

         数据库系统基础教程 原书第三版  Jeffrey D.Ullman , Jenifer Widom著  机械工作出版社

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值