【发布时间】:2013-05-18 06:32:55
【问题描述】:
我阅读了关于 3nf 的 wiki https://en.wikipedia.org/wiki/Third_normal_form
这是wiki给出的例子
Tournament Winners
Tournament Year Winner Winner Date of Birth
Indiana Invitational 1998 Al Fredrickson 21 July 1975
Cleveland Open 1999 Bob Albertson 28 September 1968
Des Moines Masters 1999 Al Fredrickson 21 July 1975
Indiana Invitational 1999 Chip Masterson 14 March 1977
它说the non-prime attribute Winner Date of Birth is transitively dependent on the candidate key {Tournament, Year} via the non-prime attribute Winner
我认为函数依赖是这样的
for two row X1 , X2 if X1.col1 = X2.col1 and
X1.col2 = X2.col2, then col1 -> col2
我无法理解获胜者的出生日期->获胜者(可能有相同生日和相同名字的人?) 获胜者可以 -> 候选键 {Tournament, Year} 给定获胜者名称 Al Fredrickson,可能是 1998 年印第安纳邀请赛或 1999 年得梅因大师赛)
那么,它是如何跳到结论的呢?
【问题讨论】:
-
有问题的非键依赖是 {Winner}->{Date of Birth},而不是 {Date of Birth}->{Winner}
-
+1 到 sqlvogel。这是正确的。但是我们怎么知道没有两个都叫 Al Fredrickson 的酒商呢?在那种情况下,他们很可能有不同的出生日期。使用名称作为人的代理是一个坏主意,它会使 wiki 条目更弱。
-
确实如此,除非明确列出了您实际想要执行的 FD,否则此类示例始终没有实际意义。实际上,您肯定不会将名字作为获胜者的标识符,但在一个示例中,它比发明一些任意数字来代替它更简洁明了。
标签: database database-design relational-database third-normal-form