Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么论坛数据库不在第三个NF中?_Php_Mysql_Sql_Database_Forum - Fatal编程技术网

Php 为什么论坛数据库不在第三个NF中?

Php 为什么论坛数据库不在第三个NF中?,php,mysql,sql,database,forum,Php,Mysql,Sql,Database,Forum,我看了一些重要的论坛,如SMF论坛、PhpBB或VBulleting论坛,我意识到它们不在第三个FN中 他们有许多空域,例如,在SMF论坛中,一个成员行可以将所有这些列设置为空: pm\u忽略列表、消息标签、个人文本、网站标题、网站URL、位置、ICQ、目标、YIM、MSN、timeFormat、userTitle、NotifyAnnounces、secretQuestion、secretAnswer、验证代码、附加组、笑脸集 所以。。。假设18个字段可以在表的任何一行中为空。 那不是第三个NF

我看了一些重要的论坛,如SMF论坛、PhpBB或VBulleting论坛,我意识到它们不在第三个FN中

他们有许多空域,例如,在SMF论坛中,一个成员行可以将所有这些列设置为空:

pm\u忽略列表、消息标签、个人文本、网站标题、网站URL、位置、ICQ、目标、
YIM、MSN、timeFormat、userTitle、NotifyAnnounces、secretQuestion、secretAnswer、验证代码、附加组、笑脸集

所以。。。假设18个字段可以在表的任何一行中为空。 那不是第三个NF

他们为什么这么做?我相信他们知道很多关于BD。。。
谢谢

非规范化的首要原因是性能,这是许多论坛中臭名昭著的问题


最初,SQL的设计不是为了方便地存储分层数据,有许多不太理想的模式设计试图绕过这一限制。

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

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

  • 这种“设计”是委员会决定的结果。(见上文。)

  • 众所周知,“设计”并不是最好的想法,但它的实现是为了让软件上市。潜在的幻想通常是在下一个版本之前正确地修复它。(通常情况下,这些问题永远不会得到解决。)

  • 该表进行了非规范化,以提高SELECT性能。然而,根据我的经验,SELECT speed通常更多地受到a)ID号的过度使用和b)标准化的误解的影响,而不是受到高度标准化的影响


为什么他们需要在这些空字段中插入内容?3NF不需要在非关键字段中插入空值?Per Bill Kent:“[Every]非键[属性]必须提供有关键、整个键以及除键以外的任何内容的事实。”空值在这里可以做到这一点。@JonathanM:1NF不需要空值,这取决于您接受的1NF的定义。@Hajo,这些字段被视为“可选”字段。成员可以将它们设置为NULL或包含一些数据。JonathanM,第三个NF,在许多情况下避免空字段,这就是其中之一。如果你这样做的话,每个可选字段都会有很多表。是的,我同意,我想添加一个例子。你想保留论坛的最后一张海报。你可以很容易地做到这一点,只保留最后一张海报的ID,但如果你这样做的话,你需要在列出论坛或主题时再加入一次。如果您想要更高的性能,您只需在forums表中保留用户名和ID,该表现在是多余的,但可以避免额外的连接。好的,我明白了。谢谢RedFilter。所以这都是关于性能的。。。那么,3FN并不总是擅长于性能,对吧?不总是。“正常化直到疼痛,非正常化直到有效”