Database design 如何找到最小覆盖数?

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.可能的不同最小覆盖的数量 是 我如何着手解决上述问题? 我尝试的内容:---------------------------------------------------------------- 我找到可能的最小覆盖数的方法是首先使用算法(如下所示),并通过运行该算法(从而给出可能的最小覆盖数)找到找到最小覆盖数的不同方法。问题是,我

考虑R(A,B,C,D,E,F,G)是一个具有 以下函数依赖项:AC→ G、 D→ 例如,公元前→ D、 CG→ 屋宇署, ACD→ B、 行政长官→ AF.
可能的不同最小覆盖的数量 是

我如何着手解决上述问题?

我尝试的内容:
----------------------------------------------------------------
我找到可能的最小覆盖数的方法是首先使用算法(如下所示),并通过运行该算法(从而给出可能的最小覆盖数)找到找到最小覆盖数的不同方法。问题是,我不确定我应该如何考虑“找到一个最小的掩护的不同方式”。例如:

寻找最小覆盖的算法(教科书:“数据库系统基础”-Elmasri,Navathe):

输入:一组功能依赖项,如

  • 集合F:=E

  • 替换每个函数依赖项X→ F中的{A1,A2,…,An} n函数依赖关系X→A1,X→A2,…,X→ 安

  • 对于每个函数依赖项X→ 每个属性B的F
    中的A 这是X的一个元素,如果{{F–{X→ A} }∪ {(X–{B})→ A} } 等于F,然后替换X→ 带(X–{B})的A→ F中的A

  • 对于每个剩余的函数依赖项X→ F中的A如果{F–{X→ A} }等于F,然后去掉X→ A来自F

  • 在应用该算法时,在ACD→ B、 我发现A和D是无关的(取代了ACD)→ B加C→ B在步骤3中给出了一组相当于F)的函数依赖项,但我不确定是否必须替换ACD→ B加C→ B或ACD→ B与AC→ B或ACD→ B带CD→ B.如果我确实更换了ACD,请说明→ B与AC→ B或CD→ B、 我不确定是否更换ACD→ B与AC→ B可能导致一个最小的盖子,并更换ACD→ B带CD→ B可能导致另一种可能的最低限度的保护。
    -------------------------------------------------------------
    注意

    • “可能的不同最小覆盖数”表示在给定上述关系和函数依赖关系的情况下可能的最小覆盖数
    • 假设问题中提到的所有函数依赖项都成立
    我不确定是否必须更换ACD→ B加C→ B或ACD→ B与AC→ B或ACD→ B带CD→ B


    实际上,算法必须按顺序应用。因此,您可以从该依赖项中删除A或D,但随后必须根据算法规则再次检查生成的函数依赖项集

    事实上,例如,如果您删除了,则产生的依赖关系是
    CD→ B
    ,如果重复该步骤,您会发现现在在这个依赖项中没有其他无关的属性。类似地,如果您删除了D,那么产生的依赖项
    AC→ B
    不包含无关属性

    因此,您可以看到,根据您在这一步中检查属性的顺序,您可以在理论上生成不同的最小覆盖(并非总是如此,如本例所示)


    对于寻找所有可能的最小覆盖的问题,我不知道是否有算法或聪明的技术来找到它们。一种方法是通过考虑所有可能顺序中的依赖关系,以及所有可能顺序中依赖关系的左侧部分来尝试应用该算法,但这当然是一个指数过程。

    我认为答案是2

    因为以下FD相互关联,因此您可以删除其中任何一个 CG-->B ACD-->B


    因此,最小覆盖将只包含其中一个,因此两个最小覆盖是可能的。

    由于算法不明确,“根据算法规则再次检查”没有帮助。我们不能“从依赖项中删除A或D”,依赖项就是它本身。是的,当然你的意思是说关于一个相关的FD&在接下来的步骤中使用它和/或原始的&F和/或一个新的F值,但你和算法都没有这样说。这与引文中的含糊不清的文字更为相似。而且这个问题还不清楚——应该澄清一下&在那之前,没有人回答。(但我相信你已经看到了我对这个问题的评论。)这些FD并不都成立。(我解释了两次)测试的意思是&应该说,这些fd构成了模式中所有fd的覆盖。