1

我在 Wikipedia 上研究Wikipedia中有关 Database Normalization 2NF 的文章时,遇到了最后一个示例,关于锦标赛获胜者。那里说,因为表中有传递依赖,它不在 2NF 中,需要进一步优化(比如将其拆分为更多表)以将其恢复到 3NF 并消除数据损坏的机会。谁能告诉我什么样的“腐败”会蔓延到“显示同一个人在不同的记录上显示不同的出生日期”?

4

1 回答 1

3

想象一下,一旦你插入了这一行:

 Indiana Invitational   1998    Al Fredrickson  21 July 1975

然后你插入这个(比如说,错误地):

 Des Moines Masters     1999    Al Fredrickson  20 June 1985

如您所见,同一个人在此表中有 2 个不同的生日。维基百科文章说的是生日取决于人,这不是主键。这意味着这个人可以重复,如果你不注意,它的依赖属性(例如出生日期)可能会改变。

您应该做的是创建另一个以人名作为主要属性的表,并将其相关数据移动到该表(例如人的出生日期)。这样,您将避免冗余(name, birthday)元组并防止可能的损坏(以及节省内存)。

于 2012-06-29T11:55:53.940 回答