我正在看一些重要的论坛,如SMF论坛,PhpBB或VBulleting论坛,我意识到他们不在第三届FN。
他们有很多NULL fiels,例如,在SMF论坛中,成员行可以将所有这些列都设为NULL:
pm_ignore_list, messageLabels, personalText, websiteTitle, websiteUrl, location, ICQ, AIM,
YIM, MSN, timeFormat, userTitle, notifyAnnouncements, secretQuestion, secretAnswer, validation_code, additionalGroups, smileySet
所以......让我们说18个字段在表的任何行中都可以为NULL。 那不是第三个NF ...
他们为什么这样做?我相信他们对BD有很多了解...... 谢谢。
答案 0 :(得分:6)
非规范化的首要原因是性能,这是许多讨论论坛的臭名昭着的问题。
最初,SQL并不是为了轻松存储分层数据而设计的,并且有许多不太理想的模式设计试图解决这个限制。
答案 1 :(得分:1)
这些原因中的一个或多个可能适用。
数据库根本没有“设计”;它逐渐积累了越来越多的列,因为任何工作的程序员决定添加一个。 (程序员通常只接受过数据库设计方面的最低限度培训。)
“设计”,例如它,是委员会决定的结果。 (见上文。)
众所周知,“设计”不是最好的主意,但是为了让软件能够发布而实施。潜在的幻想通常是在下一个版本之前正确修复它。 (通常永远不会得到修复。)
为了更快的SELECT性能,表被非规范化。但根据我的经验,SELECT速度通常会受到以下影响:a)过度使用ID号和b)误解归一化而不是高度正常化。