Database design 如何找到最小覆盖数?
考虑R(A,B,C,D,E,F,G)是一个具有 以下函数依赖项:AC→ G、 D→ 例如,公元前→ D、 CG→ 屋宇署, ACD→ B、 行政长官→ AF.Database design 如何找到最小覆盖数?,database-design,database-normalization,functional-dependencies,Database Design,Database Normalization,Functional Dependencies,考虑R(A,B,C,D,E,F,G)是一个具有 以下函数依赖项:AC→ G、 D→ 例如,公元前→ D、 CG→ 屋宇署, ACD→ B、 行政长官→ AF.可能的不同最小覆盖的数量 是 我如何着手解决上述问题? 我尝试的内容:---------------------------------------------------------------- 我找到可能的最小覆盖数的方法是首先使用算法(如下所示),并通过运行该算法(从而给出可能的最小覆盖数)找到找到最小覆盖数的不同方法。问题是,我
可能的不同最小覆盖的数量 是 我如何着手解决上述问题?
我尝试的内容:
----------------------------------------------------------------
我找到可能的最小覆盖数的方法是首先使用算法(如下所示),并通过运行该算法(从而给出可能的最小覆盖数)找到找到最小覆盖数的不同方法。问题是,我不确定我应该如何考虑“找到一个最小的掩护的不同方式”。例如:
寻找最小覆盖的算法(教科书:“数据库系统基础”-Elmasri,Navathe):
输入:一组功能依赖项,如
中的A 这是X的一个元素,如果{{F–{X→ A} }∪ {(X–{B})→ A} } 等于F,然后替换X→ 带(X–{B})的A→ F中的A
-------------------------------------------------------------
注意:
- “可能的不同最小覆盖数”表示在给定上述关系和函数依赖关系的情况下可能的最小覆盖数
- 假设问题中提到的所有函数依赖项都成立
实际上,算法必须按顺序应用。因此,您可以从该依赖项中删除A或D,但随后必须根据算法规则再次检查生成的函数依赖项集 事实上,例如,如果您删除了,则产生的依赖关系是
CD→ B
,如果重复该步骤,您会发现现在在这个依赖项中没有其他无关的属性。类似地,如果您删除了D,那么产生的依赖项AC→ B
不包含无关属性
因此,您可以看到,根据您在这一步中检查属性的顺序,您可以在理论上生成不同的最小覆盖(并非总是如此,如本例所示)
对于寻找所有可能的最小覆盖的问题,我不知道是否有算法或聪明的技术来找到它们。一种方法是通过考虑所有可能顺序中的依赖关系,以及所有可能顺序中依赖关系的左侧部分来尝试应用该算法,但这当然是一个指数过程。我认为答案是2 因为以下FD相互关联,因此您可以删除其中任何一个 CG-->B ACD-->B
因此,最小覆盖将只包含其中一个,因此两个最小覆盖是可能的。由于算法不明确,“根据算法规则再次检查”没有帮助。我们不能“从依赖项中删除A或D”,依赖项就是它本身。是的,当然你的意思是说关于一个相关的FD&在接下来的步骤中使用它和/或原始的&F和/或一个新的F值,但你和算法都没有这样说。这与引文中的含糊不清的文字更为相似。而且这个问题还不清楚——应该澄清一下&在那之前,没有人回答。(但我相信你已经看到了我对这个问题的评论。)这些FD并不都成立。(我解释了两次)测试的意思是&应该说,这些fd构成了模式中所有fd的覆盖。