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