数据库理论6

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

解释如何用函数依赖表明:

  • 实体集studentinstructor间存在一对一联系集

    答:若函数依赖Pk(student)Pk(instructor)Pk(instructor)Pk(student)表示一对一的关系,则任何两个具有相同值的学生元组必须和老师的值相同,任何两个元组都保证教师和对应的学生具有相同的价值

  • 实体集studentinstructor间存在多对一联系集

    答:若函数依赖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
    )
    )