我在数据库上上课,而且我正在对功能依赖进行分配。作为使用阿姆斯特朗公理来获取给定依赖关系并导出其他非平凡依赖关系的一个例子,TA写了这个,我无法绕过它。
考虑关系R(c,p,h,s,e,n)和F的函数依赖集{1. c->p, 2. hs->c, 3. hp->s, 4. ce->n, 5. he->s}
:
迭代1:
从F,我们可以建立F1
6. hs->p (transitivity: 1+2)
7. hc->s (pseudo-transitive. 1+3)
8. hp->c
1. hp->hs (reflexivity 3)
2. hp->c (transitivity: 8.1+2)
9. he->c
1. he->hs (reflexivity: 4)
2. he->c (transitivity: 9.1+2)
我理解大部分情况都很好,除了“反身性”和“反身性”的情况。被使用(使用引号,因为它与我的教科书中的反身性定义相差甚远)。有人能告诉我这种反身性吗?另外,我怎么知道迭代何时结束?难道你找不到重写功能依赖的无限方法吗?
答案 0 :(得分:1)
这些是经典的阿姆斯特朗公理(参见例如wikipedia):
Reflexivity: If Y ⊆ X then X → Y
Augmentation: If X → Y then XZ → YZ for any Z
Transitivity: If X → Y and Y → Z, then X → Z
因此,在您的示例中,要导出hp → c
,您可以按以下方式进行处理:
1. hp → s (given)
2. hp → hs (by augmentation of 1 adding h)
3. hs → c (given)
4. hp → c (by transitivity of 2 + 3)
请注意,要从hp → hs
生成hp → s
,要使用的公理是增强,其中Z
的角色由h
采用,而不是自反性,这是也是用来推导he → c
的公理(例如,你只能推导出反身性,hp → hp
,hp → p
,hp → h
。
你也在问:
我如何知道迭代何时结束?难道你找不到重写功能依赖的无限方法吗?
阿姆斯特朗的公理只能在有限次数上应用于一组函数依赖关系,以产生新的函数依赖关系。这很容易显示,因为属性的数量是有限的,并且,给定 n 属性,您最多可以有2个 n * 2 n 不同的功能依赖关系(因为你可以在左侧和右侧部分拥有任何属性的子集,当然包括琐碎的依赖关系)。
答案 1 :(得分:0)
除了有人决定打电话之外,一个名字并没有告诉你任何事情。
Trivial FD X - > X与X中的属性保持任何关系。即,关系中的一组属性在功能上决定自身。这被合理地称为反身。碰巧它在功能上决定了自身的每个子集。它发生了#反射性"被选为更一般规则的名称&更一般的规则被选为一组充分但非冗余的规则之一。
阿姆斯特朗的公理被证明是健全的。完成。声音意味着它们只生成隐含的FD。完全意味着如果你继续应用公理直到你没有通过应用它们中的任何一个来获得任何新的FD,那么你将获得可以从原始集合中获得的所有FD,即当原始集合持有时也必须保留。任何教科书都告诉你,你可以通过这样做来生成一组FD的传递闭包。还有声音& FDs + MVD的完整公理集。但是没有FDs + JDs。