- 函数依赖的定义:
如果存在模式(id,name),其中id是主码。
那么函数依赖可以写为id->name - 满足函数依赖(a->b)的条件
对实例中的所有元组对t1和t2,如果t1[a]=t2[a],则t1[b]=t2[b] - 函数依赖的好处
可以表示不能用超码表示的约束。
如stu(id,name,sex,apartment),其中id是主码,假设apartment只有两座(男女)。
那么sex->apartment成立,因为男生只能住男生宿舍。所以性别可以约束公寓楼 - 平凡的函数依赖
如果a包含b,那么函数依赖a->b称为平凡的 - Armstrong公理
- 自反律:若a为一属性集且a包含b,则a->b
- 增补律:若a->b且r为一属性集,则ar->br
- 传递律:若a->b,b->c,则a->c成立
- 推论
- 合并律:若a->b,a->c,则a->bc
- 分解律:若a->bc,则a->b, a->c
- 伪传递律:若a->b,bc->r,则ac->r
简单例子
A | B | C | D |
---|---|---|---|
a1 | b1 | c1 | d1 |
a1 | b2 | c1 | d2 |
a2 | b2 | c2 | d2 |
a2 | b3 | c2 | d3 |
a3 | b3 | c2 | d4 |
可以说A->C(对于a3和c2,因为没有另外一个元组A的值是a3,所以a3可以唯一决定c2)
C->A不是满足的。
AB->C,AB->D成立