2

我正在查看一些重要的论坛,例如 SMF 论坛、PhpBB 或 VBulleting 论坛,我意识到它们不在 3rd FN 中。

他们有许多 NULL 字段,例如,在 SMF 论坛中,成员行可以将所有这些列都设置为 NULL:

pm_ignore_list, messageLabels, personalText, websiteTitle, websiteUrl, location, ICQ, AIM, YIM, MSN, timeFormat, userTitle, notifyAnnouncements, secretQuestion, secretAnswer, validation_code, additionalGroups, smileySet

所以...假设有 18 个字段在表的任何 ROW 中都可以为 NULL。那不是第三个NF...

他们为什么这样做?我相信他们对 BD 了解很多……谢谢。

4

2 回答 2

6

非规范化的第一个原因是性能,这是许多论坛的一个臭名昭著的问题。

最初 SQL 的设计目的不是为了轻松存储分层数据,并且有许多不太理想的模式设计试图解决这个限制。

于 2012-04-19T16:06:44.463 回答
1

这些原因中的一个或多个可能适用。

  • 数据库根本不是“设计”的。随着任何从事它工作的程序员决定添加一个,它逐渐积累了越来越多的列。(程序员通常只接受过最低限度的数据库设计培训。)

  • “设计”就是委员会决定的结果。(看上面。)

  • 众所周知,“设计”不是最好的想法,但为了让软件发布而实施。潜在的幻想通常是在下一个版本之前正确修复它。(通常永远不会得到修复。)

  • 该表被非规范化以获得更快的 SELECT 性能。但是,根据我的经验,SELECT 速度通常会受到 a) 过度使用 ID 号和 b) 误解规范化而不是高度规范化的影响。

于 2012-04-19T16:23:43.830 回答