你如何计算分解的函数依赖关系?

3

假设 R 具有以下属性:{A,B,C,D,E},并且具有以下函数依赖关系:

A -> BC
CD -> E
B -> D
E -> A

有一个分解包含R1(A,B,C)和R2(A,D,E)。我如何计算R1和R2的函数依赖关系?

作业上实际的问题是询问我R1/R2是否在BCNF/3NF/两者都不是,但我已经知道如何完成这部分(查看FD的左侧是否包含在候选键中)。

1个回答

4
诀窍在于将FD视为定义键的工具,而不是在您给定的模式上,而是在其投影上。
例如,在您的起始模式{ABCDE}中,FD A-> BC表示A({A}实际上)构成了此表上的一个键,向下投影到{ABC}。也就是说,LHS和RHS的联合定义了哪个投影,而LHS定义了该投影上的键。
现在转向分解版本,其中您有两个不同的表(模式){ABC}和{ADE}。
您的第一个和最后一个FD仍可以在这些模式中表达。第一个模式/表上的第一个FD和后者上的最后一个FD。
但是,由于分解,剩余的两个FD已经无法表达(无法表达为FD)。对于整体数据库设计,这意味着您必须声明/定义/实现数据库约束,该约束与原始FD完全相同。 (执行此操作的一般方法如下:通过再次连接分解来重建原始表,将该连接向下投影到所提到的属性,并在该投影上强制执行键。对于这些课程练习等情况,实现这一点并不是微不足道的。)
现在,只考虑仍然可表达的原始FD(a->BC),才能决定R1/R2是否在xNF中。
我想您应该得出结论,即R1在3/BC NF中,而R2仍然不在其中。
这些示例(大多数课程练习都是这种性质)实际上说明了规范化概念在数据库设计领域中有多么过度强调。重要的是包括适用于数据库的所有约束的整体图片。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接