zoukankan      html  css  js  c++  java
  • 2.2 关系代数运算

    2.2.1 关系代数的五个基本操作 

    考核要求:达到“简单应用”层次 
    知识点:五个基本操作的含义和运算应用


    (1)并():两个关系需有相同的关系模式,并的对象是元组,由两个关系所有元组构成。 
      RUS≡{t| t∈R ∨t∈S} 
    (2) 差(-):同样,两个关系有相同的模式,R和S的差是由属于R但不属于S的元组构成的集合。 
      R-S≡{t| t∈R ∧t 不属于S} 
    (3)笛卡尔积(×):对两个关系R和S进行操作,产生的关系中元组个数为两个关系中元组个数之积。 
      R×S≡{t| t=< tr,ts>∧tr∈R∧ts ∈S} 
    (4) 投影(σ):对关系进行垂直分割,消去某些列,并重新安排列的顺序。 
    (5) 选择(π):根据某些条件关系作水平分割,即选择符合条件的元组。 

    2.2.2 关系代数的四个组合操作 
    考核要求:达到“简单应用”层次 
    知识点:四个组合操作的含义和运算应用


    (1)交():R和S的交是由既属于R又属于S的元组构成的集合。 
    (2)联接:包括θ(算术比较符)联接和F(公式)联接. 
     选择R×S中满足iθ(r+j)或F条件的元组构成的集合; 
    概念上比较难理解,关键理解运算实例 
    等值联接(θ为等号“=”的联接)。 
    (3)自然联接(RS):在R×S中,选择R和S公共属性值均相等的元组,并去掉R×S中重复的公共属性列。 如果两个关系没有公共属性,则自然联接就转化为笛卡尔积。 
    (4)除法(÷):首先除法的结果中元数为两个元数的差,

    R÷S的操作思路如下---把S看作一个块,如果R中相同属性集中的元组有相同的块, 且除去此块后留下的相应元组均相同,那么可以得到一条元组, 所有这些元组的集合就是除法的结果

    对于上述的五个基本操作和四个组合操作,应当从实际运算方面进行理解和运用。 

    应用举例

    设有关系R和S(如下:)

    计算:

     

    2.2.3 关系代数表达式及应用 
    考核要求:达到“简单应用”层次 
    知识点:关系代数表达式的应用


    本节的内容是有关实际应用,应该多看例题,多做习题,必须达到以下要求: 能够根据给出的关系代数表达式计算关系值,也能够根据相应查询要求列出关系表达式。 

    (1)在列关系表达式时,通常有以下形式: 
    π...(σ...(R×S))或者π...(σ...(RS)) 
    首先把查询涉及到的关系取来,执行笛卡尔积或自然联接操作得到一张大的表格,然后对大表格执行水平分割(选择)和垂直分割(投影)操作。 
    (2)当查询涉及到否定或全部的逻辑时,往往要用到差或除法操作。 

      用关系代数表示数据查询的典型例子


          [例]设教学数据库中有3个关系:
              学生关系S(SNO,SNAME,AGE,SEX)
              学习关系SC(SNO,CNO,GRADE)
              课程关系C(CNO,CNAME,TEACHER)

         下面用关系代数表达式表达每个查询语句。


    (1) 检索学习课程号为C2的学生学号与成绩。
        πSNO,GRADE(σ CNO='C2'(SC))


    (2) 检索学习课程号为C2的学生学号与姓名
       πSNO,SNAME(σ CNO='C2'(SSC))
        由于这个查询涉及到两个关系S和SC,因此先对这两个关系进行自然连接,同一位学生的有关的信息,然后再执行选择投影操作。

    此查询亦可等价地写成:
        πSNO,SNAME(S)(πSNO(σ CNO='C2'(SC)))
        这个表达式中自然连接的右分量为"学了C2课的学生学号的集合"。这个表达式比前一个表达式优化,执行起来要省时间,省空间。


    (3)检索选修课程名为MATHS的学生学号与姓名。

        πSNO,SANME(σ CNAME='MATHS'(SSCC))


    (4)检索选修课程号为C2或C4的学生学号。
        πSNO CNO='C2'∨CNO='C4'(SC))


    (5) 检索至少选修课程号为C2或C4的学生学号。
        π11=4∧2='C2'∧5='C4'(SC×SC))
          这里(SC×SC)表示关系SC自身相乘的乘积操作,其中数字1,2,4,5都为它的结果关系中的属性序号。

      比较这一题与上一题的差别。


    (6) 检索不学C2课的学生姓名与年龄。
        πSNAME,AGE(S)-πSNAME,AGE(σ CNO='C2'(SSC))
        这个表达式用了差运算,差运算的左分量为"全体学生的姓名和年龄",右分量为"学了C2课的学生姓名与年龄"。


    (7)检索学习全部课程的学生姓名。
    编写这个查询语句的关系代数过程如下:
    (a) 学生选课情况可用πSNO,CNO(SC)表示;
    (b) 全部课程可用
    πCNO(C)表示;
    (c) 学了全部课程的学生学号可用除法操作表示。
            操作结果为学号SNO的集合,该集合中每个学生(对应SNO)与C中任一门课程号CNO配在一起都在
    πSCOCNOSC 中出现(即SC中出现),所以结果中每个学生都学了全部的课程(这是"除法"操作的含义):
        πSNO,CNO(SC)÷πCNO(C)
    (d) 从SNO求学生姓名SNAME,可以用自然连结和投影操作组合而成:
        πSNAME(S  (πSNO,CNO(SC)÷πCNO(C)))
    这就是最后得到的关系代数表达式。


    (8) 检索所学课程包含S3所学课程的学生学号。
    注意:学生S3可能学多门课程,所以要用到除法操作来表达此查询语句。
          学生选课情况可用操作
      πSNO,CNO(SC)表示;
          所学课程包含学生S3所学课程的学生学号,可以用除法操作求得:

        πSNO,CNO(SC)÷  πCNO(σ SNO='S3'(SC))

     
    (9) 将新课程元组('C10','PHYSICS','YU')插入到关系C中
        (C∪('C10','PHYSICS','YU'))


    (10) 将学号S4选修课程号为C4的成绩改为85分。
        (SC-('S4','C4',?)∪('S4','C4',85))
        修改操作用代数表示分两步实现:先删去原元组,再插入新元组。题目中未给出原先的成绩,所以用"?"代替,检索时可忽略。


    2.2.4 扩充的关系代数操作 
    考核要求:达到“识记”层次 
    知识点:了解“外联接”和“外部并”的含义


    注意:(1)“外联接”、“左外联接”、“右外联接”和“自然连接”的差异。 
    (2)“外部并”和“并”的差异

  • 相关阅读:
    JDK14的新特性:JFR,JMC和JFR事件流
    java深入理解浅拷贝和深拷贝
    jcmd:JDK14中的调试神器
    你真的了解java class name吗?
    JDK14中的java tools简介
    JDK 14的新特性:switch表达式
    JDK 14的新特性:文本块Text Blocks
    java中的内部类内部接口详解
    一文弄懂String的所有小秘密
    深入理解java的泛型
  • 原文地址:https://www.cnblogs.com/hephec/p/4562123.html
Copyright © 2011-2022 走看看