数据库 通过例子快速了解元组演算表达式的计算

前言

需要课本定义的移步至:CSDN:数据库 元组演算表达式
本文仅描述对部分例题的解答;

例子

附上 【例1-3】 的图表:
Student

学号(Sno) 姓名(Sname) 性别(Ssex) 年龄(Sage) 所在系(sdept)
201215121 李勇 20 CS
201215122 刘晨 19 CS
201215123 王敏 18 MA
201215125 张立 19 IS

【例1】 查询信息系 (IS 系 ) 全体学生:

  • 问:SIS = { Student(t) ∧ t[5] = ‘IS’ }
  • 解:
    1. Student(t) :可暂时将 t 和 Student 的图当成一样的;
    2. t[5] = ‘IS’ :t 的第5个变量,也就是 Student 中所在系Sdept中的值要等于“IS”;
    3. 将第1和第2点 “交 ∧” 运算后,就得到SIS={(201215125,张立,男,19,IS)};图如下:
学号(Sno) 姓名(Sname) 性别(Ssex) 年龄(Sage) 所在系(sdept)
201215125 张立 19 IS

【例2】 查询年龄小于 20 岁的学生:

  • S20 ={Student(t) ∧ t[4]<20}
  • 解:这题和上一题差不多,只是选择的要求不一样;
    1. Student(t) :可暂时将 t 和 Student 的图当成一样的;
    2. t[4]<20:t 的第4个变量,也就是 Student 中年龄Sage中的值要小于20;
    3. 将第1和第2点 “交 ∧” 运算后,就得到S20={(201215122,刘晨,女 ,19,CS),(201215123,王敏,女,18,MA),(201215125,张立,男,19,IS)};图如下:
学号(Sno) 姓名(Sname) 性别(Ssex) 年龄(Sage) 所在系(sdept)
201215122 刘晨 19 CS
201215123 王敏 18 MA
201215125 张立 19 IS

【例3】 查询学生的姓名和所在系:

  • S1={ t(2) | ( ∃u )( Student(u) ∧ t[1]=u[2] ∧ t[2]=u[5] ) }
  • 解:
    1. 这题求的 t 不是 u
    2. Student(u): u 是Student的元组;
    3. ∃u:存在 u 满足t[1]=u[2] 和 t[2]=u[5],
    4. t[1]=u[2]: t 的第一列是 u 中第二列;
    5. t[2]=u[5] :t 的第二列是 u 中第五列;
    6. 最后得出结果S1={(李勇,CS),(刘晨,CS),(王敏,MA),(张立,IS) }
姓名(Sname) 所在系(sdept)
李勇 CS
刘晨 CS
王敏 MA
张立 IS

【例4】 例如,有两个关系 R 和 S,计算:

  1. R1={ t | R(t) ∧ ¬ S(t)}
  2. R2={ t | ( ∃ u)(S(t) ∧ R(u) ∧ t[3]<u[2]) }
  3. R3={ t | (∀ u)(R(t) ∧ S(u) ∧ t[3]>u[1]) }

图2.3

  1. 解:

    (1)… { t | … : 题目要求的是元组变量 t ;
    (2)¬ S(t): t 是关系S之外的元组变量;
    (3)R(t) : t 是关系R中的元组变量;
    (4)R(t) ∧ ¬ S(t):将(1)(2)中的值进行“交∧”运算,删去共有元组变量{(1,2,3)};
    (5)最后得出结果如下表:
    
A B C
4 5 6
7 8 9
  1. 解:

     (1)… { t | … : 题目要求的是元组变量 t ;
     (2)S(t): t 是关系S中的元组变量;
     (3)R(u) : u 是关系R中的元组变量;
     (4)( ∃ u):u 中任意一元组满足条件即可;
     (5)t[3]<u[2]:可以看成S中的C列 小于 R中的B列;满足条件的是t[3]中的3、6;
     (6)最后得出结果如下表:
    
A B C
1 2 3
3 4 6
  1. 解:

    (1)… { t | … : 题目要求的是元组变量 t ;
    (2)R(t): t 是关系R中的元组变量;
    (3)S(u) : u 是关系S中的元组变量;
    (4)(∀ u):要求 u 中所有元组满足条件;
    (5)t[3]>u[1]:R中的C列 大于 S中的A列;满足条件的是t[3]中的6、9;
    (6)最后得出结果如下表:
    
A B C
4 5 6
7 8 9

总结

1. 关系R可以表示为{ t | R(t) }

  • 在元组关系演算中出现关系R(t)、S(u)等,则可以将 t、u 理解成与R、S具有相同的变量值,图或表上的元组变量也是相同的;
  • R(t) 通常搭配其他关系来进行选择与筛选;

2. 在元组演算公式中,各种运算符的优先次序为:

   	① 算术比较运算符最高; 
    ② 量词次之,且 ∃ 的优先级高于 ∀ 的优先级; 
    ③ 逻辑运算符最低,且 ﹁ 的优先级高于 ∧ 的优先级, ∧ 的优先级高于 ∨ 的优先级; 
    ④ 加括号时,括号中运算符优先,同一括号内的运算符之优先级遵循 ①②③ 各项。 

3. 做题顺序 (我的做题方式)

  1. 观察题目所求的元组变量是什么;
  2. 看所求元组变量 t 是哪个关系R 中的元组, 并查看是否还有其他元组变量;
  3. 看 t 的量词范围,按照∃ 的优先级高于 ∀ 的优先级,先让心里有个底,后面好筛选条件;
  4. 对元组演算公式进行分块,即用∧ 或 ∨ 将整个公式分成不同的小模块;
  5. 配合量词,对每个模块进行选择等操作;
  6. 将所有模块通过∧ 或 ∨ 的联系,再一次进行筛选;
  7. 最后筛选出来的元组就是我们要求的东西了;

资料参考

发布了29 篇原创文章 · 获赞 42 · 访问量 8491

猜你喜欢

转载自blog.csdn.net/qq_43068326/article/details/104777056