我对确定功能依赖性感到困惑,需要确认我拥有所有依赖项列表。我有一张桌子。
从下表中我发现:
我的问题是,我是否正确列出了所有可能的功能依赖项?另外(如果我是对的),我看到model --> make
,我还需要model, color --> make
等等。自make, msrp --> model, year
以来,我还需要model, year --> make, msrp
在列表中?
答案 0 :(得分:3)
功能依赖性一直存在。
当您尝试从数据中导出FD时,您可能只能通过巧合导出FD。 FD make, color -> model
意味着"当我看到本田的红色时,我知道它是一个雅阁。"就你所提供的数据而言,这是真的。但是你和我都知道,如果我们等待更多的数据,我们肯定会找到一辆红色的本田思域。 FD make, color -> model
适用于此示例数据,但它并非始终保持不变。
要确定您是否已根据样本数据找到所有FD,您必须测试每种可能的属性组合。 (或者,更好的是,写一个程序来做它。)我没有尝试找到所有这些。你似乎走在了正确的轨道上。
另外(如果我是对的),我看到那个模型 - >制作,我还需要吗? 型号,颜色 - >制作等等。
如果您在学校这样做,您的教授可能希望看到a)所有可能的FD(包括model, color --> make
)和b)您删除后的所有FD可简化的(所以,删除model, color --> make
)。
此外,自make,msrp - >模特,一年,我还需要模特,一年 - > make,msrp在列表中?
是。通过BCNF的归一化取决于确定a)所有候选键,以及b)所有主要和非主要属性。 (主要属性是任何候选键的一部分属性。)FD {AB->CD}
的集合为您提供了一个候选键AB
和两个非主要键属性,C, D
。 FD {AB->CD, CD->AB}
集合为您提供两个候选键和零非主要属性。