这是教科书中的一个例子:
考虑r(a,b,c,d,e)与fd的ab->c的关系,
C->B和A->D。
我们知道关键是阿贝和艾斯。分解:abe+=ace+=abcde。
如何检查最小值?我知道ab+=abd,教科书上说,因为ab+不包括c,所以它是最小的。C+=AB和A+=AD也是最小的。但我不知道为什么。如何检查最小值?
另外,除了检查是否要进行3-NF外,我们还需要找到所有的FD吗?
然后,我们检查a b->c是否可以分成a->c和b->c,我们注意到它们并不独立,因此ab->c是不可分割的。
我们只剩下最后的关系:s1(abc)、s2(bc)、s3(ad)和键(因为不存在)s4(abe)(或s4(abc))。然后删除s2,因为它是s1的子集。
如果它在3nf中并且没有违反,那么为什么它们将原始关系分割为:s1(a,b,c)、s2(a,d)和s4(a,b,e)。
书名和页码:乌尔曼数据库系统第103页
最佳答案
如何检查最小值?
作者在这里不使用极简这个词。要检查最小基础,请遵循示例3.27前两段中的步骤。归结起来就是
“。……确认我们不能消除任何给定的依赖关系。”
“。……确认我们不能从左侧删除任何属性。”
另外,除了检查是否要进行3-NF外,我们还需要找到所有的FD吗?
这个问题真的没有道理。3NF不是你表演的。教科书中的例子与3nf模式的综合算法有关。综合算法将关系r分解为至少3nf的关系。
综合算法对你得到的FDS起作用。在学术环境中,正如你在教科书中可能发现的那样,假设你已经得到了足够的信息来解决这个问题。在实际应用程序中,可能会从业务分析师那里获得一组fds。不要以为分析员给了你足够的信息,找更多的FD。
然后,我们检查a b->c是否可以分成a->c和b->c,我们注意到它们并不独立,因此ab->c是不可分割的。
不。你确认(不注意)你不能从左边删除任何属性。消除a叶b->c;消除b叶a->c。这两个都不是由三个原始fd隐含的。所以你不能从左边删除任何属性。
如果[原始关系]在3NF中并且没有违反。……
原始关系不在3nf中。它甚至不在2NF。(甲->丁)
关于database - 如何确定完成3NF的正确步骤?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42496786/