Say 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的左侧是否包含在候选键中)。 / p>
答案 0 :(得分:4)
诀窍是将FD视为定义键,而不是考虑给定的模式,而是考虑它的PROJECTIONS。
例如,在您的起始架构{ABCDE}中,FD A - >不列颠哥伦比亚省说,A({A},实际上)是这张桌子上的一个关键,投影到{ABC}。也就是说,FD的LHS和RHS的并集定义了哪个投影,LHS定义了该投影的关键。
现在转到分解版本,其中有两个不同的表(模式){ABC}和{ADE}。
您的第一个和最后一个FD仍可在这些模式中表达。第一个模式/表上的第一个FD,后者的最后一个。
但由于分解,剩下的两个已经变得无法形容(难以形容的 AS AN FD )。对于整个数据库设计而言,这意味着您必须声明/定义/实现一个数据库约束,该数据库约束说明并完成与原始FD完全相同的操作。 (执行此操作的一般方法如下:通过再次将分解连接在一起来重构原始表,将所有属性连接起来的项目,并在该投影上强制执行密钥。对于诸如此类的情况,实现此目标并非完全无关紧要。这些课程练习。)
确定R1 / R2是否在xNF中,现在必须只考虑那些仍然可以表达的原始FD(a-> BC)。
我想你应该得出R1在3 / BC NF中的结论,而R2仍然没有。
这些例子(以及大多数课程练习都具有这种性质)实际上说明了规范化概念在数据库设计领域是多么过分强调。重要的是包含 ALL 适用于数据库的约束的整体情况。