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

关系数据结构

笛卡儿积:给定一组集合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)

 

完整性规则

  1. 实体完整性规则:关系中每个元组的主键属性对应的各个分量不能为空值。
  2. 参照完整性规则:设属性组A是关系R的外键且A又是关系S的主键,则对于R中的每一个元组在属性A上的值必须为:空值或者等于S中某一个元组的主键值。
  3. 实体完整性和参照完整性都是关系模型必须满足的完整性约束条件,这些约束条件由RDBMS自动支持。
  4. 用户定义的完整性:用户根据具体应用而对数据附加的约束条件。

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

  1. 关系R与S是相容的: 若关系R和S满足:R和S具有相同的度;R中的第i个属性和S中的第i个属性定义在同一个域上。
  2. 并运算: R∪S;差运算:R-S;交运算:R∩S
  3. 广义笛卡尔积:设R为m元关系,S为n元关 系,则R与S的广义笛卡尔积R×S是一个(m+n) 元关系,其中的每个元组的前m个分量是R中的一个元组,后n个分量是S中的一个元组。若R有k1个元组,S有k2个元组,则R×S有(k1×k2)个元组,即广义笛卡尔积。

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

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

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

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

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

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

       

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

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

  1. 除法运算:

    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)}

关系运算的安全限制

  1. 无限关系:当元组变元t中某一属性的定义域是无限时,如表示所有不在关系R中的元组的集合{t | ┐R(t)}。
  2. 无穷验证过程:t的取值范围为无限,如验证(t)(ω(t))为真的过程。
  3. 安全表达式:不产生无限关系和无穷验证过程的表达式。
  4. 安全限制:为保证所有表达式都是安全表达式所采取的限制措施。
  5. 关系代数运算是安全的:当给定的所有关系是有限时,其运算的有限次复合不会出现无限关系和无穷验证过程。
  6. 安全限制方法:定义一个ψ的有限符号集合,记作DOM(ψ)(不必是最小集合),它由以下两类符号构成:
    1. ψ中的常量符号;
    2. ψ中涉及的所有关系的所有元组的各个分量值。

    这样,把{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 个元组,故是有限的。

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

查询优化

  1. 途径:
    1. 代数优化:对查询语句进行变换,只改变其基本操作顺序提高查询效率,但不涉及存取路径。
    2. 物理优化:根据系统提供的存取路径,比如顺序或索引等来选取较好查询方案。
    3. 规则优化:根据一些启发式规则,如先做选择、投影,再做连接操作等来选择较好的查询方案。
    4. 代价优化:在规则基础上,对所提供的查询方案进行执行代价估算,选择代价最小的查询方案。
  2. 执行代价:

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

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

  3. 查询优化策略(启发式规则)
    1. 选择运算应尽早执行
    2. 把投影运算和选择运算同时进行
    3. 把投影操作与它前面或后面的一个双目运算结合起来
    4. 在执行连接运算之前,可对需要连接的关系进行适当地预处理,如建索引或排序
    5. 把笛卡尔乘积和其后的选择运算合并成为连接运算
    6. 存储公用子表达式
  4. 查询优化的等价公式:
    1. 笛卡儿积、自然连接和条件连接都满足交换律和结合律
    2. 投影运算的串接:
    3. 选择运算的串接:
    4. 选择运算与投影运算交换:
    5. 选择运算与笛卡尔积交换:

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

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

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

   

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

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

  1. 查询优化的步骤
    1. 把查询要求转换成某种内部表示 ;

      如关系代数语法树;

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

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

    3. 选择低层的存取路径;

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

    4. 状态的信息

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

   

   

   

   

   

 

猜你喜欢

转载自www.cnblogs.com/kuluo/p/12540253.html