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
 4- select b 
 from r
 group by b
 having count(distinct c) > 1- 结果是非空的当且仅当 - b→c不包含- r时
- 保证函数依赖的断言: - 1 
 2
 3
 4
 5
 6
 7
 8- create assertion b_to_c check 
 (not exists
 (select b
 from r
 group by b
 having count(distinct c)> 1
 )
 )