身份不同要对DBMS有不同的认识:
用户(处于逻辑层、视图层):数据库管理系统(DBMS)的主要目的:为用户提供虚拟视图,隐藏数据存储和维护的物理细节,主要体现出方便和高效的特征。
1、方便:即提供一致、灵活的操作手段,解决查询问题——对应的结构部件为:DDL、DML解析器及执行解析玩命令的查询执行引擎。
2、高效:数据的合理存储,建立高效的索引机制,缓冲机制——对应结构部件为:事务管理器、存储管理器、缓存管理器等。
设计者(处于物理层):对于设计人员而言,要清楚的了解是如何实现存储和维护的。更加透彻的了解数据模型,尤其是关系模型、对象模型和记录模型。
查询的本质:关系运算
——SQL的基础
操作关系数据库最常用的方法就是使用SQL(结构化查询语言),它直观、易用,这些特征是描述语言的特性,描述语言是为了讨好客户,使其不用长时间的培训即可使用。而这些描述语言的实现,还是要通过基础的程序化运算实现,这些基本的运算就是关系代数运算,是具体实现代码的理论基础。
一、关系代数法
关系数据库建立的基础是关系代数,其中最有价值的是其定义的一系列操作,作为SQL语言的基础:
(所有操作都是基于单个关系表的,如果计算设计两个表,则先将表进行连接操作)
基本运算:
1、选择:(即行选择)从多个关系元组中,根据某些属性的限制条件,筛选出一部分元组;
2、投影:(即列选择)从关系中的所有属性中,抽取出所需的属性;
3、并操作:(即对相容的两个关系进行合并)首先,相容的条件是:属性数目相同且两个关系的第i个属性必须同域(i为任意第几个属性);
4、集合差:(相容的两个关系的差);
5、笛卡尔积运算(即交叉串接):一个关系中的每个元组都和另一个关系中的元组进行串接,形成一个新的元组,对于来源关系中同名的属性,采取关系名+属性的方式进行区分。(两个关系表的每个元组都需要一一比较时,都需要用到笛卡尔积运算)
6、更名运算(在关系代数和数据库关系之间建立联系)更名运算负责给一个关系代数运算式赋予名字,并且每个属性赋予名字,从而成为一个数据库关系表。比如,可以借助更名运算,计算关系和自己的笛卡尔积。
注:如上6中运算可以表达任何关系运算,但是,有些复杂运算会使得表示极其麻烦,因此,引入附加表达式:
附加运算:
1、集合交:(即选出两个相容的关系中的共同元组)
2、自然连接操作:(即笛卡尔积操作复杂性的一种简化)找出两个关系中的共有属性,并且将两个关系*有属性值相等的元组选择出来。
3、除运算(一个属性值集合(R—S属性),对应的另一个属性的集合(S属性)是否可以整除一个该属性的子集(S属性),如果可以返回该属性集合):找出拥有全系列产品“所有”产品的客户。这个“所有的”集合(S),就是除数。
4、赋值运算:将一个关系临时保存为另一个关系,即中间变量,目的是方便关系的运算。
二、元组关系演算(注:具有关系运算具有等价的效果)
元组关系演算(元组关系运算):我们查询的目的是获取元组的集合,则表达式为:
{t|P(t)} 表示:满足条件P(t)的元组的集合。而P(t)即为谓词逻辑表达式(具体内容可参见离散数学和数理逻辑的书籍)
三、域关系演算(每个属性域作为演算对象:同关系运算、元组运算等价)
域演算的形式:
{<x1,x2,x3....xn>|P(x1,x2,x3,x4...xn)}
结论为域向量(关系)的集合,该集合满足谓词条件P。
注:三种方式的不同点为:计算的实体不同,一:关系;二:元组;三:属性域。
扩展一:关系代数的扩展
扩展一:将算数运算融入到关系代数运算中,比如聚集计算;
扩展二:外连接运算,可以处理缺失信息的空值。
1、广义投影:允许投影条件中,进行算数运算。比如,求两个属性的差值。
2、外连接(防止自然连接,因为null值而造成元组的丢失):具有,左外连接、右外连接和全外连接。
对于自然连接的不匹配元组,左外连接:保留左边的条目,右侧属性用null填充;右外连接相反;全外连接为两者的合并。
3、聚集操作(融合操作):比如,求和,计算出现次数等。这是个集合操作,需要去除重复项目。
扩展二:数据库的修改
数据库修改实现方式:通过运算得到新的关系,而后使用赋值运算将新关系替换成老关系。而这些运算就可以表达:删除(差操作),添加(并操作)、更新(投影操作)。
扩展三:使用视图定制关系表
视图是一种通过关系运算得来的新的关系表。这些表可以隐藏很多信息,支持为专门的用户提供特定的视图。
SQL之外的查询语言
SQL:使用了关系代数和关系演算结构的组合。
select:投影运算;
from:帝卡尔积的方式表示扫描对象;
where:条件谓词。
as:更名操作;
order by:指出根据那个属性排列顺序;
all修饰付:用来表示查询结果中不消除重复元组;和select以及关系运算符Union等操作关键词之后使用;
其他:聚集操作关键字(count,avg)集合操作付(union,intersect等)
嵌入关键字:in
嵌入式语言:即对SQL语言的扩展,使其可以在程序代码中使用,最典型的应该是PL/Sql (Oracle公司)。
重点:其他查询语言
1、QBE(Query By Example)基于域关系演算之上
用一个表格表示查询框架(关系例子:表示from的功能),每个域上(元组的一个列上)都可以填充条件。同时,每个域也都可以表示为一个变量,通过condtion关键字表示任何条件。
2、Quel:基于元组关系演算之上
range of:表示一个关系中的元组;
retrieve:相当于SQL中的Select,之后可以接融合操作关键字(比如 avg等)
where:同上
(该类查询语言,是简历在元组运算之上的,等价于域运算和关系代数运算)
3、DATALOG(基于逻辑编程语言prolog的非过程化数据查询语言)
基于规则的推理框架,仅仅是研究型系统,没有实用化。