前言
需要课本定义的移步至: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] ) }
解:
这题求的 t 不是 u
Student(u): u 是Student的元组;
∃u:存在 u 满足t[1]=u[2] 和 t[2]=u[5],
t[1]=u[2]: t 的第一列是 u 中第二列;
t[2]=u[5] :t 的第二列是 u 中第五列;
最后得出结果S1 ={(李勇,CS),(刘晨,CS),(王敏,MA),(张立,IS) }
姓名(Sname)
所在系(sdept)
李勇
CS
刘晨
CS
王敏
MA
张立
IS
【例4】 例如,有两个关系 R 和 S,计算:
R1={ t | R(t) ∧ ¬ S(t)}
R2={ t | ( ∃ u)(S(t) ∧ R(u) ∧ t[3]<u[2]) }
R3={ t | (∀ u)(R(t) ∧ S(u) ∧ t[3]>u[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)最后得出结果如下表:
解:
(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)最后得出结果如下表:
解:
(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)最后得出结果如下表:
总结
1. 关系R可以表示为{ t | R(t) }
在元组关系演算中出现关系R(t)、S(u)等,则可以将 t、u 理解成与R、S具有相同的变量值,图或表上的元组变量也是相同的;
R(t) 通常搭配其他关系来进行选择与筛选;
2. 在元组演算公式中,各种运算符的优先次序为:
① 算术比较运算符最高;
② 量词次之,且 ∃ 的优先级高于 ∀ 的优先级;
③ 逻辑运算符最低,且 ﹁ 的优先级高于 ∧ 的优先级, ∧ 的优先级高于 ∨ 的优先级;
④ 加括号时,括号中运算符优先,同一括号内的运算符之优先级遵循 ①②③ 各项。
3. 做题顺序 (我的做题方式) :
观察题目所求的元组变量是什么;
看所求元组变量 t 是哪个关系R 中的元组, 并查看是否还有其他元组变量;
看 t 的量词范围,按照∃ 的优先级高于 ∀ 的优先级,先让心里有个底,后面好筛选条件;
对元组演算公式进行分块,即用∧ 或 ∨ 将整个公式分成不同的小模块;
配合量词,对每个模块进行选择等操作;
将所有模块通过∧ 或 ∨ 的联系,再一次进行筛选;
最后筛选出来的元组就是我们要求的东西了;
资料参考