8.2
列出图8-17所示关系满足的所有函数依赖。
A | B | C |
---|---|---|
$a_1$ | $b_1$ | $c_1$ |
$ a_1$ | $b_1$ | $c_2$ |
$a_2$ | $b_1$ | $c_1$ |
$a_2$ | $b_1$ | $c_3$ |
答:
非平凡的函数依赖是:A→B,C→B以及AC→B。
在b⊆a中具有形式为a→b的19个平凡的函数依赖。
- C并不函数上确定A,因为第一个和第三个元组有着相同的C但是有不同的A值。
- 同样的元组也表明B没有在函数上确定A。
- 类似的,A也没有在函数上确定C,因为C中前两个元组具有相同的A值和不同的C值。
- 同样B也没有在函数上确定C
8.3
解释如何用函数依赖表明:
实体集
student
和instructor
间存在一对一联系集答:若函数依赖
Pk(student)
→Pk(instructor)
和Pk(instructor)
→Pk(student)
表示一对一的关系,则任何两个具有相同值的学生元组必须和老师的值相同,任何两个元组都保证教师和对应的学生具有相同的价值实体集
student
和instructor
间存在多对一联系集答:若函数依赖
Pk(student)
→Pk(instructor)
和Pk(instructor)
→Pk(student)
表示一个多重关系时,就存在多个学生的值会与同一个导师的值相同。
8.9
给定数据库模式R(a, b, c)
及模式R上的关系r,写出检验函数依赖b→c
是否在关系r
上成立的SQL
查询。并写出保证函数依赖的SQL
断言。假设不存在空值。( 虽然SQL
标准中的某些部分,诸如断言等目前还没有在任何数据库实现中得到支持。)
答:
查询语句如下:
1
2
3
4select b
from r
group by b
having count(distinct c) > 1结果是非空的当且仅当
b→c
不包含r
时保证函数依赖的断言:
1
2
3
4
5
6
7
8create assertion b_to_c check
(not exists
(select b
from r
group by b
having count(distinct c)> 1
)
)