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.给出以下关系实例。
xyz142153163322
实例满足以下哪些功能依赖关系? (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
(GATE CS 2000)保证与r相同
(a)r没有重复项, 而s是非空的
(b)r和s没有重复项
(c)s没有重复且r为非空
(d)r和s具有相同的元组数
回答:(一种)
说明:
查询选择r的所有属性。由于我们在查询中存在差异, 因此仅当r没有重复项时, 结果才能等于r。
如果我们没有提供要在其上连接两个表的任何属性, 则上述查询将等效于笛卡尔积。如果两组的任何一个为空, 则两组的笛卡尔乘积将为空。因此, s应该至少有一条记录才能获得r的所有行。
4.在SQL中, 关系可以包含空值, 并且将具有空值的比较视为未知。假设所有具有空值的比较均被视为false。哪一个
以下对不等效? (GATE CS 2000)
(a)x = 5, 不是(not(x = 5)
(b)x = 5, x> 4和x < 6, 其中x是整数
(c)x < 5, 不是(x = 5)
(d)以上都不是
回答(C)
说明:
不需要太多解释。对于所有小于5的值, x < 5始终为true, 但x = 5为false。
5.考虑一个模式R(A, B, C, D)和功能依赖性A-> B和C-> D。然后将R分解为R1(A, B)和R2(C, D)是(GATE) CS 2001)
a)保持依赖关系和减少损失的连接
b)损失少的联接但不保留依赖项
c)保留依赖关系, 但不损失更少的连接
d)不保留依赖关系, 不损失更少的连接
回答:(C)
说明:
依赖关系保留分解:
如果分解后功能依赖性的关闭与分解前FD的关闭相同, 则将R分解为R1和R2是保留依赖性的分解。
【数据库管理系统介绍|S1】一种简单的方法是仅检查我们是否可以从分解后存在的FD派生所有原始FD。
在上述问题中, R(A, B, C, D)分解为R1(A, B)和R2(C, D), 并且只有两个FD A-> B和C-> D。因此, 分解是保持依赖关系
无损连接分解:
如果以下功能依赖性中的至少一个在F +中, 则将R分解为R1和R2是无损连接分解(功能依赖性终止)
R1 ∩ R2 → R1ORR1 ∩ 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
推荐阅读
- 数据库管理系统常见问题|S2
- DBMS中的关系代数介绍
- DBMS中的无损分解问题介绍
- DBMS(数据库管理系统)简介|S1
- DBMS中的三层体系结构介绍|S2
- 数据库ER模型介绍和图解
- SQL中的聚合函数简要介绍
- MySQL数据库管理
- TCP端口状态建立过程窗口协议