在this video的9:34,发言者说所有3个功能依赖都是Boyce Codd Normal Form。我不相信,因为显然GPA无法确定学生表中的SSN,sName,地址和所有其他属性。我对Boyce Codd Normal Form的定义或超级密钥的含义感到困惑吗?它是否必须能够唯一地识别某些属性,而不是模式中的所有属性?例如,GPA确定优先级(位于功能依赖的右侧),但不确定其他所有优先级。
例如,如果我有关系R(A,B,C,D)和FDs A-> B,我们会说A是B的超级密钥,但我认为超级密钥是针对整个表格的吗?为了增加我的困惑,我知道BCNF它可以是(主)键,但你只能拥有该表的主键。我的大脑很疼。
答案 0 :(得分:3)
“......发言者说所有3个功能依赖都是Boyce Codd Normal Form。”
属于BC正常形式的属性可以通过 RELATIONS (关系变量,更具体地说,或关系模式,如果这个术语更适合你),而不是功能依赖。如果你发现某人谈论如此笨拙的规范化理论,请留下并转向更准确的解释。
关系变量是否确实处于BC正常形式,取决于应该在其中保留哪些功能依赖性。这就是为什么说功能依赖是或不是BC正常形式完全是胡说八道。
“我不相信,因为显然GPA无法确定学生表中的SSN,sName,地址和所有其他属性。要么我对Boyce Codd Normal Form的定义或者超级密钥感到困惑是吗?它是否必须能够唯一地识别某些属性,而不是模式中的所有属性?“
不可简化的候选键是关系模式的属性集(不一定是唯一的),它保证在任何关系值中都可以有效地出现在数据库的关系变量中,具有属性值的唯一组合。
在您的(A,B,C,D)示例中,如果A-> B是仅 FD,则唯一的候选键是{A,C,D}。
“例如,如果我有关系R(A,B,C,D)和FDs A-> B,我们会说A是B的超级密钥”
在这种情况下,谈论A作为B的“关键”是一种草率和混乱。假装教别人的人应该知道这一点,而那些不这样做的人,除非他们知道这一点,否则不应该从事任何教学。在这种情况下,最好将A作为B的“决定因素”。在关系数据库设计的上下文中,术语“关键”具有非常明确和精确的含义,并且对于其他含义使用相同的术语仅仅使人混淆。正如你的问题所证明的那样。
“但我觉得超级钥匙适用于整张桌子?”
是的,你是对的。
返回(A,B,C,D)示例。 如果我们将该设计拆分为(A,B)和(A,C,D),然后我们会有一个关系模式 - (A,B)其中一个我们可以说“{A}是该模式中的一个关键”。
这实际上恰恰是FD A-> B意味着:如果你采取投影 - 将出现在(A,B,C,D)数据库中的关系值模式 - 在属性{A,B},然后你应该得到一个关系,其中没有A值出现两次(如果它出现,那么A值将对应于> 1个不同的B价值,意味着A毕竟不可能是B的决定因素。)
“为了增加我的困惑,我知道BCNF它可以是一个(主要)键但是......”
现在你自己很邋.. “它”指的是什么?