以下问题已在 GATE 2006 CS 考试中提出。
1) 考虑以下银行账户上两笔交易的日志序列,初始余额为 12000,将 2000 转为抵押付款,然后应用 5% 的利息。
1. T1 start
2. T1 B old=12000 new=10000
3. T1 M old=0 new=2000
4. T1 commit
5. T2 start
6. T2 B old=10000 new=10500
7. T2 commit
假设数据库系统在日志记录 7 写入之前崩溃。当系统重新启动时,恢复过程中哪一种说法是正确的?
(A) 我们必须重做日志记录 6 才能将 B 设置为 10500
(B) 我们必须撤消日志记录 6 以将 B 设置为 10000,然后重做日志记录 2 和 3
(C) 我们不需要重做日志记录 2 和 3,因为事务 T1 已经提交
(D) 我们可以以任意顺序应用重做和撤销操作,因为它们是幂等的。
答案 (B)
2) 考虑以(student, course) 为主键的注册关系(student, course) 和以student 为主键的payed 关系(student, amount)。假设没有空值,也没有外键或完整性约束。鉴于以下四个查询:
Query1: select student from enrolled where student in (select student from paid)
Query2: select student from paid where student in (select student from enrolled)
Query3: select E.student from enrolled E, paid P where E.student = P.student
Query4: select student from paid where exists
(select * from enrolled where enrolled.student = paid.student)
以下哪一项陈述是正确的?
(A) 对于任何数据库,所有查询都返回相同的行集
(B) Query2 和 Query4 为所有数据库返回相同的行集,但存在 Query1 和 Query2 返回不同行集的数据库。
(C) 存在 Query3 返回的行数严格少于 Query2 的数据库。
(D) 存在 Query4 将在运行时遇到完整性违规的数据库。
答案 (B)
举个例子:
Table enrolled
student course
----------------
abc c1
xyz c1
abc c2
pqr c1
Table paid
student amount
-----------------
abc 20000
xyz 10000
rst 10000
Output of Query 1
abc
abc
xyz
Output of Query 2
abc
xyz
Output of Query 3
abc
xyz
Output of Query 4
abc
xyz
查询 1 和查询 3 可能会返回重复的学生值,因为“学生”不是注册关系的键,但是查询 2 和查询 4 总是返回相同的行集。
所以,选项(B)是正确的。
3) 考虑以(student, course) 为主键的enrolled(student, course) 关系和以student 为主键的paid 关系(student, amount)。假设没有空值,也没有外键或完整性约束。假设 6000、7000、8000、9000 和 10000 分别由 20% 的学生支付。考虑这些查询计划(左侧的计划 1,右侧的计划 2)“列出支付超过 x 的学生所修的所有课程”。
磁盘寻道需要 4 毫秒,磁盘数据传输带宽为 300 MB/s,检查元组以查看数量是否大于 x 需要 10 微秒。以下哪个说法是正确的?
(A) 计划 1 和计划 2 不会为所有数据库输出相同的行集。
(B) 对于某些数据库,计划 1 的输出中可能会多次列出课程
(C) 对于 x = 5000,对于所有数据库,计划 1 的执行速度比计划 2 快。
(D) 对于 x = 9000,对于所有数据库,计划 I 的执行速度比计划 2 慢。
答案 (C)
假设有足够大的内存可用于所有需要的数据。两个计划都需要加载两个表课程并注册。因此,两个计划的磁盘访问时间相同。
与计划 1 相比,计划 2 进行的比较次数较少。
1) 连接操作将需要更多的比较,因为与计划 1 相比,第二个表在计划 2 中有更多的行。
2)两个表的连接表会有更多的行,所以需要更多的比较才能找到大于x的数量。
4)给出如下函数依赖:
AB → CD, AF → D, DE → F, C → G , F → E, G → A
以下哪个选项是错误的?
(A)CF+ = {ACDEFG}
(B)BG+ = {ABCDG}
(C)AF+ = {ACDEFG}
(D)AB+ = {ABCDFG}
答案 (C)
AF 的闭包或 AF+ = {ADEF},AF 的闭包不包含 C 和 G。
选项 (D) 看起来也正确。 AB+ = {ABCDG},AB 的闭包不包含 F。
请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。