gpt4 book ai didi

database - wiki 示例中的 3nf 函数依赖

转载 作者:搜寻专家 更新时间:2023-10-30 22:14:23 24 4
gpt4 key购买 nike

我阅读了关于 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

它表示非主要属性 Winner Date of Birth 通过非主要属性 Winner 传递依赖于候选键 {Tournament, Year}

我认为函数依赖是

for two row X1 , X2 if X1.col1 = X2.col1 and 
X1.col2 = X2.col2, then col1 -> col2

我无法理解 Winner Date of Birth->Winner(可能有人生日和名字相同?)获胜者可以 -> 候选 key {Tournament, Year} 给定获胜者姓名 Al Fredrickson,它可能是 1998 年印第安纳邀请赛或 1999 年得梅因大师赛)

那么,它是如何得出结论的呢?

最佳答案

非正式地,一个functional dependency意味着左侧的一个值不能在右侧产生多个值,即使左侧存在于多行中也是如此。1

所以,在维基百科的例子中,有一个函数依赖 Winner -> Winner Date of Birth,仅仅是因为同一个获胜者不能有不同的出生日期,即使他/她存在于多行中(因为他/她赢得了多项比赛)。

因为...

  • {Tournament, Year} -> Winner(因为一场比赛不能有多个获胜者)
  • 获胜者 -> 获胜者出生日期(如上所述)
  • 并且不是 Winner -> {Tournament, Year}(因为一个人可以赢得多个比赛)

...然后 by definition存在传递依赖。

I cannot understand that Winner Date of Birth->Winner(there may be someone who have same birthday and same name?)

你翻转了方向。函数依赖不是“来自”单个值,而是“朝向”它。因此 Winner -> Winner Date of Birth,但不是 Winner Date of Birth -> Winner

顺便说一句,这个模型中不能有两个名字不同的人。一个更好(更现实)的模型可能会使用代理键来识别人,允许重复的名字。


1 符合“函数”的数学概念。无论您“调用”一个函数多少次(即有多少行包含 f.d. 左侧),它总是产生相同的“结果”(f.d. 右侧)。如果它可以产生多个结果,那么它就不是一个函数,而是一个“关系”。

关于database - wiki 示例中的 3nf 函数依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16621446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com