以下问题已在 GATE 2005 CS 考试中提出。
1) 以下关于范式的说法中哪一项是错误的?
(a) BCNF 比 3NF 更严格
(b) 对 3NF 的无损、依赖保留分解总是可能的
(c) 始终可以将无损的、保持依赖关系的分解为 BCNF
(d) 任何具有两个属性的关系都在 BCNF 中
答案 (c)
在 BCNF 中分解表并保留依赖关系并不总是可能的。例如,一组函数依赖{AB –> C, C –> B} 不能在 BCNF 中分解。有关更多详细信息,请参见此处。
2) 下表有两个属性 A 和 C,其中 A 是主键,C 是引用 A 的外键,带有 on-delete 级联。
A C
-----
2 4
3 4
4 3
5 2
7 2
9 5
6 4
当元组 (2,4) 被删除时,必须额外删除以保持参照完整性的所有元组的集合是:
(a) (3,4) 和 (6,4)
(b) (5,2) 和 (7,2)
(c) (5,2)、(7,2) 和 (9,5)
(d) (3,4), (4,3) 和 (6,4)
答案 (C)
当 (2,4) 被删除时。由于 C 是引用 A 并在级联上删除的外键,因此必须删除 C 中所有值为 2 的条目。所以 (5, 2) 和 (7, 2) 被删除。由于这个 5 和 7 从 A 中删除,导致 (9, 5) 被删除。
3) 关系书( title , price ) 包含不同书的书名和价格。假设没有两本书的价格相同,那么下面的 SQL 查询列出了什么?
select title
from book as B
where (select count(*)
from book as T
where T.price > B.price) < 5
(a) 最贵的四本书的书名
(b) 第五最便宜的书名
(c) 第五贵的书名
(d) 最贵的五本书的书名
答案 (d)
当子查询使用来自外部查询的值时,该子查询称为相关子查询。对于外部查询处理的每一行,相关子查询都会被评估一次。
外部查询从 book 表中选择所有标题。对于每一本书,子查询返回比所选书更贵的书的计数。外部查询的 where 子句对于 5 个最贵的书是正确的。例如,对于最贵的书,count (*) 将为 0,对于第二贵的书,count(*) 将为 1。
请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。