以下问题已在 GATE CS 考试中提出。
1.鉴于关系
员工(姓名、工资、部门)和
部门(部门名称、部门名称、地址)
以下哪个查询不能用基本关系代数表达
操作(U,-,x,π,σ,p)? (GATE CS 2000)
(a) 每位员工的部门地址
(b) 姓名与其部门名称相同的员工
(c) 所有雇员的薪金总和
(d) 特定部门的所有员工
答案: (c)
解释:
关系代数的六个基本运算符子是选择(σ)、投影(π)、笛卡尔积(x)(也称为叉积或交叉连接)、集合并集(U)、集合差(-) ,以及重命名 (p)。这六个运算符是基本的,因为它们中的任何一个都不能在不失去表达能力的情况下被省略。许多其他运算符已根据这六个进行定义。其中最重要的是集合交集、除法和自然连接,但是这些基本的关系代数运算无法进行聚合。所以,我们不能用六项操作来计算所有员工的工资总和。
参考:
http://en.wikipedia.org/wiki/Relational_algebra
http://faculty.ksu.edu.sa/zitouni/203%20Haseb%20%20Lecture%20Notes/Relional%20Algebra.pdf
2. 给定以下关系实例。
x y z
1 4 2
1 5 3
1 6 3
3 2 2
实例满足以下哪些函数依赖? (GATE CS 2000)
(a) XY -> Z 和 Z -> Y
(b) YZ -> X 和 Y -> Z
(c) YZ -> X 和 X -> Z
(d) XZ -> Y 和 Y -> X
答案: (b)
解释:
函数依赖 (FD) 是数据库关系中两组属性之间的约束。 FD X->Y 要求 X 的值唯一确定 Y 的值,其中 X 和 Y 是属性集。 FD 是密钥概念的概括。
鉴于 X、Y 和 Z 是关系 R 中的属性集,我们可以推导出函数依赖的几个属性。其中最重要的是 Armstrong 公理,用于数据库规范化:
* Subset Property (Axiom of Reflexivity): If Y is a subset of X, then X ? Y
* Augmentation (Axiom of Augmentation): If X -> Y, then XZ -> YZ
* Transitivity (Axiom of Transitivity): If X -> Y and Y -> Z, then X -> Z
从这些规则中,我们可以推导出这些次要规则:
* Union: If X -> Y and X -> Z, then X -> YZ
* Decomposition: If X -> YZ, then X -> Y and X -> Z
* Pseudotransitivity: If X -> Y and YZ -> W, then XZ -> W
在上面的问题中,Y 唯一地确定了 X 和 Z,对于给定的 Y 值,您可以轻松找出 X 和 Z 的值。
因此,Y -> X 和 Y -> Z 对上述模式成立。
根据增广规则,我们可以说 YZ->X。如果我们理解 FD 的概念,我们就不需要应用公理来找出哪个选项为真,只需查看模式和选项,我们就可以说 (b) 为真。
参考:
http://www.cse.iitb.ac.in/~sudarsha/db-book/slide-dir/ch7.pdf
http://en.wikipedia.org/wiki/Functional_dependency
3. 给定关系 r(w, x) 和 s(y, z),结果
选择不同的 w, x
从 r, s
保证与 r 相同,前提是 (GATE CS 2000)
(a) r 没有重复项并且 s 非空
(b) r 和 s 没有重复
(c) s 没有重复项并且 r 非空
(d) r 和 s 具有相同数量的元组
答案:(一)
解释:
查询选择 r 的所有属性。由于我们在查询中有不同的结果,因此仅当 r 没有重复项时,结果才能等于 r。
如果我们没有给出我们想要连接两个表的任何属性,那么像上面这样的查询就变成了笛卡尔积。如果两个集合中的任何一个为空,则两个集合的笛卡尔积将为空。因此,s 应该至少有一条记录来获取 r 的所有行。
4. 在 SQL 中,关系可以包含空值,与空值的比较被视为未知。假设所有与空值的比较都被视为假。哪一个
以下对不等价? (GATE CS 2000)
(a) x = 5, 不 (不 (x = 5)
(b) x = 5, x > 4 and x < 6, 其中 x 是整数
(c) x < 5,不是(x = 5)
(d) 以上都不是
答案(c)
解释:
它不需要太多解释。对于所有小于 5 的值,x < 5 始终为真,但 x = 5 为假。
5. 考虑一个模式 R(A, B, C, D) 和函数依赖 A -> B 和 C -> D。那么 R 分解成 R1 (A, B) 和 R2(C, D) 是 (GATE CS 2001)
a) 依赖保留和损失较少的连接
b) lossless join 但不依赖保留
c) 依赖保留但不丢失较少的连接
d) 不依赖保留和不丢失少连接
答案: (c)
解释:
依赖保留分解:
如果分解后函数依赖的闭包与分解前 FD 的闭包相同,则将 R 分解为 R1 和 R2 是一个依赖保留分解。
一个简单的方法是检查我们是否可以从分解后存在的 FD 中导出所有原始 FD。
在上面的问题中,R(A, B, C, D) 被分解为 R1 (A, B) 和 R2(C, D) 并且只有两个 FD A -> B 和 C -> D。所以,分解是依赖保留
无损连接分解:
如果以下函数依赖中的至少一个在 F+ 中,则将 R 分解为 R1 和 R2 是一种无损连接分解(函数依赖的闭包)
R1 ∩ R2 → R1
OR
R1 ∩ R2 → R2
上题中R(A,B,C,D)分解为R1(A,B)和R2(C,D),R1∩R2为空。因此,分解不是无损的。
参考:
http://www.cs.sfu.ca/CC/354/han/materia/notes/354notes-chapter6/node1.html