我看了一下3NF https://en.wikipedia.org/wiki/Third_normal_form3NF在维基的例子函数依赖
维基这是维基给
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
我cann OT明白生日 - 这得主日期>得奖者(有可能是人谁拥有相同的生日,同一个名字?) 和赢家可以 - >候选键{赛,年度}给出的获奖者铝弗雷德里克森,它可能是印第安纳邀请赛1998年或得梅因大师1999)
那么,它是如何跳到结论?
问题的非关键依赖项是{Winner} - > {出生日期},而不是{出生日期} - > {Winner} – sqlvogel
+1 to sqlvogel。那就对了。但是,我们怎么知道两个名叫Al Fredrickson的酒师都没有?在这种情况下,他们可能有不同的出生日期。使用这个名字作为这个人的代名词是一个不好的主意,它会使wiki条目变得更弱。 –
除非您确实需要强制执行的FD清楚地列出,否则确切和此类示例总是没有意义。在现实中,你肯定不会把这个名字作为获胜者的标识符,但是在一个例子中,它可以比发明一些任意数字更简洁明了。 – sqlvogel