数据库系统概念第六版 第八章练习题 2 3 9

数据库理论第八章习题

8.2

列出所示关系满足的函数依赖

A B C
a1 b1 c1
a1 b1 c2
a2 b1 c1
a2 b1 c3

答:

平凡的依赖关系有19种,类型均如由于β∈α,故α->β。

单属性的:A->A,B->B,C->C;

双属性的:AB->A,AB->B,AB->AB;AC->A,AC->C,AC->AC;BC->B,BC->C,BC->BC

三属性的:ABC->A,ABC->B,ABC->C,ABC->AB,ABC->BC,ABC->AC,ABC->ABC;

非平凡的依赖关系如下,有3种:

A->B:因为对于A中元素,相同的元素均对应于B中相应的元素

C->B:对于C中相同元素均对应于B中相同元素

AC->B:可由上述两项推出

由于B中所有元素属性相同而A和C中均存在不同元素,故不存在B到非B的函数依赖

由于相同的A在c中有不同的映射,故A->C不成立;C->A同理不成立。

8.3

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

  • 实体集student和instructor间存在的一对一联系集
  • 实体集student和instructor间存在的多对一联系集

答:

  • primarykey(student)->primarykey(instructor)和primarykey(instructor)->primarykey(student)表示实体集student和instructor间的一对一联系集,表示对于student集中对学生具有相同值的元组映射到instuctor中必定有相同的instructor主码值,对于instructor中对教员具有相同值的元组映射到student中必定有相同的student主码。
  • primarykey(student)->primarykey(instructor)的多对一联系集表示的是对于相同的student主码值必定对应于相同的instructor主码值,与一对一关系不同的是不同的学生可能对应于同一个instructor。

8.9

给定数据库模式R(a,b,c)及模式R上的关系r,写出检验函数依赖b->c是否在关系r上成立的SQL查询。并写出保证函数依赖的SQL断言。假设不存在空值。

答:检验b->c是否成立也就是指对于相同的b不能映射到不同的c:

select b
from r
group by b                --通过b进行分类
having count(distinct c) > 1 --查看相同的b映射到c的种类是否大于1
--如果最终b是空集,则说明该函数依赖成立,否则说明不成立

断言检验也利用上述的结果进行判断,如果不为空则产生断言:

create assertion func_b_c check
(
    not exists (select b              --用not exists进行判定
             from r
			 group by b
			 having count(distinct c) > 1)
)
发布了68 篇原创文章 · 获赞 36 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dingdingdodo/article/details/102732800
今日推荐