当我在锦标赛获胜者身上看到最后一个例子时,我正在Wikipedia研究维基百科上的数据库规范化2NF的文章。它说,因为表中存在传递依赖,它不在2NF中,需要进一步优化(比如将其拆分为更多表)以将其恢复到3NF并消除数据损坏的可能性。任何人都可以告诉我,“腐败”可能会出现什么样的“显示同一个人在不同的记录中出现不同的出生日期”?
答案 0 :(得分:3)
想象一下,插入此行:
Indiana Invitational 1998 Al Fredrickson 21 July 1975
然后你插入这个(比方说,误):
Des Moines Masters 1999 Al Fredrickson 20 June 1985
如您所见,同一个人在此表中有两个不同的生日。维基百科的文章说,生日取决于人,这不是主键。这意味着该人可以重复,如果您不注意,其依赖属性(如出生日期)可能会发生变化。
您应该做的是创建另一个人名为主要属性的表,并将其依赖数据移到该表(例如此人的出生日期)。这样,您将避免冗余的(name, birthday)
元组并防止可能的损坏(以及节省内存)。